ASoC: amd: acp3x-rt5682-max9836: Map missing jack kcontrols
authorAlper Nebi Yasak <alpernebiyasak@gmail.com>
Wed, 2 Aug 2023 17:57:14 +0000 (20:57 +0300)
committerMark Brown <broonie@kernel.org>
Mon, 7 Aug 2023 13:32:41 +0000 (14:32 +0100)
This driver does not properly map jack pins to kcontrols that PulseAudio
and PipeWire need to handle jack detection events. The RT5682, RT1015
and RT1015p codecs used here can detect Headphone and Headset Mic
connections. Expose the former two to userspace as kcontrols.

Signed-off-by: Alper Nebi Yasak <alpernebiyasak@gmail.com>
Link: https://lore.kernel.org/r/20230802175737.263412-5-alpernebiyasak@gmail.com
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/amd/acp3x-rt5682-max9836.c

index 0543dda75b99a7a26be0c8fc8d6aa32fc3fcfe33..3bf7e1e83c364a0b5ed83d9ff91726b309a35641 100644 (file)
 #define DUAL_CHANNEL           2
 
 static struct snd_soc_jack pco_jack;
+static struct snd_soc_jack_pin pco_jack_pins[] = {
+       {
+               .pin = "Headphone Jack",
+               .mask = SND_JACK_HEADPHONE,
+       },
+       {
+               .pin = "Headset Mic",
+               .mask = SND_JACK_MICROPHONE,
+       },
+};
+
 static struct clk *rt5682_dai_wclk;
 static struct clk *rt5682_dai_bclk;
 static struct gpio_desc *dmic_sel;
@@ -86,11 +97,13 @@ static int acp3x_5682_init(struct snd_soc_pcm_runtime *rtd)
        rt5682_dai_wclk = clk_get(component->dev, "rt5682-dai-wclk");
        rt5682_dai_bclk = clk_get(component->dev, "rt5682-dai-bclk");
 
-       ret = snd_soc_card_jack_new(card, "Headset Jack",
-                               SND_JACK_HEADSET | SND_JACK_LINEOUT |
-                               SND_JACK_BTN_0 | SND_JACK_BTN_1 |
-                               SND_JACK_BTN_2 | SND_JACK_BTN_3,
-                               &pco_jack);
+       ret = snd_soc_card_jack_new_pins(card, "Headset Jack",
+                                        SND_JACK_HEADSET | SND_JACK_LINEOUT |
+                                        SND_JACK_BTN_0 | SND_JACK_BTN_1 |
+                                        SND_JACK_BTN_2 | SND_JACK_BTN_3,
+                                        &pco_jack,
+                                        pco_jack_pins,
+                                        ARRAY_SIZE(pco_jack_pins));
        if (ret) {
                dev_err(card->dev, "HP jack creation failed %d\n", ret);
                return ret;