mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-07 03:15:31 +09:00
ALSA: intel8x0m: Register irq handler after register initializations
[ Upstream commit 7064f376d4 ]
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: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
8b7623080a
commit
84c2f1e228
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user