diff options
Diffstat (limited to 'sound/pci/oxygen/oxygen_lib.c')
| -rw-r--r-- | sound/pci/oxygen/oxygen_lib.c | 21 |
1 files changed, 18 insertions, 3 deletions
diff --git a/sound/pci/oxygen/oxygen_lib.c b/sound/pci/oxygen/oxygen_lib.c index fad03d64e3ad..7e93cf884437 100644 --- a/sound/pci/oxygen/oxygen_lib.c +++ b/sound/pci/oxygen/oxygen_lib.c | |||
| @@ -519,16 +519,21 @@ static void oxygen_init(struct oxygen *chip) | |||
| 519 | } | 519 | } |
| 520 | } | 520 | } |
| 521 | 521 | ||
| 522 | static void oxygen_card_free(struct snd_card *card) | 522 | static void oxygen_shutdown(struct oxygen *chip) |
| 523 | { | 523 | { |
| 524 | struct oxygen *chip = card->private_data; | ||
| 525 | |||
| 526 | spin_lock_irq(&chip->reg_lock); | 524 | spin_lock_irq(&chip->reg_lock); |
| 527 | chip->interrupt_mask = 0; | 525 | chip->interrupt_mask = 0; |
| 528 | chip->pcm_running = 0; | 526 | chip->pcm_running = 0; |
| 529 | oxygen_write16(chip, OXYGEN_DMA_STATUS, 0); | 527 | oxygen_write16(chip, OXYGEN_DMA_STATUS, 0); |
| 530 | oxygen_write16(chip, OXYGEN_INTERRUPT_MASK, 0); | 528 | oxygen_write16(chip, OXYGEN_INTERRUPT_MASK, 0); |
| 531 | spin_unlock_irq(&chip->reg_lock); | 529 | spin_unlock_irq(&chip->reg_lock); |
| 530 | } | ||
| 531 | |||
| 532 | static void oxygen_card_free(struct snd_card *card) | ||
| 533 | { | ||
| 534 | struct oxygen *chip = card->private_data; | ||
| 535 | |||
| 536 | oxygen_shutdown(chip); | ||
| 532 | if (chip->irq >= 0) | 537 | if (chip->irq >= 0) |
| 533 | free_irq(chip->irq, chip); | 538 | free_irq(chip->irq, chip); |
| 534 | flush_scheduled_work(); | 539 | flush_scheduled_work(); |
| @@ -778,3 +783,13 @@ int oxygen_pci_resume(struct pci_dev *pci) | |||
| 778 | } | 783 | } |
| 779 | EXPORT_SYMBOL(oxygen_pci_resume); | 784 | EXPORT_SYMBOL(oxygen_pci_resume); |
| 780 | #endif /* CONFIG_PM */ | 785 | #endif /* CONFIG_PM */ |
| 786 | |||
| 787 | void oxygen_pci_shutdown(struct pci_dev *pci) | ||
| 788 | { | ||
| 789 | struct snd_card *card = pci_get_drvdata(pci); | ||
| 790 | struct oxygen *chip = card->private_data; | ||
| 791 | |||
| 792 | oxygen_shutdown(chip); | ||
| 793 | chip->model.cleanup(chip); | ||
| 794 | } | ||
| 795 | EXPORT_SYMBOL(oxygen_pci_shutdown); | ||
