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: Ricardo Cerqueira <v4l@cerqueira.org> Signed-off-by: Mauro Carvalho Chehab <mchehab@brturbo.com.br>
This commit is contained in:
parent
d5ea4e2660
commit
7bb9529602
4 changed files with 51 additions and 10 deletions
|
@ -1,11 +1,10 @@
|
|||
config VIDEO_SAA7134
|
||||
tristate "Philips SAA7134 support"
|
||||
depends on VIDEO_DEV && PCI && I2C && SOUND && SND
|
||||
depends on VIDEO_DEV && PCI && I2C
|
||||
select VIDEO_BUF
|
||||
select VIDEO_IR
|
||||
select VIDEO_TUNER
|
||||
select CRC32
|
||||
select SND_PCM_OSS
|
||||
---help---
|
||||
This is a video4linux driver for Philips SAA713x based
|
||||
TV cards.
|
||||
|
@ -13,6 +12,29 @@ config VIDEO_SAA7134
|
|||
To compile this driver as a module, choose M here: the
|
||||
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
|
||||
tristate "DVB/ATSC Support for saa7134 based TV cards"
|
||||
depends on VIDEO_SAA7134 && DVB_CORE
|
||||
|
|
|
@ -4,8 +4,11 @@ saa7134-objs := saa7134-cards.o saa7134-core.o saa7134-i2c.o \
|
|||
saa7134-video.o saa7134-input.o
|
||||
|
||||
obj-$(CONFIG_VIDEO_SAA7134) += saa7134.o saa7134-empress.o \
|
||||
saa6752hs.o saa7134-alsa.o \
|
||||
saa7134-oss.o
|
||||
saa6752hs.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
|
||||
|
||||
EXTRA_CFLAGS += -I$(src)/..
|
||||
|
|
|
@ -989,6 +989,14 @@ static int saa7134_alsa_init(void)
|
|||
struct saa7134_dev *dev = NULL;
|
||||
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");
|
||||
|
||||
list_for_each(list,&saa7134_devlist) {
|
||||
|
@ -1001,9 +1009,6 @@ static int saa7134_alsa_init(void)
|
|||
}
|
||||
}
|
||||
|
||||
dmasound_init = alsa_device_init;
|
||||
dmasound_exit = alsa_device_exit;
|
||||
|
||||
if (dev == NULL)
|
||||
printk(KERN_INFO "saa7134 ALSA: no saa7134 cards found\n");
|
||||
|
||||
|
@ -1023,6 +1028,8 @@ static void saa7134_alsa_exit(void)
|
|||
snd_card_free(snd_saa7134_cards[idx]);
|
||||
}
|
||||
|
||||
dmasound_init = NULL;
|
||||
dmasound_exit = NULL;
|
||||
printk(KERN_INFO "saa7134 ALSA driver for DMA sound unloaded\n");
|
||||
|
||||
return;
|
||||
|
|
|
@ -959,8 +959,17 @@ static int saa7134_oss_init(void)
|
|||
struct saa7134_dev *dev = NULL;
|
||||
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");
|
||||
|
||||
|
||||
list_for_each(list,&saa7134_devlist) {
|
||||
dev = list_entry(list, struct saa7134_dev, devlist);
|
||||
if (dev->dmasound.priv_data == NULL) {
|
||||
|
@ -974,9 +983,6 @@ static int saa7134_oss_init(void)
|
|||
if (dev == NULL)
|
||||
printk(KERN_INFO "saa7134 OSS: no saa7134 cards found\n");
|
||||
|
||||
dmasound_init = oss_device_init;
|
||||
dmasound_exit = oss_device_exit;
|
||||
|
||||
return 0;
|
||||
|
||||
}
|
||||
|
@ -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");
|
||||
|
||||
return;
|
||||
|
|
Reference in a new issue