[alsa-devel] [PATCH v3 2/2] [ALSA] hda - suspend the controller only if all codecs support stop-clk in D3

Takashi Iwai tiwai at suse.de
Wed Aug 22 14:16:40 CEST 2012


At Wed, 22 Aug 2012 18:46:43 +0800,
mengdong.lin at intel.com wrote:
> 
> From: Mengdong Lin <mengdong.lin at intel.com>
> 
> If a codec can support targeted pass-through operations in D3 state when there
> is no BCLK present on the link, it will set CLKSTOP flag in the supported power
> states and report PS-ClkStopOk when entering D3 state.
> 
> So only if a codec supports this stop-clock feature, it will request suspending
> the controller after it enters D3 and requst resuming the controller before back
> to D0. Thus the controller will be suspended only when all codecs are suspended
> and support stop-clock in D3.
> 
> Please refer to HDA spec section 7.3.3.10 Power state and 7.3.4.12 Supported
> Power States.
> 
> Details:
> - azx_power_notify() add 'codec' as 2nd parameter to check its stop-clock flag.
> - each codec count 1 on the controller's power usage counter, and inc/dec the
>   count independently from each other.

You shouldn't move pm_runtime_get_noresume() / _put_no_idle() to
hda_codec.c, but these should be called only in hda_intel.c.
Basically there is no PCI-specific code in hda_codec.c and patch_*.c.
All PCI controller code should be in hda_intel.c.

(snip)
>  	else if (chip->running && power_save_controller &&
> -		 !bus->power_keep_link_on) {
> +		 !bus->power_keep_link_on)
>  		azx_stop_chip(chip);
>  
> -		/* TODO: Suspend controller only if all codec support
> -		stop-clock in D3, for wakeup consideration */
> +	if (!bus->power_keep_link_on
> +		&& !codec->power_on && codec->d3_stop_clk_ok)
>  		pm_runtime_put_sync(&chip->pci->dev);

Also it should check power_save_controller, too.


Takashi


More information about the Alsa-devel mailing list