snd_soc_component_set_jack(component, NULL, NULL);
 }
 
+static struct snd_soc_jack_pin sc7180_jack_pins[] = {
+       {
+               .pin = "Headphone Jack",
+               .mask = SND_JACK_HEADPHONE,
+       },
+       {
+               .pin = "Headset Mic",
+               .mask = SND_JACK_MICROPHONE,
+       },
+};
+
 static int sc7180_headset_init(struct snd_soc_pcm_runtime *rtd)
 {
        struct snd_soc_card *card = rtd->card;
        struct snd_jack *jack;
        int rval;
 
-       rval = snd_soc_card_jack_new(
-                       card, "Headset Jack",
-                       SND_JACK_HEADSET |
-                       SND_JACK_HEADPHONE |
-                       SND_JACK_BTN_0 | SND_JACK_BTN_1 |
-                       SND_JACK_BTN_2 | SND_JACK_BTN_3,
-                       &pdata->hs_jack);
+       rval = snd_soc_card_jack_new_pins(card, "Headset Jack",
+                                         SND_JACK_HEADSET |
+                                         SND_JACK_HEADPHONE |
+                                         SND_JACK_BTN_0 | SND_JACK_BTN_1 |
+                                         SND_JACK_BTN_2 | SND_JACK_BTN_3,
+                                         &pdata->hs_jack,
+                                         sc7180_jack_pins,
+                                         ARRAY_SIZE(sc7180_jack_pins));
 
        if (rval < 0) {
                dev_err(card->dev, "Unable to add Headset Jack\n");
        SND_SOC_DAPM_MIC("Headset Mic", NULL),
 };
 
+static const struct snd_kcontrol_new sc7180_snd_controls[] = {
+       SOC_DAPM_PIN_SWITCH("Headphone Jack"),
+       SOC_DAPM_PIN_SWITCH("Headset Mic"),
+};
+
 static const struct snd_soc_dapm_widget sc7180_adau7002_snd_widgets[] = {
        SND_SOC_DAPM_MIC("DMIC", NULL),
 };
        SND_SOC_DAPM_MUX("Dmic Mux", SND_SOC_NOPM, 0, 0, &sc7180_dmic_mux_control),
 };
 
+static const struct snd_kcontrol_new sc7180_snd_dual_mic_controls[] = {
+       SOC_DAPM_PIN_SWITCH("Headphone Jack"),
+       SOC_DAPM_PIN_SWITCH("Headset Mic"),
+};
+
 static const struct snd_soc_dapm_route sc7180_snd_dual_mic_audio_route[] = {
        {"Dmic Mux", "Front Mic", "DMIC"},
        {"Dmic Mux", "Rear Mic", "DMIC"},
        card->dev = dev;
        card->dapm_widgets = sc7180_snd_widgets;
        card->num_dapm_widgets = ARRAY_SIZE(sc7180_snd_widgets);
+       card->controls = sc7180_snd_controls;
+       card->num_controls = ARRAY_SIZE(sc7180_snd_controls);
 
        if (of_property_read_bool(dev->of_node, "dmic-gpios")) {
                card->dapm_widgets = sc7180_snd_dual_mic_widgets,
                card->num_dapm_widgets = ARRAY_SIZE(sc7180_snd_dual_mic_widgets),
+               card->controls = sc7180_snd_dual_mic_controls,
+               card->num_controls = ARRAY_SIZE(sc7180_snd_dual_mic_controls),
                card->dapm_routes = sc7180_snd_dual_mic_audio_route,
                card->num_dapm_routes = ARRAY_SIZE(sc7180_snd_dual_mic_audio_route),
                data->dmic_sel = devm_gpiod_get(&pdev->dev, "dmic", GPIOD_OUT_LOW);