提交 23c4a881 编写于 作者: T Takashi Iwai

ALSA: hda - Switch to polling mode before disabling MSI

When any codec communication error happens, try to switch to the polling
mode first before turning off MSI.  MSI gets more stable nowadays, thus
we should keep it on as much as possible.
Signed-off-by: NTakashi Iwai <tiwai@suse.de>
上级 6a5f96ce
...@@ -677,6 +677,14 @@ static unsigned int azx_rirb_get_response(struct hda_bus *bus, ...@@ -677,6 +677,14 @@ static unsigned int azx_rirb_get_response(struct hda_bus *bus,
} }
} }
if (!chip->polling_mode) {
snd_printk(KERN_WARNING SFX "azx_get_response timeout, "
"switching to polling mode: last cmd=0x%08x\n",
chip->last_cmd[addr]);
chip->polling_mode = 1;
goto again;
}
if (chip->msi) { if (chip->msi) {
snd_printk(KERN_WARNING SFX "No response from codec, " snd_printk(KERN_WARNING SFX "No response from codec, "
"disabling MSI: last cmd=0x%08x\n", "disabling MSI: last cmd=0x%08x\n",
...@@ -692,14 +700,6 @@ static unsigned int azx_rirb_get_response(struct hda_bus *bus, ...@@ -692,14 +700,6 @@ static unsigned int azx_rirb_get_response(struct hda_bus *bus,
goto again; goto again;
} }
if (!chip->polling_mode) {
snd_printk(KERN_WARNING SFX "azx_get_response timeout, "
"switching to polling mode: last cmd=0x%08x\n",
chip->last_cmd[addr]);
chip->polling_mode = 1;
goto again;
}
if (chip->probing) { if (chip->probing) {
/* If this critical timeout happens during the codec probing /* If this critical timeout happens during the codec probing
* phase, this is likely an access to a non-existing codec * phase, this is likely an access to a non-existing codec
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册