[alsa-devel] [PATCH] ASoC: dapm: Use SND_SOC_DAPM_INIT_REG_VAL in SND_SOC_DAPM_MUX
From: Stephen Warren swarren@nvidia.com
SND_SOC_DAPM_MUX() doesn't currently initialize the .mask field. This results in the mux never affecting HW, since no bits are ever set or cleared. Fix SND_SOC_DAPM_MUX() to use SND_SOC_DAPM_INIT_REG_VAL() to set up the reg, shift, on_val, and off_val fields like almost all other SND_SOC_xxx() macros. It looks like this was a "typo" in the fixed commit linked below.
This makes the speakers on the Toshiba AC100 (PAZ00) laptop work again.
Fixes: de9ba98b6d26 ("ASoC: dapm: Make widget power register settings more flexible") Cc: stable@vger.kernel.org # v3.12+ Cc: Lars-Peter Clausen lars@metafoo.de Signed-off-by: Stephen Warren swarren@nvidia.com --- include/sound/soc-dapm.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/include/sound/soc-dapm.h b/include/sound/soc-dapm.h index 2037c45adfe6..56ebdfca6273 100644 --- a/include/sound/soc-dapm.h +++ b/include/sound/soc-dapm.h @@ -104,7 +104,8 @@ struct device; SND_SOC_DAPM_INIT_REG_VAL(wreg, wshift, winvert), \ .kcontrol_news = wcontrols, .num_kcontrols = 1} #define SND_SOC_DAPM_MUX(wname, wreg, wshift, winvert, wcontrols) \ -{ .id = snd_soc_dapm_mux, .name = wname, .reg = wreg, \ +{ .id = snd_soc_dapm_mux, .name = wname, \ + SND_SOC_DAPM_INIT_REG_VAL(wreg, wshift, winvert), \ .kcontrol_news = wcontrols, .num_kcontrols = 1} #define SND_SOC_DAPM_VIRT_MUX(wname, wreg, wshift, winvert, wcontrols) \ { .id = snd_soc_dapm_virt_mux, .name = wname, \
On Fri, Nov 22, 2013 at 10:29:18AM -0700, Stephen Warren wrote:
From: Stephen Warren swarren@nvidia.com
SND_SOC_DAPM_MUX() doesn't currently initialize the .mask field. This results in the mux never affecting HW, since no bits are ever set or cleared. Fix SND_SOC_DAPM_MUX() to use SND_SOC_DAPM_INIT_REG_VAL() to set up the reg, shift, on_val, and off_val fields like almost all other SND_SOC_xxx() macros. It looks like this was a "typo" in the fixed commit linked below.
Hrm. Why has nobody else noticed this? I've been doing plenty of testing that involved changing muxes... The patch and reasoning makes sense but I can't immediately see why any of the testing I've been doing recently would've worked without it since it all relies on muxes being configured to make any noise.
On 11/22/2013 11:32 AM, Mark Brown wrote:
On Fri, Nov 22, 2013 at 10:29:18AM -0700, Stephen Warren wrote:
From: Stephen Warren swarren@nvidia.com
SND_SOC_DAPM_MUX() doesn't currently initialize the .mask field. This results in the mux never affecting HW, since no bits are ever set or cleared. Fix SND_SOC_DAPM_MUX() to use SND_SOC_DAPM_INIT_REG_VAL() to set up the reg, shift, on_val, and off_val fields like almost all other SND_SOC_xxx() macros. It looks like this was a "typo" in the fixed commit linked below.
Hrm. Why has nobody else noticed this? I've been doing plenty of testing that involved changing muxes... The patch and reasoning makes sense but I can't immediately see why any of the testing I've been doing recently would've worked without it since it all relies on muxes being configured to make any noise.
I think it's not the mux values/routing that matter, but the mux power gating.
Also, if HW were to power up with muxes powered, then never changing the power gate wouldn't have any effect (aside from increased power consumption). In my case, the mux isn't powered by default, so I saw an issue.
On Fri, Nov 22, 2013 at 11:35:09AM -0700, Stephen Warren wrote:
I think it's not the mux values/routing that matter, but the mux power gating.
Ah, that mask - yes, none of the devices I've been testing with have power control for their muxes.
On Fri, Nov 22, 2013 at 10:29:18AM -0700, Stephen Warren wrote:
From: Stephen Warren swarren@nvidia.com
SND_SOC_DAPM_MUX() doesn't currently initialize the .mask field. This results in the mux never affecting HW, since no bits are ever set or cleared. Fix SND_SOC_DAPM_MUX() to use SND_SOC_DAPM_INIT_REG_VAL() to
Applied, thanks.
participants (2)
-
Mark Brown
-
Stephen Warren