summaryrefslogtreecommitdiff
path: root/linux/drivers/media/video/saa7134/saa7134-core.c
diff options
context:
space:
mode:
authorRicardo Cerqueira <devnull@localhost>2005-11-16 03:34:21 +0000
committerRicardo Cerqueira <devnull@localhost>2005-11-16 03:34:21 +0000
commit3e7aa9c77bd81131abca6c1a12c9770a02cd2a27 (patch)
tree8fa7af43740283d99e4f82f67bf01629b84ab09c /linux/drivers/media/video/saa7134/saa7134-core.c
parent61a3afc653500b0f1cd1ad6ce7cda934afaf2808 (diff)
downloadmediapointer-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.c18
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);