ASoC: dapm: Implement mixer control sharing
authorStephen Warren <swarren@nvidia.com>
Fri, 29 Mar 2013 21:40:10 +0000 (15:40 -0600)
committerMark Brown <broonie@opensource.wolfsonmicro.com>
Sun, 31 Mar 2013 12:28:40 +0000 (13:28 +0100)
commit85762e71f17b59a76e6333d1a796737d080b7517
treeafaff74bc24a576a0a9139c3828d867db1ec7d27
parent8bb9660418e05bb1845ac1a2428444d78e322cc7
ASoC: dapm: Implement mixer control sharing

This is the equivalent of commit af46800 "ASoC: Implement mux control
sharing", but applied to mixers instead of muxes.

This allows a single control to affect multiple mixer widgets at once,
which is useful when there is a single set of register bits that affects
multiple mixers in HW, for example both the L and R mixers of a stereo
path.

Without this, you either:

1) End up with multiple controls that affect the same register bits, but
whose DAPM state falls out of sync with HW, since the DAPM state is only
updated for the specific control that is modified, and not for other
paths that are affected by the register bit(s).

2) False paths through DAPM, since you end up merging unconnected stereo
paths together into a single widget which hosts the single control, and
then branching back out again, thus conjoining the enable states of the
two input paths.

Now that the kcontrol creation logic is split out into a separate
function, dapm_create_or_share_mixmux_kcontrol(), also use that to
replace most of the body of dapm_new_mux(). This should produce no
functional change, but simply eliminates some mostly duplicated code.

Signed-off-by: Stephen Warren <swarren@nvidia.com>
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
sound/soc/soc-dapm.c