[alsa-devel] [PATCH 2/2] ASoC: tlv320aic3x: Fix Left/Rigth PGA mixer widgets/kcontrols
lars at metafoo.de
Tue May 27 14:24:34 CEST 2014
>>>> This driver uses a custom put handler and the generic get handler.
>>>> dapm_kcontrol_get_value() is used in the generic get handler, but only if reg
>>>> equal to SND_SOC_NOPM. Which is not the case for this driver.
>>> The relevant code is this:
>>> if (dapm_kcontrol_is_powered(kcontrol) && reg != SND_SOC_NOPM)
>>> val = (snd_soc_read(codec, reg) >> shift) & mask;
>>> val = dapm_kcontrol_get_value(kcontrol);
>>> and when the widget is not powered the code will try to get the value from the
>>> dapm_kcontrol_data, which is not even touched by the custom code in the driver.
>> dapm_kcontrol_is_powered() always returns true if the control is not a
>> auto-muted control. And there are no auto-muted controls in the tlv320aix3c
> dapm_kcontrol_is_powered() returns the data->widget->power, which is not the
> automute state. Widgets do turn off when they are not in use, like in my system:
> # cat tlv320aic3x-codec.0-001b/dapm/Left\ PGA\ Mixer
> Left PGA Mixer: Off in 0 out 0
> out "static" "Left ADC"
> So the widget's power is off.
The widget that data->widget points to is not the mixer widget. It is the
widget that is created for auto-mute handling if the control is auto-muted.
It will be NULL in your case, which means dapm_kcontrol_is_powered() return
More information about the Alsa-devel