}
 EXPORT_SYMBOL_GPL(hdac_hdmi_jack_init);
 
+static void hdac_hdmi_present_sense_all_pins(struct hdac_ext_device *edev,
+                       struct hdac_hdmi_priv *hdmi, bool detect_pin_caps)
+{
+       int i;
+       struct hdac_hdmi_pin *pin;
+
+       list_for_each_entry(pin, &hdmi->pin_list, head) {
+               if (detect_pin_caps) {
+
+                       if (hdac_hdmi_get_port_len(edev, pin->nid)  == 0)
+                               pin->mst_capable = false;
+                       else
+                               pin->mst_capable = true;
+               }
+
+               for (i = 0; i < pin->num_ports; i++) {
+                       if (!pin->mst_capable && i > 0)
+                               continue;
+
+                       hdac_hdmi_present_sense(pin, &pin->ports[i]);
+               }
+       }
+}
+
 static int hdmi_codec_probe(struct snd_soc_codec *codec)
 {
        struct hdac_ext_device *edev = snd_soc_codec_get_drvdata(codec);
        struct hdac_hdmi_priv *hdmi = edev->private_data;
        struct snd_soc_dapm_context *dapm =
                snd_soc_component_get_dapm(&codec->component);
-       struct hdac_hdmi_pin *pin;
        struct hdac_ext_link *hlink = NULL;
-       int ret, i;
+       int ret;
 
        edev->scodec = codec;
 
                return ret;
        }
 
-       list_for_each_entry(pin, &hdmi->pin_list, head)
-               for (i = 0; i < pin->num_ports; i++)
-                       hdac_hdmi_present_sense(pin, &pin->ports[i]);
-
+       hdac_hdmi_present_sense_all_pins(edev, hdmi, true);
        /* Imp: Store the card pointer in hda_codec */
        edev->card = dapm->card->snd_card;
 
 {
        struct hdac_ext_device *edev = to_hda_ext_device(dev);
        struct hdac_hdmi_priv *hdmi = edev->private_data;
-       struct hdac_hdmi_pin *pin;
        struct hdac_device *hdac = &edev->hdac;
-       int i;
 
        /* Power up afg */
        snd_hdac_codec_read(hdac, hdac->afg, 0, AC_VERB_SET_POWER_STATE,
        /*
         * As the ELD notify callback request is not entertained while the
         * device is in suspend state. Need to manually check detection of
-        * all pins here.
+        * all pins here. pin capablity change is not support, so use the
+        * already set pin caps.
         */
-       list_for_each_entry(pin, &hdmi->pin_list, head)
-               for (i = 0; i < pin->num_ports; i++)
-                       hdac_hdmi_present_sense(pin, &pin->ports[i]);
+       hdac_hdmi_present_sense_all_pins(edev, hdmi, false);
 
        pm_runtime_put_sync(&edev->hdac.dev);
 }