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

Commit f46ea609 authored by Dylan Reid's avatar Dylan Reid Committed by Takashi Iwai
Browse files

ALSA: hda - Add function pointer for disabling MSI



This is a PCI-only feature, but adding a callback for it in the chip
structure breaks the PCI dependency in the RIRB code allowing the
logic there to be re-used by the platform HDA driver.

Signed-off-by: default avatarDylan Reid <dgreid@chromium.org>
Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
parent 8928756d
Loading
Loading
Loading
Loading
+18 −5
Original line number Diff line number Diff line
@@ -600,11 +600,8 @@ static unsigned int azx_rirb_get_response(struct hda_bus *bus,
		dev_warn(chip->card->dev,
			 "No response from codec, disabling MSI: last cmd=0x%08x\n",
			 chip->last_cmd[addr]);
		free_irq(chip->irq, chip);
		chip->irq = -1;
		pci_disable_msi(chip->pci);
		chip->msi = 0;
		if (azx_acquire_irq(chip, 1) < 0) {
		if (chip->ops->disable_msi_reset_irq &&
		    chip->ops->disable_msi_reset_irq(chip) < 0) {
			bus->rirb_error = 1;
			return -1;
		}
@@ -3469,6 +3466,21 @@ static u8 pci_azx_readb(u8 *addr)
	return readb(addr);
}

static int disable_msi_reset_irq(struct azx *chip)
{
	int err;

	free_irq(chip->irq, chip);
	chip->irq = -1;
	pci_disable_msi(chip->pci);
	chip->msi = 0;
	err = azx_acquire_irq(chip, 1);
	if (err < 0)
		return err;

	return 0;
}

static const struct hda_controller_ops pci_hda_ops = {
	.writel = pci_azx_writel,
	.readl = pci_azx_readl,
@@ -3476,6 +3488,7 @@ static const struct hda_controller_ops pci_hda_ops = {
	.readw = pci_azx_readw,
	.writeb = pci_azx_writeb,
	.readb = pci_azx_readb,
	.disable_msi_reset_irq = disable_msi_reset_irq,
};

static int azx_probe(struct pci_dev *pci,
+4 −0
Original line number Diff line number Diff line
@@ -285,6 +285,8 @@ struct azx_rb {
	u32 res[AZX_MAX_CODECS];	/* last read value */
};

struct azx;

/* Functions to read/write to hda registers. */
struct hda_controller_ops {
	/* Register Access */
@@ -294,6 +296,8 @@ struct hda_controller_ops {
	u16 (*readw)(u16 *addr);
	void (*writeb)(u8 value, u8 *addr);
	u8 (*readb)(u8 *addr);
	/* Disable msi if supported, PCI only */
	int (*disable_msi_reset_irq)(struct azx *);
};

struct azx_pcm {