ALSA: hda - Fix mutex deadlock at HDMI/DP hotplug
[cascardo/linux.git] / sound / pci / hda / patch_hdmi.c
index cde9746..49ee4e5 100644 (file)
@@ -1405,7 +1405,6 @@ static bool hdmi_present_sense_via_verbs(struct hdmi_spec_per_pin *per_pin,
        bool ret;
        bool do_repoll = false;
 
-       snd_hda_power_up_pm(codec);
        present = snd_hda_pin_sense(codec, pin_nid);
 
        mutex_lock(&per_pin->lock);
@@ -1444,7 +1443,6 @@ static bool hdmi_present_sense_via_verbs(struct hdmi_spec_per_pin *per_pin,
                jack->block_report = !ret;
 
        mutex_unlock(&per_pin->lock);
-       snd_hda_power_down_pm(codec);
        return ret;
 }
 
@@ -1522,6 +1520,10 @@ static bool hdmi_present_sense(struct hdmi_spec_per_pin *per_pin, int repoll)
        struct hdmi_spec *spec = codec->spec;
        int ret;
 
+       /* no temporary power up/down needed for component notifier */
+       if (!codec_has_acomp(codec))
+               snd_hda_power_up_pm(codec);
+
        mutex_lock(&spec->pcm_lock);
        if (codec_has_acomp(codec)) {
                sync_eld_via_acomp(codec, per_pin);
@@ -1531,6 +1533,9 @@ static bool hdmi_present_sense(struct hdmi_spec_per_pin *per_pin, int repoll)
        }
        mutex_unlock(&spec->pcm_lock);
 
+       if (!codec_has_acomp(codec))
+               snd_hda_power_down_pm(codec);
+
        return ret;
 }