On Thu, 2011-04-28 at 17:37 -0600, Stephen Warren wrote:
Control sharing is enabled when two widgets include pointers to the same kcontrol_new in their definition. Specifically:
static const struct snd_kcontrol_new adcinput_mux = SOC_DAPM_ENUM("ADC Input", adcinput_enum);
static const struct snd_soc_dapm_widget wm8903_dapm_widgets[] = { SND_SOC_DAPM_MUX("Left ADC Input", SND_SOC_NOPM, 0, 0, &adcinput_mux), SND_SOC_DAPM_MUX("Right ADC Input", SND_SOC_NOPM, 0, 0, &adcinput_mux), };
This is useful when a single register bit or field affects multiple muxes at once. The common case is to have separate control bits or fields for each mux (channel). An alternative way of looking at this is that the mux is a stereo (or even n-channel) mux, rather than independant mono muxes.
I have tested this on NVIDIA Tegra Seaboard, specifically with the WM8903 "ADC Input" control, and a locally-enabled digital mic setup.
I have not compiled nor tested any other platforms.
This patchset does not implement control sharing for dapm_new_mixer() yet. I can do so after discussion/review of this patch series, although note that I don't have anything to test the actual sharing on for such controls.
Stephen Warren (4): ASoC: s/w->kcontrols/w->kcontrol_news/g ASoC: Add w->kcontrols, and populate it ASoC: Store a list of widgets in a DAPM mux/mixer kcontrol ASoC: Implement mux control sharing
include/sound/soc-dapm.h | 75 +++++---- sound/soc/codecs/88pm860x-codec.c | 2 +- sound/soc/soc-dapm.c | 315 ++++++++++++++++++++++++++----------- 3 files changed, 266 insertions(+), 126 deletions(-)
All
Acked-by: Liam Girdwood lrg@ti.com