• Stephen Warren's avatar
    ASoC: Fix dapm_is_shared_kcontrol so everything isn't shared · 1007da06
    Stephen Warren authored
    Commit af46800b ("ASoC: Implement mux control sharing") introduced
    function dapm_is_shared_kcontrol.
    
    When this function returns true, the naming of DAPM controls is derived
    from the kcontrol_new. Otherwise, the name comes from the widget (and
    possibly a widget's naming prefix).
    
    A bug in the implementation of dapm_is_shared_kcontrol made it return 1
    in all cases. Hence, that commit caused a change in control naming for
    all controls instead of just shared controls.
    
    Specifically, a control is always considered shared because it is always
    compared against itself. Solve this by never comparing against the widget
    containing the control being created.
    
    Equally, controls should never be shared between DAPM contexts; when the
    same codec is instantiated multiple times, the same kcontrol_new will be
    used. However, the control should no be shared between the multiple
    instances.
    
    I tested that with the Tegra WM8903 driver:
    * Shared is now mostly 0 as expected, and sometimes 1.
    * The expected controls are still generated after this change.
    
    However, I don't have any systems that have a widget/control naming
    prefix, so I can't test that aspect.
    
    Thanks for Jarkko Nikula for pointing out how to fix this.
    Reported-by: default avatarLiam Girdwood <lrg@ti.com>
    Tested-by: default avatarJarkko Nikula <jhnikula@gmail.com>
    Signed-off-by: default avatarStephen Warren <swarren@nvidia.com>
    Acked-by: default avatarLiam Girdwood <lrg@ti.com>
    Signed-off-by: default avatarMark Brown <broonie@opensource.wolfsonmicro.com>
    1007da06
soc-dapm.c 64.9 KB