Title: [8728] trunk/sound/soc: ad193x: replace set_pll by set_sysclk according to LKML feedback
Revision
8728
Author
bhsong
Date
2010-05-20 23:40:49 -0400 (Thu, 20 May 2010)

Log Message

ad193x: replace set_pll by set_sysclk according to LKML feedback

Modified Paths


Diff

Modified: trunk/sound/soc/blackfin/bf5xx-ad193x.c (8727 => 8728)


--- trunk/sound/soc/blackfin/bf5xx-ad193x.c	2010-05-20 07:37:26 UTC (rev 8727)
+++ trunk/sound/soc/blackfin/bf5xx-ad193x.c	2010-05-21 03:40:49 UTC (rev 8728)
@@ -66,6 +66,13 @@
 	if (ret < 0)
 		return ret;
 
+#if 0
+	ret = snd_soc_dai_set_sysclk(codec_dai, 0, 24576000,
+			SND_SOC_CLOCK_IN);
+	if (ret < 0)
+		return ret;
+#endif
+
 	/* set codec DAI slots, 8 channels, all channels are enabled */
 	ret = snd_soc_dai_set_tdm_slot(codec_dai, 0xFF, 0xFF, 8, 32);
 	if (ret < 0)
@@ -77,13 +84,6 @@
 	if (ret < 0)
 		return ret;
 
-#if 0
-	/* if input frequency is not 12288000, we need set pll */
-	ret = snd_soc_dai_set_pll(codec_dai, 0, 0,
-			24576000, 12288000);
-	if (ret < 0)
-		return ret;
-#endif
 	return 0;
 }
 

Modified: trunk/sound/soc/codecs/ad193x.c (8727 => 8728)


--- trunk/sound/soc/codecs/ad193x.c	2010-05-20 07:37:26 UTC (rev 8727)
+++ trunk/sound/soc/codecs/ad193x.c	2010-05-21 03:40:49 UTC (rev 8728)
@@ -23,6 +23,7 @@
 
 /* codec private data */
 struct ad193x_priv {
+	unsigned int sysclk;
 	struct snd_soc_codec codec;
 	u8 reg_cache[AD193X_NUM_REGS];
 };
@@ -250,45 +251,32 @@
 	return 0;
 }
 
-static int ad193x_set_dai_pll(struct snd_soc_dai *codec_dai,
-		int pll_id, int source, unsigned int freq_in, unsigned int freq_out)
+static int ad193x_set_dai_sysclk(struct snd_soc_dai *codec_dai,
+		int clk_id, unsigned int freq, int dir)
 {
 	struct snd_soc_codec *codec = codec_dai->codec;
-	int reg;
-
-	reg = snd_soc_read(codec, AD193X_PLL_CLK_CTRL0);
-
-	switch (freq_in) {
+	struct ad193x_priv *ad193x = codec->private_data;
+	switch (freq) {
 	case 12288000:
-		reg = (reg & AD193X_PLL_INPUT_MASK) | AD193X_PLL_INPUT_256;
-		break;
 	case 18432000:
-		reg = (reg & AD193X_PLL_INPUT_MASK) | AD193X_PLL_INPUT_384;
-		break;
 	case 24576000:
-		reg = (reg & AD193X_PLL_INPUT_MASK) | AD193X_PLL_INPUT_512;
-		break;
 	case 36864000:
-		reg = (reg & AD193X_PLL_INPUT_MASK) | AD193X_PLL_INPUT_768;
-		break;
-	default:
-		dev_err(codec->dev, "ad193x_set_dai_pll: unsupported pll input freq:%d", freq_in);
-		return -EINVAL;
+		ad193x->sysclk = freq;
+		return 0;
 	}
-
-	snd_soc_write(codec, AD193X_PLL_CLK_CTRL0, reg);
-	return 0;
+	return -EINVAL;
 }
 
 static int ad193x_hw_params(struct snd_pcm_substream *substream,
 		struct snd_pcm_hw_params *params,
 		struct snd_soc_dai *dai)
 {
-	int word_len = 0, reg = 0;
+	int word_len = 0, reg = 0, master_rate = 0;
 
 	struct snd_soc_pcm_runtime *rtd = substream->private_data;
 	struct snd_soc_device *socdev = rtd->socdev;
 	struct snd_soc_codec *codec = socdev->card->codec;
+	struct ad193x_priv *ad193x = codec->private_data;
 
 	/* bit size */
 	switch (params_format(params)) {
@@ -304,6 +292,25 @@
 		break;
 	}
 
+	switch (ad193x->sysclk) {
+	case 12288000:
+		master_rate = AD193X_PLL_INPUT_256;
+		break;
+	case 18432000:
+		master_rate = AD193X_PLL_INPUT_384;
+		break;
+	case 24576000:
+		master_rate = AD193X_PLL_INPUT_512;
+		break;
+	case 36864000:
+		master_rate = AD193X_PLL_INPUT_768;
+		break;
+	}
+
+	reg = snd_soc_read(codec, AD193X_PLL_CLK_CTRL0);
+	reg = (reg & AD193X_PLL_INPUT_MASK) | master_rate;
+	snd_soc_write(codec, AD193X_PLL_CLK_CTRL0, reg);
+
 	reg = snd_soc_read(codec, AD193X_DAC_CTRL2);
 	reg = (reg & (~AD193X_DAC_WORD_LEN_MASK)) | word_len;
 	snd_soc_write(codec, AD193X_DAC_CTRL2, reg);
@@ -377,6 +384,7 @@
 	/* pll input: mclki/xi */
 	snd_soc_write(codec, AD193X_PLL_CLK_CTRL0, 0x99); /* mclk=24.576Mhz: 0x9D; mclk=12.288Mhz: 0x99 */
 	snd_soc_write(codec, AD193X_PLL_CLK_CTRL1, 0x04);
+	ad193x->sysclk = 12288000;
 
 	ret = snd_soc_register_codec(codec);
 	if (ret != 0) {
@@ -412,8 +420,8 @@
 	.hw_params = ad193x_hw_params,
 	.digital_mute = ad193x_mute,
 	.set_tdm_slot = ad193x_set_tdm_slot,
+	.set_sysclk	= ad193x_set_dai_sysclk,
 	.set_fmt = ad193x_set_dai_fmt,
-	.set_pll = ad193x_set_dai_pll,
 };
 
 /* codec DAI instance */
_______________________________________________
Linux-kernel-commits mailing list
[email protected]
https://blackfin.uclinux.org/mailman/listinfo/linux-kernel-commits

Reply via email to