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

Commit 7064f376 authored by Takashi Iwai's avatar Takashi Iwai
Browse files

ALSA: intel8x0m: Register irq handler after register initializations



The interrupt handler has to be acquired after the other resource
initialization when allocated with IRQF_SHARED.  Otherwise it's
triggered before the resource gets ready, and may lead to unpleasant
behavior.

Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
parent 5b03006d
Loading
Loading
Loading
Loading
+10 −10
Original line number Diff line number Diff line
@@ -1171,16 +1171,6 @@ static int snd_intel8x0m_create(struct snd_card *card,
	}

 port_inited:
	if (request_irq(pci->irq, snd_intel8x0m_interrupt, IRQF_SHARED,
			KBUILD_MODNAME, chip)) {
		dev_err(card->dev, "unable to grab IRQ %d\n", pci->irq);
		snd_intel8x0m_free(chip);
		return -EBUSY;
	}
	chip->irq = pci->irq;
	pci_set_master(pci);
	synchronize_irq(chip->irq);

	/* initialize offsets */
	chip->bdbars_count = 2;
	tbl = intel_regs;
@@ -1224,11 +1214,21 @@ static int snd_intel8x0m_create(struct snd_card *card,
	chip->int_sta_reg = ICH_REG_GLOB_STA;
	chip->int_sta_mask = int_sta_masks;

	pci_set_master(pci);

	if ((err = snd_intel8x0m_chip_init(chip, 1)) < 0) {
		snd_intel8x0m_free(chip);
		return err;
	}

	if (request_irq(pci->irq, snd_intel8x0m_interrupt, IRQF_SHARED,
			KBUILD_MODNAME, chip)) {
		dev_err(card->dev, "unable to grab IRQ %d\n", pci->irq);
		snd_intel8x0m_free(chip);
		return -EBUSY;
	}
	chip->irq = pci->irq;

	if ((err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, chip, &ops)) < 0) {
		snd_intel8x0m_free(chip);
		return err;