[alsa-devel] [PATCH] ALSA: hda - power setting error check

Takashi Iwai tiwai at suse.de
Thu Jun 7 11:31:08 CEST 2012


At Thu,  7 Jun 2012 16:52:51 +0800,
Wang Xingchao wrote:
> 
> codec may reject power state transition requests(reporting PS-ERROR set),
> in that case we re-issue a power state setting and check error bit again.
> 
> Signed-off-by: Wang Xingchao <xingchao.wang at intel.com>
> ---
>  sound/pci/hda/hda_codec.c |   11 +++++++++++
>  1 file changed, 11 insertions(+)
> 
> diff --git a/sound/pci/hda/hda_codec.c b/sound/pci/hda/hda_codec.c
> index d0ca370..bb64eba 100644
> --- a/sound/pci/hda/hda_codec.c
> +++ b/sound/pci/hda/hda_codec.c
> @@ -3526,6 +3526,7 @@ static bool snd_hda_codec_get_supported_ps(struct hda_codec *codec, hda_nid_t fg
>  static void hda_set_power_state(struct hda_codec *codec, hda_nid_t fg,
>  				unsigned int power_state)
>  {
> +	int state, count = 0;
>  	if (codec->patch_ops.set_power_state) {
>  		codec->patch_ops.set_power_state(codec, fg, power_state);
>  		return;
> @@ -3537,9 +3538,19 @@ static void hda_set_power_state(struct hda_codec *codec, hda_nid_t fg,
>  		bool epss = snd_hda_codec_get_supported_ps(codec, fg, AC_PWRST_EPSS);
>  		msleep(epss? 10:100);
>  	}
> +again:
>  	snd_hda_codec_read(codec, fg, 0, AC_VERB_SET_POWER_STATE,
>  			    power_state);
>  	snd_hda_codec_set_power_to_all(codec, fg, power_state, true);
> +	state = snd_hda_codec_read(codec, fg, 0,
> +				   AC_VERB_GET_POWER_STATE, 0);
> +	if (state & AC_PWRST_ERROR) {
> +		/* repeat power states setting at most 10 times*/
> +		if (count++ > 10)
> +			snd_printk(KERN_WARNING "Power states transition reject!\n");
> +		else
> +			goto again;
> +	}

For such a short block, better to use a proper loop instead of goto,
IMO.


Takashi


More information about the Alsa-devel mailing list