[PATCH 3/3] ASoC: wm8741: Set SR mode in hw_params()

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Set the ratio of MCLK/LRCLK in hw_params() instead of relying on the
auto-detection.

The ratio of MCLK/LRCLK is known to the driver, there is no need to let
the device to detect it.

Signed-off-by: Sergej Sawazki <sergej@xxxxxxxxxx>
---
 sound/soc/codecs/wm8741.c | 29 +++++++++++++++++++++--------
 1 file changed, 21 insertions(+), 8 deletions(-)

diff --git a/sound/soc/codecs/wm8741.c b/sound/soc/codecs/wm8741.c
index 7e8a7fe..534741b 100644
--- a/sound/soc/codecs/wm8741.c
+++ b/sound/soc/codecs/wm8741.c
@@ -198,7 +198,6 @@ static int wm8741_hw_params(struct snd_pcm_substream *substream,
 	struct wm8741_priv *wm8741 = snd_soc_codec_get_drvdata(codec);
 	u16 iface = snd_soc_read(codec, WM8741_FORMAT_CONTROL) & 0x1FC;
 	u16 mode = snd_soc_read(codec, WM8741_MODE_CONTROL_1) & 0x183;
-	int i;
 
 	/* The set of sample rates that can be supported depends on the
 	 * MCLK supplied to the CODEC - enforce this.
@@ -209,13 +208,27 @@ static int wm8741_hw_params(struct snd_pcm_substream *substream,
 		return -EINVAL;
 	}
 
-	/* Find a supported LRCLK rate */
-	for (i = 0; i < wm8741->sysclk_constraints->count; i++) {
-		if (wm8741->sysclk_constraints->list[i] == params_rate(params))
-			break;
-	}
-
-	if (i == wm8741->sysclk_constraints->count) {
+	/* MCLK to LRCLK sampling rate ratio */
+	switch (wm8741->sysclk / params_rate(params)) {
+	case 128:
+		mode |= 0x0004;
+		break;
+	case 192:
+		mode |= 0x0008;
+		break;
+	case 256:
+		mode |= 0x000C;
+		break;
+	case 384:
+		mode |= 0x0010;
+		break;
+	case 512:
+		mode |= 0x0014;
+		break;
+	case 768:
+		mode |= 0x0018;
+		break;
+	default:
 		dev_err(codec->dev, "LRCLK %d unsupported with MCLK %d\n",
 			params_rate(params), wm8741->sysclk);
 		return -EINVAL;
-- 
2.7.4

_______________________________________________
Alsa-devel mailing list
Alsa-devel@xxxxxxxxxxxxxxxx
http://mailman.alsa-project.org/mailman/listinfo/alsa-devel



[Index of Archives]     [ALSA User]     [Linux Audio Users]     [Kernel Archive]     [Asterisk PBX]     [Photo Sharing]     [Linux Sound]     [Video 4 Linux]     [Gimp]     [Yosemite News]

  Powered by Linux