At Wed, 24 Feb 2010 09:38:49 +0800, Wu Fengguang wrote: > > From: "Zhang, Rui" <rui.zhang@xxxxxxxxx> > > 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@xxxxxxxxxxxx> > CC: Arjan van de Ven <arjan@xxxxxxxxxxxxxxx> > Signed-off-by: Zhang Rui <rui.zhang@xxxxxxxxx> > Signed-off-by: Wu Fengguang <fengguang.wu@xxxxxxxxx> 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 { > _______________________________________________ Alsa-devel mailing list Alsa-devel@xxxxxxxxxxxxxxxx http://mailman.alsa-project.org/mailman/listinfo/alsa-devel