ALSA: hda - Avoid unnecessary parameter read for EPSS
EPSS parameter should be static, so we can read it once and remember. This also allows more easily to override the wrong EPSS capability reported from a codec by changing the flag in the codec initialization step. Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
Родитель
042b92c185
Коммит
983f6b9381
|
@ -1209,6 +1209,9 @@ static void snd_hda_codec_free(struct hda_codec *codec)
|
||||||
kfree(codec);
|
kfree(codec);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool snd_hda_codec_get_supported_ps(struct hda_codec *codec,
|
||||||
|
hda_nid_t fg, unsigned int power_state);
|
||||||
|
|
||||||
static void hda_set_power_state(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);
|
unsigned int power_state);
|
||||||
|
|
||||||
|
@ -1317,6 +1320,10 @@ int /*__devinit*/ snd_hda_codec_new(struct hda_bus *bus,
|
||||||
AC_VERB_GET_SUBSYSTEM_ID, 0);
|
AC_VERB_GET_SUBSYSTEM_ID, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
codec->epss = snd_hda_codec_get_supported_ps(codec,
|
||||||
|
codec->afg ? codec->afg : codec->mfg,
|
||||||
|
AC_PWRST_EPSS);
|
||||||
|
|
||||||
/* power-up all before initialization */
|
/* power-up all before initialization */
|
||||||
hda_set_power_state(codec,
|
hda_set_power_state(codec,
|
||||||
codec->afg ? codec->afg : codec->mfg,
|
codec->afg ? codec->afg : codec->mfg,
|
||||||
|
@ -3543,8 +3550,7 @@ static void hda_set_power_state(struct hda_codec *codec, hda_nid_t fg,
|
||||||
/* this delay seems necessary to avoid click noise at power-down */
|
/* this delay seems necessary to avoid click noise at power-down */
|
||||||
if (power_state == AC_PWRST_D3) {
|
if (power_state == AC_PWRST_D3) {
|
||||||
/* transition time less than 10ms for power down */
|
/* transition time less than 10ms for power down */
|
||||||
bool epss = snd_hda_codec_get_supported_ps(codec, fg, AC_PWRST_EPSS);
|
msleep(codec->epss ? 10 : 100);
|
||||||
msleep(epss ? 10 : 100);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* repeat power states setting at most 10 times*/
|
/* repeat power states setting at most 10 times*/
|
||||||
|
|
|
@ -862,6 +862,7 @@ struct hda_codec {
|
||||||
unsigned int ignore_misc_bit:1; /* ignore MISC_NO_PRESENCE bit */
|
unsigned int ignore_misc_bit:1; /* ignore MISC_NO_PRESENCE bit */
|
||||||
unsigned int no_jack_detect:1; /* Machine has no jack-detection */
|
unsigned int no_jack_detect:1; /* Machine has no jack-detection */
|
||||||
unsigned int pcm_format_first:1; /* PCM format must be set first */
|
unsigned int pcm_format_first:1; /* PCM format must be set first */
|
||||||
|
unsigned int epss:1; /* supporting EPSS? */
|
||||||
#ifdef CONFIG_SND_HDA_POWER_SAVE
|
#ifdef CONFIG_SND_HDA_POWER_SAVE
|
||||||
unsigned int power_on :1; /* current (global) power-state */
|
unsigned int power_on :1; /* current (global) power-state */
|
||||||
int power_transition; /* power-state in transition */
|
int power_transition; /* power-state in transition */
|
||||||
|
|
Загрузка…
Ссылка в новой задаче