ALSA: hda - allow a codec to define its own depop delay time
authorMengdong Lin <mengdong.lin@intel.com>
Fri, 29 Nov 2013 06:48:45 +0000 (01:48 -0500)
committerTakashi Iwai <tiwai@suse.de>
Fri, 29 Nov 2013 13:47:46 +0000 (14:47 +0100)
This patch adds 'depop_delay' to struct hda_codec, to indicate a depop delay
time in ms when power-down, in function set_power_state() to D3.

Default value is -1, for a default delay time.
Machine fixup can set a suitable value according to the codec chip and HW audio
design.

Signed-off-by: Mengdong Lin <mengdong.lin@intel.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/pci/hda/hda_codec.c
sound/pci/hda/hda_codec.h

index 472e5d0..5b76220 100644 (file)
@@ -1471,6 +1471,7 @@ int snd_hda_codec_new(struct hda_bus *bus,
        INIT_LIST_HEAD(&codec->conn_list);
 
        INIT_DELAYED_WORK(&codec->jackpoll_work, hda_jackpoll_work);
+       codec->depop_delay = -1;
 
 #ifdef CONFIG_PM
        spin_lock_init(&codec->power_lock);
@@ -3975,8 +3976,10 @@ static unsigned int hda_set_power_state(struct hda_codec *codec,
 
        /* this delay seems necessary to avoid click noise at power-down */
        if (power_state == AC_PWRST_D3) {
-               /* transition time less than 10ms for power down */
-               msleep(codec->epss ? 10 : 100);
+               if (codec->depop_delay < 0)
+                       msleep(codec->epss ? 10 : 100);
+               else if (codec->depop_delay > 0)
+                       msleep(codec->depop_delay);
                flags = HDA_RW_NO_RESPONSE_FALLBACK;
        }
 
index 01b248d..3ab4834 100644 (file)
@@ -944,6 +944,8 @@ struct hda_codec {
        struct snd_array jacks;
 #endif
 
+       int depop_delay; /* depop delay in ms, -1 for default delay time */
+
        /* fix-up list */
        int fixup_id;
        const struct hda_fixup *fixup_list;