diff options
Diffstat (limited to 'sound/pci/intel8x0.c')
-rw-r--r-- | sound/pci/intel8x0.c | 29 |
1 files changed, 25 insertions, 4 deletions
diff --git a/sound/pci/intel8x0.c b/sound/pci/intel8x0.c index f4319b8d4644..9c1bce7afa86 100644 --- a/sound/pci/intel8x0.c +++ b/sound/pci/intel8x0.c | |||
@@ -1962,6 +1962,12 @@ static struct ac97_quirk ac97_quirks[] __devinitdata = { | |||
1962 | .type = AC97_TUNE_HP_ONLY | 1962 | .type = AC97_TUNE_HP_ONLY |
1963 | }, | 1963 | }, |
1964 | { | 1964 | { |
1965 | .subvendor = 0x10f7, | ||
1966 | .subdevice = 0x834c, | ||
1967 | .name = "Panasonic CF-R4", | ||
1968 | .type = AC97_TUNE_HP_ONLY, | ||
1969 | }, | ||
1970 | { | ||
1965 | .subvendor = 0x110a, | 1971 | .subvendor = 0x110a, |
1966 | .subdevice = 0x0056, | 1972 | .subdevice = 0x0056, |
1967 | .name = "Fujitsu-Siemens Scenic", /* AD1981? */ | 1973 | .name = "Fujitsu-Siemens Scenic", /* AD1981? */ |
@@ -2476,10 +2482,14 @@ static int intel8x0_suspend(struct pci_dev *pci, pm_message_t state) | |||
2476 | if (chip->device_type == DEVICE_INTEL_ICH4) | 2482 | if (chip->device_type == DEVICE_INTEL_ICH4) |
2477 | chip->sdm_saved = igetbyte(chip, ICHREG(SDM)); | 2483 | chip->sdm_saved = igetbyte(chip, ICHREG(SDM)); |
2478 | 2484 | ||
2479 | if (chip->irq >= 0) | 2485 | if (chip->irq >= 0) { |
2486 | synchronize_irq(chip->irq); | ||
2480 | free_irq(chip->irq, chip); | 2487 | free_irq(chip->irq, chip); |
2488 | chip->irq = -1; | ||
2489 | } | ||
2481 | pci_disable_device(pci); | 2490 | pci_disable_device(pci); |
2482 | pci_save_state(pci); | 2491 | pci_save_state(pci); |
2492 | pci_set_power_state(pci, pci_choose_state(pci, state)); | ||
2483 | return 0; | 2493 | return 0; |
2484 | } | 2494 | } |
2485 | 2495 | ||
@@ -2489,11 +2499,22 @@ static int intel8x0_resume(struct pci_dev *pci) | |||
2489 | struct intel8x0 *chip = card->private_data; | 2499 | struct intel8x0 *chip = card->private_data; |
2490 | int i; | 2500 | int i; |
2491 | 2501 | ||
2502 | pci_set_power_state(pci, PCI_D0); | ||
2492 | pci_restore_state(pci); | 2503 | pci_restore_state(pci); |
2493 | pci_enable_device(pci); | 2504 | if (pci_enable_device(pci) < 0) { |
2505 | printk(KERN_ERR "intel8x0: pci_enable_device failed, " | ||
2506 | "disabling device\n"); | ||
2507 | snd_card_disconnect(card); | ||
2508 | return -EIO; | ||
2509 | } | ||
2494 | pci_set_master(pci); | 2510 | pci_set_master(pci); |
2495 | request_irq(pci->irq, snd_intel8x0_interrupt, IRQF_DISABLED|IRQF_SHARED, | 2511 | if (request_irq(pci->irq, snd_intel8x0_interrupt, |
2496 | card->shortname, chip); | 2512 | IRQF_DISABLED|IRQF_SHARED, card->shortname, chip)) { |
2513 | printk(KERN_ERR "intel8x0: unable to grab IRQ %d, " | ||
2514 | "disabling device\n", pci->irq); | ||
2515 | snd_card_disconnect(card); | ||
2516 | return -EIO; | ||
2517 | } | ||
2497 | chip->irq = pci->irq; | 2518 | chip->irq = pci->irq; |
2498 | synchronize_irq(chip->irq); | 2519 | synchronize_irq(chip->irq); |
2499 | snd_intel8x0_chip_init(chip, 0); | 2520 | snd_intel8x0_chip_init(chip, 0); |