[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