Title: [6623] trunk/sound/soc: fix the problem:sometimes can't hear anything when playing/recording simultaneously
Revision
6623
Author
bhsong
Date
2009-06-10 01:31:23 -0500 (Wed, 10 Jun 2009)

Log Message

fix the problem:sometimes can't hear anything when playing/recording simultaneously

Modified Paths

Diff

Modified: trunk/sound/soc/blackfin/bf5xx-tdm.c (6622 => 6623)


--- trunk/sound/soc/blackfin/bf5xx-tdm.c	2009-06-10 06:26:26 UTC (rev 6622)
+++ trunk/sound/soc/blackfin/bf5xx-tdm.c	2009-06-10 06:31:23 UTC (rev 6623)
@@ -176,7 +176,7 @@
 
 	/* request DMA for SPORT */
 	sport_handle = sport_init(&sport_params[sport_num], 4, \
-			2 * sizeof(u32), NULL);
+			8 * sizeof(u32), NULL);
 	if (!sport_handle) {
 		peripheral_free_list(&sport_req[sport_num][0]);
 		return -ENODEV;

Modified: trunk/sound/soc/codecs/ad1938.c (6622 => 6623)


--- trunk/sound/soc/codecs/ad1938.c	2009-06-10 06:26:26 UTC (rev 6622)
+++ trunk/sound/soc/codecs/ad1938.c	2009-06-10 06:31:23 UTC (rev 6623)
@@ -108,16 +108,21 @@
 		int pll_id, unsigned int freq_in, unsigned int freq_out)
 {
 	struct snd_soc_codec *codec = codec_dai->codec;
+	struct ad1938_pwr_sta *pwr_sta = codec->private_data;
 	int pll_reg;
 
 	if (freq_out) {
 		pll_reg = codec->read(codec, AD1938_PLL_CLK_CTRL0);
 		pll_reg &= ~PLL_POWERDOWN;
+		codec->write(codec, AD1938_PLL_CLK_CTRL0, pll_reg);
 	} else {
-		pll_reg = codec->read(codec, AD1938_PLL_CLK_CTRL0);
-		pll_reg |= PLL_POWERDOWN;
+		/* playing while recording, framework will poweroff-poweron pll redundantly */
+		if ((pwr_sta->dac_pwr == 0) && (pwr_sta->adc_pwr == 0)) {
+			pll_reg = codec->read(codec, AD1938_PLL_CLK_CTRL0);
+			pll_reg |= PLL_POWERDOWN;
+			codec->write(codec, AD1938_PLL_CLK_CTRL0, pll_reg);
+		}
 	}
-	codec->write(codec, AD1938_PLL_CLK_CTRL0, pll_reg);
 
 	return 0;
 }
@@ -357,7 +362,7 @@
 		goto register_err;
 	}
 
-	/* default setting for ad1938: 8 channel AUX ADC mode, 16bit, 48000Hz */
+	/* default setting for ad1938, poweroff dac/adc/pll */
 	codec->write(codec, AD1938_DAC_CTRL0, 0x41); /* sample rate:32/44.1/48kHz, sata delay=1, tdm mode */
 	codec->write(codec, AD1938_DAC_CTRL1, 0x84); /* invert bclk, 256bclk/frame, latch in mid */
 	codec->write(codec, AD1938_DAC_CTRL2, 0x1A); /* de-emphasis: 48kHz */
@@ -365,7 +370,7 @@
 	codec->write(codec, AD1938_ADC_CTRL1, 0x43); /* sata delay=1, adc aux mode */
 	codec->write(codec, AD1938_ADC_CTRL2, 0x6F); /* left high, driver on rising edge */
 	codec->write(codec, AD1938_DAC_CHNL_MUTE, 0xFF); /* mute all dac channels */
-	codec->write(codec, AD1938_PLL_CLK_CTRL0, 0x9C); /* pll input:mclki/xi, master clock rate:512*fs */
+	codec->write(codec, AD1938_PLL_CLK_CTRL0, 0x9D); /* pll input:mclki/xi, master clock rate:512*fs */
 	codec->write(codec, AD1938_PLL_CLK_CTRL1, 0x04);
 
 	/* register controls for ad1938 */
_______________________________________________
Linux-kernel-commits mailing list
[email protected]
https://blackfin.uclinux.org/mailman/listinfo/linux-kernel-commits

Reply via email to