ALSA: hda: Make use of core codec functions to sync power state
authorAbhijeet Kumar <abhijeet.kumar@intel.com>
Tue, 23 Jan 2018 17:30:52 +0000 (23:00 +0530)
committerTakashi Iwai <tiwai@suse.de>
Mon, 12 Feb 2018 12:59:48 +0000 (13:59 +0100)
Since sync_power_state is moved to core it's better to use the helper
function to ensure the actual power state reaches target instead of
using the local helper functions already exsisting in hda code.

Signed-off-by: Abhijeet Kumar <abhijeet.kumar@intel.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/pci/hda/hda_codec.c
sound/pci/hda/hda_local.h

index e018ecbf78a8f88e801990f1603218faaebba5f4..5bc3a7468e1716bb27113d0b7b1563625e14e134 100644 (file)
@@ -2702,32 +2702,6 @@ void snd_hda_codec_set_power_to_all(struct hda_codec *codec, hda_nid_t fg,
 }
 EXPORT_SYMBOL_GPL(snd_hda_codec_set_power_to_all);
 
-/*
- * wait until the state is reached, returns the current state
- */
-static unsigned int hda_sync_power_state(struct hda_codec *codec,
-                                        hda_nid_t fg,
-                                        unsigned int power_state)
-{
-       unsigned long end_time = jiffies + msecs_to_jiffies(500);
-       unsigned int state, actual_state;
-
-       for (;;) {
-               state = snd_hda_codec_read(codec, fg, 0,
-                                          AC_VERB_GET_POWER_STATE, 0);
-               if (state & AC_PWRST_ERROR)
-                       break;
-               actual_state = (state >> 4) & 0x0f;
-               if (actual_state == power_state)
-                       break;
-               if (time_after_eq(jiffies, end_time))
-                       break;
-               /* wait until the codec reachs to the target state */
-               msleep(1);
-       }
-       return state;
-}
-
 /**
  * snd_hda_codec_eapd_power_filter - A power filter callback for EAPD
  * @codec: the HDA codec
@@ -2790,7 +2764,7 @@ static unsigned int hda_set_power_state(struct hda_codec *codec,
                                                   state);
                        snd_hda_codec_set_power_to_all(codec, fg, power_state);
                }
-               state = hda_sync_power_state(codec, fg, power_state);
+               state = snd_hda_sync_power_state(codec, fg, power_state);
                if (!(state & AC_PWRST_ERROR))
                        break;
        }
index 5b5c324c99b9d9261330f3ad8e160e9036559e21..321e78baa63ca830332f7be3221cf4b999c2a4fe 100644 (file)
@@ -622,7 +622,11 @@ snd_hda_check_power_state(struct hda_codec *codec, hda_nid_t nid,
 {
        return snd_hdac_check_power_state(&codec->core, nid, target_state);
 }
-
+static inline bool snd_hda_sync_power_state(struct hda_codec *codec,
+                          hda_nid_t nid, unsigned int target_state)
+{
+       return snd_hdac_sync_power_state(&codec->core, nid, target_state);
+}
 unsigned int snd_hda_codec_eapd_power_filter(struct hda_codec *codec,
                                             hda_nid_t nid,
                                             unsigned int power_state);