Skip to contentSkip to conversation

ASoC: wm8741: Fix setting interface format for DSP modes

PATCH Applied Axel Lin 3 participants 4 messages Oct 17, 2011

Subsystems (3)
lore
Share & tools
lore

Axel Lin

author
#0 lore raw

PATCH 1/2 ASoC: wm8741: Fix setting interface format for DSP modes

According to the datasheet:
Format Control (05h)
BITS[3:2]
FMT[1:0] Audio data format selection
00 = right justified mode
01 = left justified mode
10 = I2S mode
11 = DSP mode
BIT[4] LRP Polarity selec for LRCLK/DSP mode select
0 = normal LRCLK poalrity/DSP mode A 1 = inverted LRCLK poarity/DSP mode B

For SND_SOC_DAIFMT_DSP_A, we should set 0x000C instead of 0x0003. For SND_SOC_DAIFMT_DSP_B, we should set 0x001C instead of 0x0013.

---
 sound/soc/codecs/wm8741.c |    4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)
sound/soc/codecs/wm8741.c +2 -2
index a42b282..85ebe02 100644
@@ -339,10 +339,10 @@ static int wm8741_set_dai_fmt(struct snd_soc_dai *codec_dai,
 		iface |= 0x0004;
 		break;
 	case SND_SOC_DAIFMT_DSP_A:
-		iface |= 0x0003;
+		iface |= 0x000C;
 		break;
 	case SND_SOC_DAIFMT_DSP_B:
-		iface |= 0x0013;
+		iface |= 0x001C;
 		break;
 	default:
 		return -EINVAL;
Signature · 1 line
1.7.5.4
author
#1 lore raw

PATCH 2/2 ASoC: wm8741: Use snd_soc_cache_sync to sync reg_cache with the hardware

---
 sound/soc/codecs/wm8741.c |   10 +---------
 1 files changed, 1 insertions(+), 9 deletions(-)
sound/soc/codecs/wm8741.c +1 -9
index 85ebe02..57ad22a 100644
@@ -404,15 +404,7 @@ static struct snd_soc_dai_driver wm8741_dai = {
 #ifdef CONFIG_PM
 static int wm8741_resume(struct snd_soc_codec *codec)
 {
-	u16 *cache = codec->reg_cache;
-	int i;
-
-	/* RESTORE REG Cache */
-	for (i = 0; i < WM8741_REGISTER_COUNT; i++) {
-		if (cache[i] == wm8741_reg_defaults[i] || WM8741_RESET == i)
-			continue;
-		snd_soc_write(codec, i, cache[i]);
-	}
+	snd_soc_cache_sync(codec);
 	return 0;
 }
 #else
Signature · 1 line
1.7.5.4
Acked-by on v1 1/2
#2 lore raw
In reply to Axel Lin
Quoted 38 lines · Axel Lin

According to the datasheet:
Format Control (05h)
BITS[3:2]
FMT[1:0] Audio data format selection
00 = right justified mode
01 = left justified mode
10 = I2S mode
11 = DSP mode
BIT[4] LRP Polarity selec for LRCLK/DSP mode select
0 = normal LRCLK poalrity/DSP mode A 1 = inverted LRCLK poarity/DSP mode B

For SND_SOC_DAIFMT_DSP_A, we should set 0x000C instead of 0x0003. For SND_SOC_DAIFMT_DSP_B, we should set 0x001C instead of 0x0013.

---
 sound/soc/codecs/wm8741.c |    4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)
sound/soc/codecs/wm8741.c +2 -2
index a42b282..85ebe02 100644
@@ -339,10 +339,10 @@ static int wm8741_set_dai_fmt(struct snd_soc_dai
 *codec_dai,
               iface |= 0x0004;
               break;
       case SND_SOC_DAIFMT_DSP_A:
-               iface |= 0x0003;
+               iface |= 0x000C;
               break;
       case SND_SOC_DAIFMT_DSP_B:
-               iface |= 0x0013;
+               iface |= 0x001C;
               break;
       default:
               return -EINVAL;
Quoted 6 lines

--
1.7.5.4

Both