Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit feb27340 authored by Wu Fengguang's avatar Wu Fengguang Committed by Takashi Iwai
Browse files

ALSA: hda: remember last command for each codec

parent c32649fe
Loading
Loading
Loading
Loading
+6 −5
Original line number Original line Diff line number Diff line
@@ -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