OSDN Git Service

ALSA: hda/hdmi: Move runtime PM resume into hdmi_present_sense_via_verbs()
authorTakashi Iwai <tiwai@suse.de>
Thu, 6 Feb 2020 16:28:03 +0000 (17:28 +0100)
committerTakashi Iwai <tiwai@suse.de>
Mon, 10 Feb 2020 07:23:58 +0000 (08:23 +0100)
For improving the readability, move the runtime PM handling code from
hdmi_present_sense() to hdmi_present_sense_via_verbs().  Now
hdmi_present_sense() became symmetric for both audio-component and
legacy cases.

Just a minor code refactoring.

Reviewed-by: Kai Vehmanen <kai.vehmanen@linux.intel.com>
Reviewed-by: Nikhil Mahale <nmahale@nvidia.com>
Link: https://lore.kernel.org/r/20200206162804.4734-4-tiwai@suse.de
Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/pci/hda/patch_hdmi.c

index 98a8c4f..4371772 100644 (file)
@@ -1587,6 +1587,11 @@ static void hdmi_present_sense_via_verbs(struct hdmi_spec_per_pin *per_pin,
         */
        int present;
        bool do_repoll = false;
+       int ret;
+
+       ret = snd_hda_power_up_pm(codec);
+       if (ret < 0 && pm_runtime_suspended(hda_codec_dev(codec)))
+               goto out;
 
        present = snd_hda_jack_pin_sense(codec, pin_nid, dev_id);
 
@@ -1620,6 +1625,8 @@ static void hdmi_present_sense_via_verbs(struct hdmi_spec_per_pin *per_pin,
                do_update_eld(codec, per_pin, eld);
 
        mutex_unlock(&per_pin->lock);
+ out:
+       snd_hda_power_down_pm(codec);
 }
 
 /* update ELD and jack state via audio component */
@@ -1657,20 +1664,11 @@ static void sync_eld_via_acomp(struct hda_codec *codec,
 static void hdmi_present_sense(struct hdmi_spec_per_pin *per_pin, int repoll)
 {
        struct hda_codec *codec = per_pin->codec;
-       int ret;
 
-       /* no temporary power up/down needed for component notifier */
-       if (!codec_has_acomp(codec)) {
-               ret = snd_hda_power_up_pm(codec);
-               if (ret < 0 && pm_runtime_suspended(hda_codec_dev(codec))) {
-                       snd_hda_power_down_pm(codec);
-                       return;
-               }
+       if (!codec_has_acomp(codec))
                hdmi_present_sense_via_verbs(per_pin, repoll);
-               snd_hda_power_down_pm(codec);
-       } else {
+       else
                sync_eld_via_acomp(codec, per_pin);
-       }
 }
 
 static void hdmi_repoll_eld(struct work_struct *work)