[alsa-devel] [PATCH] hda - remove unnecessary msleep on power state transitions
Takashi Iwai
tiwai at suse.de
Wed Feb 24 09:17:15 CET 2010
At Wed, 24 Feb 2010 09:38:49 +0800,
Wu Fengguang wrote:
>
> From: "Zhang, Rui" <rui.zhang at intel.com>
>
> This will save ~15ms boot time.
>
> The first 10ms sleep was introduced in commit d2595d86e5 for (buggy)
> Cxt codecs, so better to limit the sleep to the problem hardware.
>
> For the second 10ms sleep, the HDA spec says:
>
> Power State[1:0]:
> 00: Node Power state (D0) is fully on.
> 01: Node Power state (D1) allows for (does not require) the lowest possible power consuming state from which it
> can return to the "fully on" state (D0) within 10 ms, excepting analog pass through circuits (e.g., CD analog
> playback) which must remain fully on.
> 10: Node Power state (D2) allows for (does not require) the lowest possible power consuming state from which it
> can return to the "fully on" state (D0) within 10 ms. For modems, this is the "wake on ring" power state.
> 11: Node Power state (D3) allows for (does not require) lowest possible power consuming state under software
> control. Note that any low power state set by software must retain sufficient operational capability to properly
> respond to subsequent software Power State command.
>
> So 10ms is actually the max wait time. It should be safe to
> remove/reduce it and rely on the loop of 1ms-sleeps.
>
> CC: Marc Boucher <marc at linuxant.com>
> CC: Arjan van de Ven <arjan at linux.intel.com>
> Signed-off-by: Zhang Rui <rui.zhang at intel.com>
> Signed-off-by: Wu Fengguang <fengguang.wu at intel.com>
This delay might be needed for codecs of other vendors, but let's see...
If more codecs need this, we may put a flag into hda_codec struct.
Anyway, I applied the patch with a minor compile warning fix now.
thanks,
Takashi
> ---
> sound/pci/hda/hda_codec.c | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
> --- sound-2.6.orig/sound/pci/hda/hda_codec.c 2010-01-13 09:41:49.000000000 +0800
> +++ sound-2.6/sound/pci/hda/hda_codec.c 2010-02-24 09:34:14.000000000 +0800
> @@ -2767,7 +2767,8 @@ static void hda_set_power_state(struct h
> snd_hda_codec_read(codec, fg, 0, AC_VERB_SET_POWER_STATE,
> power_state);
> /* partial workaround for "azx_get_response timeout" */
> - if (power_state == AC_PWRST_D0)
> + if (power_state == AC_PWRST_D0 &&
> + codec->vendor_id & 0xffff0000 == 0x14f10000)
> msleep(10);
>
> nid = codec->start_nid;
> @@ -2801,7 +2802,6 @@ static void hda_set_power_state(struct h
> if (power_state == AC_PWRST_D0) {
> unsigned long end_time;
> int state;
> - msleep(10);
> /* wait until the codec reachs to D0 */
> end_time = jiffies + msecs_to_jiffies(500);
> do {
>
More information about the Alsa-devel
mailing list