[alsa-devel] [PATCH] ASoC: wm8962: Correct the bit offset to enable mono speaker output
As WM8962 datasheet describes for SPK_MONO bit of R51: When SPK_MONO is set to '1', both speakers output the signal from the left channel.
So for mono speaker widget, we shall enable Left Channel whose enable bit is 6 instead of 7 (Right Channel).
This patches just simply corrects the bit offset.
Signed-off-by: Peter Chan B18700@freescale.com Signed-off-by: Nicolin Chen nicoleotsuka@gmail.com ---
@Peter I cced you just to let you know that I'm merging your fix to upstream. And because you patch can't be applied to the upstream tree directly, I used my own commit with your signed-off. Thank you for the fix.
sound/soc/codecs/wm8962.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/sound/soc/codecs/wm8962.c b/sound/soc/codecs/wm8962.c index 1098ae3..105deec 100644 --- a/sound/soc/codecs/wm8962.c +++ b/sound/soc/codecs/wm8962.c @@ -2185,7 +2185,7 @@ SND_SOC_DAPM_MIXER("Speaker Mixer", WM8962_MIXER_ENABLES, 1, 0, spkmixl, ARRAY_SIZE(spkmixl)), SND_SOC_DAPM_MUX_E("Speaker PGA", WM8962_PWR_MGMT_2, 4, 0, &spkoutl_mux, out_pga_event, SND_SOC_DAPM_POST_PMU), -SND_SOC_DAPM_PGA("Speaker Output", WM8962_CLASS_D_CONTROL_1, 7, 0, NULL, 0), +SND_SOC_DAPM_PGA("Speaker Output", WM8962_CLASS_D_CONTROL_1, 6, 0, NULL, 0), SND_SOC_DAPM_OUTPUT("SPKOUT"), };
On Thu, Aug 07, 2014 at 07:55:49PM +0800, Nicolin Chen wrote:
As WM8962 datasheet describes for SPK_MONO bit of R51: When SPK_MONO is set to '1', both speakers output the signal from the left channel.
So for mono speaker widget, we shall enable Left Channel whose enable bit is 6 instead of 7 (Right Channel).
This patches just simply corrects the bit offset.
spkmixl, ARRAY_SIZE(spkmixl)),
SND_SOC_DAPM_MUX_E("Speaker PGA", WM8962_PWR_MGMT_2, 4, 0, &spkoutl_mux, out_pga_event, SND_SOC_DAPM_POST_PMU), -SND_SOC_DAPM_PGA("Speaker Output", WM8962_CLASS_D_CONTROL_1, 7, 0, NULL, 0), +SND_SOC_DAPM_PGA("Speaker Output", WM8962_CLASS_D_CONTROL_1, 6, 0, NULL, 0), SND_SOC_DAPM_OUTPUT("SPKOUT"), };
Someone who's name I'd need to look up submitted an identical fix off list recently - I checked the datasheet and it seems that in mono mode the speaker output actually wants both left and right channels active so there is a bug here but this isn't the fix.
On Thu, Aug 07, 2014 at 05:58:36PM +0100, Mark Brown wrote:
On Thu, Aug 07, 2014 at 07:55:49PM +0800, Nicolin Chen wrote:
As WM8962 datasheet describes for SPK_MONO bit of R51: When SPK_MONO is set to '1', both speakers output the signal from the left channel.
So for mono speaker widget, we shall enable Left Channel whose enable bit is 6 instead of 7 (Right Channel).
This patches just simply corrects the bit offset.
spkmixl, ARRAY_SIZE(spkmixl)),
SND_SOC_DAPM_MUX_E("Speaker PGA", WM8962_PWR_MGMT_2, 4, 0, &spkoutl_mux, out_pga_event, SND_SOC_DAPM_POST_PMU), -SND_SOC_DAPM_PGA("Speaker Output", WM8962_CLASS_D_CONTROL_1, 7, 0, NULL, 0), +SND_SOC_DAPM_PGA("Speaker Output", WM8962_CLASS_D_CONTROL_1, 6, 0, NULL, 0), SND_SOC_DAPM_OUTPUT("SPKOUT"), };
Someone who's name I'd need to look up submitted an identical fix off list recently - I checked the datasheet and it seems that in mono mode the speaker output actually wants both left and right channels active so there is a bug here but this isn't the fix.
I rechecked the datasheet and found that the hardware needs to tie both outputs and enable both bits. So the patch should be invalid.
But our customer reported that they did try to set both SPKOUTR_ENA and SPKOUTL_ENA bits in mono mode but the sound is lousy. If setting SPKOUTR_ENA alone, the speaker has no sound. Only setting SPKOUTL_ENA bit get the correct speaker output in mono mode.
And I just confirmed with our engineer who supports the customer that they are using the correct hardware design as the datasheet suggests. So I'm wondering if there's any other part we're missing.
Thank you Nicolin
participants (3)
-
Mark Brown
-
Nicolin Chen
-
Nicolin Chen