diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2010-09-10 10:23:45 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2010-09-10 10:23:45 -0400 |
commit | 3657423c02b639fcade37673f8541bd90c5e58e5 (patch) | |
tree | 748e7f7114c9014b3bee138519872ac978f7320a /sound/pci/oxygen/oxygen_lib.c | |
parent | df423dc7f2a801b9a45d7c501a8eb5c529455ea1 (diff) | |
parent | 5431427b1a5acbae0b3dffd91f6ba96aee141f43 (diff) |
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound-2.6
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound-2.6:
ALSA: rawmidi: fix the get next midi device ioctl
ALSA: hda - Fix wrong HP pin detection in snd_hda_parse_pin_def_config()
ALSA: seq/oss - Fix double-free at error path of snd_seq_oss_open()
ALSA: msnd-classic: Fix invalid cfg parameter
ALSA: hda - Enable PC-beep for EeePC with ALC269 codec
ALSA: hda - Add errata initverb sequence for CS42xx codecs
ALSA: usb - Release capture substream URBs properly
ALSA: virtuoso: fix setting of Xonar DS line-in/mic-in controls
ALSA: virtuoso: work around missing reset in the Xonar DS Windows driver
ALSA: hda - Add quirk for Lenovo T400s
ALSA: usb-audio: fix detection of vendor-specific device protocol settings
ALSA: usb-audio: Assume first control interface is for audio
ALSA: hda - Add a new hp-laptop model for Conexant 5066, tested on HP G60
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); | ||