Merge series "Support headset on Tegra boards that use WM8903" from Dmitry Osipenko...
authorMark Brown <broonie@kernel.org>
Tue, 14 Apr 2020 14:45:36 +0000 (15:45 +0100)
committerMark Brown <broonie@kernel.org>
Tue, 14 Apr 2020 14:45:36 +0000 (15:45 +0100)
Hello,

Some devices have a 4-pin jack instead of a 3-pin and currently the
WM8903 configuration is hardcoded to the case of 3-pin jack in the
Tegra's ASoC driver. A new device-tree property is required in order
to convey that hardware has a 4-pin jack, and thus, microphone's
detection needs to be done in a different way.

In particular this is needed for Acer A500 tablet device that has
a 4-pin headset jack, otherwise userspace sees headset instead of
headphones and internal microphone isn't enabled by ALSA UCM rule
when it should be. Please review and apply, thanks in advance.

Dmitry Osipenko (2):
  dt-bindings: sound: tegra-wm8903: Document new nvidia,headset property
  ASoC: tegra: tegra_wm8903: Support nvidia,headset property

 .../devicetree/bindings/sound/nvidia,tegra-audio-wm8903.txt | 1 +
 sound/soc/tegra/tegra_wm8903.c                              | 6 +++++-
 2 files changed, 6 insertions(+), 1 deletion(-)

--
2.25.1

Documentation/devicetree/bindings/sound/nvidia,tegra-audio-wm8903.txt
sound/soc/tegra/tegra_wm8903.c

index a8f2b0c..bbd581a 100644 (file)
@@ -29,6 +29,7 @@ Optional properties:
 - nvidia,hp-det-gpios : The GPIO that detect headphones are plugged in
 - nvidia,int-mic-en-gpios : The GPIO that enables the internal microphone
 - nvidia,ext-mic-en-gpios : The GPIO that enables the external microphone
+- nvidia,headset : The Mic Jack represents state of the headset microphone pin
 
 Example:
 
index 9b56515..3aca354 100644 (file)
@@ -177,6 +177,7 @@ static int tegra_wm8903_init(struct snd_soc_pcm_runtime *rtd)
        struct snd_soc_component *component = codec_dai->component;
        struct snd_soc_card *card = rtd->card;
        struct tegra_wm8903 *machine = snd_soc_card_get_drvdata(card);
+       int shrt = 0;
 
        if (gpio_is_valid(machine->gpio_hp_det)) {
                tegra_wm8903_hp_jack_gpio.gpio = machine->gpio_hp_det;
@@ -189,12 +190,15 @@ static int tegra_wm8903_init(struct snd_soc_pcm_runtime *rtd)
                                        &tegra_wm8903_hp_jack_gpio);
        }
 
+       if (of_property_read_bool(card->dev->of_node, "nvidia,headset"))
+               shrt = SND_JACK_MICROPHONE;
+
        snd_soc_card_jack_new(rtd->card, "Mic Jack", SND_JACK_MICROPHONE,
                              &tegra_wm8903_mic_jack,
                              tegra_wm8903_mic_jack_pins,
                              ARRAY_SIZE(tegra_wm8903_mic_jack_pins));
        wm8903_mic_detect(component, &tegra_wm8903_mic_jack, SND_JACK_MICROPHONE,
-                               0);
+                               shrt);
 
        snd_soc_dapm_force_enable_pin(&card->dapm, "MICBIAS");