{"AFMR", NULL, "Line In"},
 };
 
+static inline void twl6040_disconnect_pin(struct snd_soc_dapm_context *dapm,
+                                         int connected, char *pin)
+{
+       if (!connected)
+               snd_soc_dapm_disable_pin(dapm, pin);
+}
+
 static int omap_abe_twl6040_init(struct snd_soc_pcm_runtime *rtd)
 {
        struct snd_soc_codec *codec = rtd->codec;
-       int ret, hs_trim;
+       struct snd_soc_card *card = codec->card;
+       struct snd_soc_dapm_context *dapm = &codec->dapm;
+       struct omap_abe_twl6040_data *pdata = dev_get_platdata(card->dev);
+       int hs_trim;
+       int ret = 0;
+
+       /* Disable not connected paths if not used */
+       twl6040_disconnect_pin(dapm, pdata->has_hs, "Headset Stereophone");
+       twl6040_disconnect_pin(dapm, pdata->has_hf, "Ext Spk");
+       twl6040_disconnect_pin(dapm, pdata->has_ep, "Earphone Spk");
+       twl6040_disconnect_pin(dapm, pdata->has_aux, "Line Out");
+       twl6040_disconnect_pin(dapm, pdata->has_vibra, "Vinrator");
+       twl6040_disconnect_pin(dapm, pdata->has_hsmic, "Headset Mic");
+       twl6040_disconnect_pin(dapm, pdata->has_mainmic, "Main Handset Mic");
+       twl6040_disconnect_pin(dapm, pdata->has_submic, "Sub Handset Mic");
+       twl6040_disconnect_pin(dapm, pdata->has_afm, "Line In");
 
        /*
         * Configure McPDM offset cancellation based on the HSOTRIM value from
        omap_mcpdm_configure_dn_offsets(rtd, TWL6040_HSF_TRIM_LEFT(hs_trim),
                                        TWL6040_HSF_TRIM_RIGHT(hs_trim));
 
-       /* Headset jack detection */
-       ret = snd_soc_jack_new(codec, "Headset Jack",
-                               SND_JACK_HEADSET, &hs_jack);
-       if (ret)
-               return ret;
-
-       ret = snd_soc_jack_add_pins(&hs_jack, ARRAY_SIZE(hs_jack_pins),
-                               hs_jack_pins);
+       /* Headset jack detection only if it is supported */
+       if (pdata->jack_detection) {
+               ret = snd_soc_jack_new(codec, "Headset Jack",
+                                       SND_JACK_HEADSET, &hs_jack);
+               if (ret)
+                       return ret;
 
-       if (machine_is_omap_4430sdp())
+               ret = snd_soc_jack_add_pins(&hs_jack, ARRAY_SIZE(hs_jack_pins),
+                                       hs_jack_pins);
                twl6040_hs_jack_detect(codec, &hs_jack, SND_JACK_HEADSET);
-       else
-               snd_soc_jack_report(&hs_jack, SND_JACK_HEADSET, SND_JACK_HEADSET);
+       }
 
        return ret;
 }