• Stephen Warren's avatar
    ASoC: Tegra: wm8903 machine driver: Allow re-insertion of module · 29591ed4
    Stephen Warren authored
    Two issues were preventing module snd-soc-tegra-wm8903.ko from being
    removed and re-inserted:
    
    a) The speaker-enable GPIO is hosted by the WM8903 chip. This GPIO must
       be freed before snd_soc_unregister_card() is called, because that
       triggers wm8903.c:wm8903_remove(), which calls gpiochip_remove(), which
       then fails if any of the GPIOs are in use. To solve this, free all GPIOs
       first, so the code doesn't care where they come from.
    
    b) We need to call snd_soc_jack_free_gpios() to match the call to
       snd_soc_jack_add_gpios() during initialization. Without this, the
       call to snd_soc_jack_add_gpios() fails during any subsequent modprobe
       and initialization, since the GPIO and IRQ are already registered. In
       turn, this causes the headphone state not to be monitored, so the
       headphone is assumed not to be plugged in, and the audio path to it is
       never enabled.
    Signed-off-by: default avatarStephen Warren <swarren@nvidia.com>
    Cc: stable@kernel.org
    Signed-off-by: default avatarMark Brown <broonie@opensource.wolfsonmicro.com>
    29591ed4
tegra_wm8903.c 12.8 KB