2012/6/7 Takashi Iwai tiwai@suse.de:
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@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.
Thanks for review, i'd update the patch and send it out again.
thanks --xingchao