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); |
