diff options
author | Ricardo Cerqueira <devnull@localhost> | 2005-11-16 03:34:21 +0000 |
---|---|---|
committer | Ricardo Cerqueira <devnull@localhost> | 2005-11-16 03:34:21 +0000 |
commit | 3e7aa9c77bd81131abca6c1a12c9770a02cd2a27 (patch) | |
tree | 8fa7af43740283d99e4f82f67bf01629b84ab09c /linux/drivers/media/video/saa7134/saa7134-core.c | |
parent | 61a3afc653500b0f1cd1ad6ce7cda934afaf2808 (diff) | |
download | mediapointer-dvb-s2-3e7aa9c77bd81131abca6c1a12c9770a02cd2a27.tar.gz mediapointer-dvb-s2-3e7aa9c77bd81131abca6c1a12c9770a02cd2a27.tar.bz2 |
Fix hotplugging issues with saa7134
From: Ricardo Cerqueira <v4l@cerqueira.org>
- Fixed issue with hotplugging and DMA sound (sound was lost when replugging
a card)
- Added notifiers to main saa7134 module to let the sound sub-modules know
when a card has been inserted or removed
Signed-off-by: Ricardo Cerqueira <v4l@cerqueira.org>
Diffstat (limited to 'linux/drivers/media/video/saa7134/saa7134-core.c')
-rw-r--r-- | linux/drivers/media/video/saa7134/saa7134-core.c | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/linux/drivers/media/video/saa7134/saa7134-core.c b/linux/drivers/media/video/saa7134/saa7134-core.c index 76e228456..985a053ab 100644 --- a/linux/drivers/media/video/saa7134/saa7134-core.c +++ b/linux/drivers/media/video/saa7134/saa7134-core.c @@ -1,5 +1,5 @@ /* - * $Id: saa7134-core.c,v 1.55 2005/11/09 18:30:51 mchehab Exp $ + * $Id: saa7134-core.c,v 1.56 2005/11/16 03:34:21 rmcc Exp $ * * device driver for philips saa7134 based TV cards * driver core @@ -108,6 +108,9 @@ LIST_HEAD(saa7134_devlist); static LIST_HEAD(mops_list); static unsigned int saa7134_devcount; +int (*dmasound_init)(struct saa7134_dev *dev); +int (*dmasound_exit)(struct saa7134_dev *dev); + #define dprintk(fmt, arg...) if (core_debug) \ printk(KERN_DEBUG "%s/core: " fmt, dev->name , ## arg) @@ -1087,6 +1090,10 @@ static int __devinit saa7134_initdev(struct pci_dev *pci_dev, /* check for signal */ saa7134_irq_video_intl(dev); + if (dmasound_init && !dev->dmasound.priv_data) { + dmasound_init(dev); + } + return 0; fail4: @@ -1110,6 +1117,11 @@ static void __devexit saa7134_finidev(struct pci_dev *pci_dev) struct list_head *item; struct saa7134_mpeg_ops *mops; + /* Release DMA sound modules if present */ + if (dmasound_exit && dev->dmasound.priv_data) { + dmasound_exit(dev); + } + /* debugging ... */ if (irq_debug) { u32 report = saa_readl(SAA7134_IRQ_REPORT); @@ -1141,6 +1153,7 @@ static void __devexit saa7134_finidev(struct pci_dev *pci_dev) saa7134_i2c_unregister(dev); saa7134_unregister_video(dev); + /* the DMA sound modules should be unloaded before reaching this, but just in case they are still present... */ if (dev->dmasound.priv_data != NULL) { @@ -1148,6 +1161,7 @@ static void __devexit saa7134_finidev(struct pci_dev *pci_dev) dev->dmasound.priv_data = NULL; } + /* release resources */ free_irq(pci_dev->irq, dev); iounmap(dev->lmmio); @@ -1243,6 +1257,8 @@ EXPORT_SYMBOL(saa7134_boards); /* ----------------- for the DMA sound modules --------------- */ +EXPORT_SYMBOL(dmasound_init); +EXPORT_SYMBOL(dmasound_exit); EXPORT_SYMBOL(saa7134_pgtable_free); EXPORT_SYMBOL(saa7134_pgtable_build); EXPORT_SYMBOL(saa7134_pgtable_alloc); |