Commit 7bb95296 authored by Ricardo Cerqueira's avatar Ricardo Cerqueira Committed by Mauro Carvalho Chehab

V4L/DVB (3200): Fix saa7134 ALSA/OSS collisions

- When ALSA or OSS are loaded, check if the other is present
Fixed hotplug notifiers cleanup on module removal
- The saa7134 DMA sound modules now have their own Kconfig entries, and
if built statically enforce exclusivity
- SND_PCM_OSS isn't necessary for the OSS driver
Signed-off-by: default avatarRicardo Cerqueira <v4l@cerqueira.org>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@brturbo.com.br>
parent d5ea4e26
config VIDEO_SAA7134 config VIDEO_SAA7134
tristate "Philips SAA7134 support" tristate "Philips SAA7134 support"
depends on VIDEO_DEV && PCI && I2C && SOUND && SND depends on VIDEO_DEV && PCI && I2C
select VIDEO_BUF select VIDEO_BUF
select VIDEO_IR select VIDEO_IR
select VIDEO_TUNER select VIDEO_TUNER
select CRC32 select CRC32
select SND_PCM_OSS
---help--- ---help---
This is a video4linux driver for Philips SAA713x based This is a video4linux driver for Philips SAA713x based
TV cards. TV cards.
...@@ -13,6 +12,29 @@ config VIDEO_SAA7134 ...@@ -13,6 +12,29 @@ config VIDEO_SAA7134
To compile this driver as a module, choose M here: the To compile this driver as a module, choose M here: the
module will be called saa7134. module will be called saa7134.
config VIDEO_SAA7134_ALSA
tristate "Philips SAA7134 DMA audio support"
depends on VIDEO_SAA7134 && SOUND && SND && (!VIDEO_SAA7134_OSS || VIDEO_SAA7134_OSS = m)
select SND_PCM_OSS
---help---
This is a video4linux driver for direct (DMA) audio in
Philips SAA713x based TV cards using ALSA
To compile this driver as a module, choose M here: the
module will be called saa7134-alsa.
config VIDEO_SAA7134_OSS
tristate "Philips SAA7134 DMA audio support (OSS, DEPRECATED)"
depends on VIDEO_SAA7134 && SOUND_PRIME && (!VIDEO_SAA7134_ALSA || VIDEO_SAA7134_ALSA = m)
---help---
This is a video4linux driver for direct (DMA) audio in
Philips SAA713x based TV cards using OSS
This is deprecated in favor of the ALSA module
To compile this driver as a module, choose M here: the
module will be called saa7134-oss.
config VIDEO_SAA7134_DVB config VIDEO_SAA7134_DVB
tristate "DVB/ATSC Support for saa7134 based TV cards" tristate "DVB/ATSC Support for saa7134 based TV cards"
depends on VIDEO_SAA7134 && DVB_CORE depends on VIDEO_SAA7134 && DVB_CORE
......
...@@ -4,8 +4,11 @@ saa7134-objs := saa7134-cards.o saa7134-core.o saa7134-i2c.o \ ...@@ -4,8 +4,11 @@ saa7134-objs := saa7134-cards.o saa7134-core.o saa7134-i2c.o \
saa7134-video.o saa7134-input.o saa7134-video.o saa7134-input.o
obj-$(CONFIG_VIDEO_SAA7134) += saa7134.o saa7134-empress.o \ obj-$(CONFIG_VIDEO_SAA7134) += saa7134.o saa7134-empress.o \
saa6752hs.o saa7134-alsa.o \ saa6752hs.o
saa7134-oss.o
obj-$(CONFIG_VIDEO_SAA7134_ALSA) += saa7134-alsa.o
obj-$(CONFIG_VIDEO_SAA7134_OSS) += saa7134-oss.o
obj-$(CONFIG_VIDEO_SAA7134_DVB) += saa7134-dvb.o obj-$(CONFIG_VIDEO_SAA7134_DVB) += saa7134-dvb.o
EXTRA_CFLAGS += -I$(src)/.. EXTRA_CFLAGS += -I$(src)/..
......
...@@ -989,6 +989,14 @@ static int saa7134_alsa_init(void) ...@@ -989,6 +989,14 @@ static int saa7134_alsa_init(void)
struct saa7134_dev *dev = NULL; struct saa7134_dev *dev = NULL;
struct list_head *list; struct list_head *list;
if (!dmasound_init && !dmasound_exit) {
dmasound_init = alsa_device_init;
dmasound_exit = alsa_device_exit;
} else {
printk(KERN_WARNING "saa7134 ALSA: can't load, DMA sound handler already assigned (probably to OSS)\n");
return -EBUSY;
}
printk(KERN_INFO "saa7134 ALSA driver for DMA sound loaded\n"); printk(KERN_INFO "saa7134 ALSA driver for DMA sound loaded\n");
list_for_each(list,&saa7134_devlist) { list_for_each(list,&saa7134_devlist) {
...@@ -1001,9 +1009,6 @@ static int saa7134_alsa_init(void) ...@@ -1001,9 +1009,6 @@ static int saa7134_alsa_init(void)
} }
} }
dmasound_init = alsa_device_init;
dmasound_exit = alsa_device_exit;
if (dev == NULL) if (dev == NULL)
printk(KERN_INFO "saa7134 ALSA: no saa7134 cards found\n"); printk(KERN_INFO "saa7134 ALSA: no saa7134 cards found\n");
...@@ -1023,6 +1028,8 @@ static void saa7134_alsa_exit(void) ...@@ -1023,6 +1028,8 @@ static void saa7134_alsa_exit(void)
snd_card_free(snd_saa7134_cards[idx]); snd_card_free(snd_saa7134_cards[idx]);
} }
dmasound_init = NULL;
dmasound_exit = NULL;
printk(KERN_INFO "saa7134 ALSA driver for DMA sound unloaded\n"); printk(KERN_INFO "saa7134 ALSA driver for DMA sound unloaded\n");
return; return;
......
...@@ -959,8 +959,17 @@ static int saa7134_oss_init(void) ...@@ -959,8 +959,17 @@ static int saa7134_oss_init(void)
struct saa7134_dev *dev = NULL; struct saa7134_dev *dev = NULL;
struct list_head *list; struct list_head *list;
if (!dmasound_init && !dmasound_exit) {
dmasound_init = oss_device_init;
dmasound_exit = oss_device_exit;
} else {
printk(KERN_WARNING "saa7134 OSS: can't load, DMA sound handler already assigned (probably to ALSA)\n");
return -EBUSY;
}
printk(KERN_INFO "saa7134 OSS driver for DMA sound loaded\n"); printk(KERN_INFO "saa7134 OSS driver for DMA sound loaded\n");
list_for_each(list,&saa7134_devlist) { list_for_each(list,&saa7134_devlist) {
dev = list_entry(list, struct saa7134_dev, devlist); dev = list_entry(list, struct saa7134_dev, devlist);
if (dev->dmasound.priv_data == NULL) { if (dev->dmasound.priv_data == NULL) {
...@@ -974,9 +983,6 @@ static int saa7134_oss_init(void) ...@@ -974,9 +983,6 @@ static int saa7134_oss_init(void)
if (dev == NULL) if (dev == NULL)
printk(KERN_INFO "saa7134 OSS: no saa7134 cards found\n"); printk(KERN_INFO "saa7134 OSS: no saa7134 cards found\n");
dmasound_init = oss_device_init;
dmasound_exit = oss_device_exit;
return 0; return 0;
} }
...@@ -997,6 +1003,9 @@ static void saa7134_oss_exit(void) ...@@ -997,6 +1003,9 @@ static void saa7134_oss_exit(void)
} }
dmasound_init = NULL;
dmasound_exit = NULL;
printk(KERN_INFO "saa7134 OSS driver for DMA sound unloaded\n"); printk(KERN_INFO "saa7134 OSS driver for DMA sound unloaded\n");
return; return;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment