ALSA: hda_intel: more strict alc880_parse_auto_config dig_nid checking
On some IbexPeak systems with ALC889A errors like "azx_get_response timeout, switching to polling mode: last cmd=0xaf9f000b" are produced, because non-existent codec #10 is wrongly accessed. The problem is that snd_hda_get_connections() returns out-of-range result for NID 0x1c (something like 0xf8f9 or 0xffff). This patch adds a check to alc880_parse_auto_config() to avoid using of this out-of-range NIDs. A better fix maybe to improve snd_hda_get_connections() routine to check for valid NID ranges if NIDs are expected as result. Signed-off-by: Jaroslav Kysela <perex@perex.cz> Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
Родитель
005b10769c
Коммит
9d30937acc
|
@ -4505,6 +4505,12 @@ static int alc880_parse_auto_config(struct hda_codec *codec)
|
||||||
&dig_nid, 1);
|
&dig_nid, 1);
|
||||||
if (err < 0)
|
if (err < 0)
|
||||||
continue;
|
continue;
|
||||||
|
if (dig_nid > 0x7f) {
|
||||||
|
printk(KERN_ERR "alc880_auto: invalid dig_nid "
|
||||||
|
"connection 0x%x for NID 0x%x\n", dig_nid,
|
||||||
|
spec->autocfg.dig_out_pins[i]);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
if (!i)
|
if (!i)
|
||||||
spec->multiout.dig_out_nid = dig_nid;
|
spec->multiout.dig_out_nid = dig_nid;
|
||||||
else {
|
else {
|
||||||
|
|
Загрузка…
Ссылка в новой задаче