ALSA: hda: remember last command for each codec
Signed-off-by: Wu Fengguang <fengguang.wu@intel.com> Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
parent
c32649feb4
commit
feb273404f
|
@ -418,7 +418,7 @@ struct azx {
|
||||||
unsigned int probing :1; /* codec probing phase */
|
unsigned int probing :1; /* codec probing phase */
|
||||||
|
|
||||||
/* for debugging */
|
/* for debugging */
|
||||||
unsigned int last_cmd; /* last issued command (to sync) */
|
unsigned int last_cmd[AZX_MAX_CODECS];
|
||||||
|
|
||||||
/* for pending irqs */
|
/* for pending irqs */
|
||||||
struct work_struct irq_pending_work;
|
struct work_struct irq_pending_work;
|
||||||
|
@ -668,7 +668,8 @@ static unsigned int azx_rirb_get_response(struct hda_bus *bus,
|
||||||
|
|
||||||
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", chip->last_cmd);
|
"disabling MSI: last cmd=0x%08x\n",
|
||||||
|
chip->last_cmd[addr]);
|
||||||
free_irq(chip->irq, chip);
|
free_irq(chip->irq, chip);
|
||||||
chip->irq = -1;
|
chip->irq = -1;
|
||||||
pci_disable_msi(chip->pci);
|
pci_disable_msi(chip->pci);
|
||||||
|
@ -683,7 +684,7 @@ static unsigned int azx_rirb_get_response(struct hda_bus *bus,
|
||||||
if (!chip->polling_mode) {
|
if (!chip->polling_mode) {
|
||||||
snd_printk(KERN_WARNING SFX "azx_get_response timeout, "
|
snd_printk(KERN_WARNING SFX "azx_get_response timeout, "
|
||||||
"switching to polling mode: last cmd=0x%08x\n",
|
"switching to polling mode: last cmd=0x%08x\n",
|
||||||
chip->last_cmd);
|
chip->last_cmd[addr]);
|
||||||
chip->polling_mode = 1;
|
chip->polling_mode = 1;
|
||||||
goto again;
|
goto again;
|
||||||
}
|
}
|
||||||
|
@ -707,7 +708,7 @@ static unsigned int azx_rirb_get_response(struct hda_bus *bus,
|
||||||
|
|
||||||
snd_printk(KERN_ERR "hda_intel: azx_get_response timeout, "
|
snd_printk(KERN_ERR "hda_intel: azx_get_response timeout, "
|
||||||
"switching to single_cmd mode: last cmd=0x%08x\n",
|
"switching to single_cmd mode: last cmd=0x%08x\n",
|
||||||
chip->last_cmd);
|
chip->last_cmd[addr]);
|
||||||
chip->single_cmd = 1;
|
chip->single_cmd = 1;
|
||||||
bus->response_reset = 0;
|
bus->response_reset = 0;
|
||||||
/* re-initialize CORB/RIRB */
|
/* re-initialize CORB/RIRB */
|
||||||
|
@ -794,7 +795,7 @@ static int azx_send_cmd(struct hda_bus *bus, unsigned int val)
|
||||||
{
|
{
|
||||||
struct azx *chip = bus->private_data;
|
struct azx *chip = bus->private_data;
|
||||||
|
|
||||||
chip->last_cmd = val;
|
chip->last_cmd[azx_command_addr(val)] = val;
|
||||||
if (chip->single_cmd)
|
if (chip->single_cmd)
|
||||||
return azx_single_send_cmd(bus, val);
|
return azx_single_send_cmd(bus, val);
|
||||||
else
|
else
|
||||||
|
|
Loading…
Reference in New Issue