Skip to contentSkip to conversation

ASoC: wm8711: Fix wrong mask for setting input audio data bit length select

PATCH In review Axel Lin 2 participants 5 messages Oct 28, 2011 – Oct 31, 2011

Subsystems (3)
lore
Share & tools
lore

Axel Lin

author
#0 lore raw

PATCH 1/2 ASoC: wm8711: Fix wrong mask for setting input audio data bit length select

The Input Audio Data Bit Length Select is controlled by BIT[3:2] of WM8711_IFACE(07h) register.
Current code incorrectly masks BIT[1:0] which is for Audio Data Format Select.

---
 sound/soc/codecs/wm8711.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)
sound/soc/codecs/wm8711.c +1 -1
index 8d0347c..8ba49d8 100644
@@ -151,7 +151,7 @@ static int wm8711_hw_params(struct snd_pcm_substream *substream,
 {
 	struct snd_soc_codec *codec = dai->codec;
 	struct wm8711_priv *wm8711 =  snd_soc_codec_get_drvdata(codec);
-	u16 iface = snd_soc_read(codec, WM8711_IFACE) & 0xfffc;
+	u16 iface = snd_soc_read(codec, WM8711_IFACE) & 0xfff3;
 	int i = get_coeff(wm8711->sysclk, params_rate(params));
 	u16 srate = (coeff_div[i].sr << 2) |
 		(coeff_div[i].bosr << 1) | coeff_div[i].usb;
Signature · 1 line
1.7.5.4
author
#1 lore raw

PATCH 2/2 ASoC: wm8711: Add proper mask for wm8711_set_dai_fmt

Add mask for BIT[3:2] (the Input Audio Data Bit Length Select) of WM8711_IFACE(07h) register.
Otherwise, BIT[3:2] will be always set to 0b00 here.

---
 sound/soc/codecs/wm8711.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)
sound/soc/codecs/wm8711.c +1 -1
index 8ba49d8..076bdb9 100644
@@ -232,7 +232,7 @@ static int wm8711_set_dai_fmt(struct snd_soc_dai *codec_dai,
 		unsigned int fmt)
 {
 	struct snd_soc_codec *codec = codec_dai->codec;
-	u16 iface = 0;
+	u16 iface = snd_soc_read(codec, WM8711_IFACE) & 0x000c;
 
 	/* set master/slave audio interface */
 	switch (fmt & SND_SOC_DAIFMT_MASTER_MASK) {
Signature · 1 line
1.7.5.4
author
#2 lore raw

Re: [PATCH 2/2] ASoC: wm8711: Add proper mask for wm8711_set_dai_fmt

2011/10/28 Axel Lin <[email protected]>:

Quoted 4 lines

Add mask for BIT[3:2] (the Input Audio Data Bit Length Select) of WM8711_IFACE(07h) register.
Otherwise, BIT[3:2] will be always set to 0b00 here.

I think the subject line is not good.
I'll resend a patch with below subject line:
ASoC: Leave input audio data bit length settings untouched in wm8711_set_dai_fmt

Regards,
Axel

#3 lore raw

Re: [PATCH 2/2] ASoC: wm8711: Add proper mask for wm8711_set_dai_fmt

In reply to Axel Lin
Quoted 3 lines · Axel Lin

Add mask for BIT[3:2] (the Input Audio Data Bit Length Select) of WM8711_IFACE(07h) register.
Otherwise, BIT[3:2] will be always set to 0b00 here.

Your changelog here isn't terribly clear and doesn't really correspond to the change well. Here you say you're masking something but...

sound/soc/codecs/wm8711.c static int wm8711_set_dai_fmt(struct snd_soc_dai *codec_dai, · line 235

Quoted 2 lines
sound/soc/codecs/wm8711.c +1 -1
-	u16 iface = 0;
+	u16 iface = snd_soc_read(codec, WM8711_IFACE) & 0x000c;

...what you're actually doing is preserving the existing values of some register bits. Nevertheless the change looks good so applied.

author
#4 lore raw

PATCH 2/2 ASoC: Leave input audio data bit length settings untouched in wm8711_set_dai_fmt

In reply to Axel Lin

Current implementation in wm8711_set_dai_fmt always clear BIT[3:2] (the Input Audio Data Bit Length Select) of WM8711_IFACE(07h) register. Input Audio Data Bit Length Select bits are set by wm8711_hw_params, we should leave BIT[3:2] untouched in wm8711_set_dai_fmt.

---
 sound/soc/codecs/wm8711.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)
sound/soc/codecs/wm8711.c +1 -1
index 8ba49d8..076bdb9 100644
@@ -232,7 +232,7 @@ static int wm8711_set_dai_fmt(struct snd_soc_dai *codec_dai,
 		unsigned int fmt)
 {
 	struct snd_soc_codec *codec = codec_dai->codec;
-	u16 iface = 0;
+	u16 iface = snd_soc_read(codec, WM8711_IFACE) & 0x000c;
 
 	/* set master/slave audio interface */
 	switch (fmt & SND_SOC_DAIFMT_MASTER_MASK) {
Signature · 1 line
1.7.5.4