Răsfoiți Sursa

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>
Wu Fengguang 15 ani în urmă
părinte
comite
feb273404f
1 a modificat fișierele cu 6 adăugiri și 5 ștergeri
  1. 6 5
      sound/pci/hda/hda_intel.c

+ 6 - 5
sound/pci/hda/hda_intel.c

@@ -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