* [PATCH] hda - remove unnecessary msleep on power state transitions
@ 2010-02-24 1:38 Wu Fengguang
2010-02-24 8:17 ` Takashi Iwai
0 siblings, 1 reply; 3+ messages in thread
From: Wu Fengguang @ 2010-02-24 1:38 UTC (permalink / raw)
To: Takashi Iwai; +Cc: Arjan van de Ven, alsa-devel, Marc Boucher, Zhang Rui
From: "Zhang, Rui" <rui.zhang@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@linuxant.com>
CC: Arjan van de Ven <arjan@linux.intel.com>
Signed-off-by: Zhang Rui <rui.zhang@intel.com>
Signed-off-by: Wu Fengguang <fengguang.wu@intel.com>
---
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 {
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] hda - remove unnecessary msleep on power state transitions
2010-02-24 1:38 [PATCH] hda - remove unnecessary msleep on power state transitions Wu Fengguang
@ 2010-02-24 8:17 ` Takashi Iwai
2010-02-25 12:42 ` Wu Fengguang
0 siblings, 1 reply; 3+ messages in thread
From: Takashi Iwai @ 2010-02-24 8:17 UTC (permalink / raw)
To: Wu Fengguang; +Cc: Arjan van de Ven, alsa-devel, Marc Boucher, Zhang Rui
At Wed, 24 Feb 2010 09:38:49 +0800,
Wu Fengguang wrote:
>
> From: "Zhang, Rui" <rui.zhang@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@linuxant.com>
> CC: Arjan van de Ven <arjan@linux.intel.com>
> Signed-off-by: Zhang Rui <rui.zhang@intel.com>
> Signed-off-by: Wu Fengguang <fengguang.wu@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 {
>
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] hda - remove unnecessary msleep on power state transitions
2010-02-24 8:17 ` Takashi Iwai
@ 2010-02-25 12:42 ` Wu Fengguang
0 siblings, 0 replies; 3+ messages in thread
From: Wu Fengguang @ 2010-02-25 12:42 UTC (permalink / raw)
To: Takashi Iwai
Cc: Arjan van de Ven, alsa-devel@alsa-project.org, Marc Boucher,
Zhang, Rui
On Wed, Feb 24, 2010 at 04:17:15PM +0800, Takashi Iwai wrote:
> At Wed, 24 Feb 2010 09:38:49 +0800,
> Wu Fengguang wrote:
> >
> > From: "Zhang, Rui" <rui.zhang@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@linuxant.com>
> > CC: Arjan van de Ven <arjan@linux.intel.com>
> > Signed-off-by: Zhang Rui <rui.zhang@intel.com>
> > Signed-off-by: Wu Fengguang <fengguang.wu@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.
The first delay? OK let's see. Hopefully this won't break audio playback
if there are similar broken hw..
> Anyway, I applied the patch with a minor compile warning fix now.
Thank you!
Regards,
Fengguang
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2010-02-25 12:43 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-02-24 1:38 [PATCH] hda - remove unnecessary msleep on power state transitions Wu Fengguang
2010-02-24 8:17 ` Takashi Iwai
2010-02-25 12:42 ` Wu Fengguang
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).