Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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
Loading
Loading
Loading
Loading
+24 −2
Original line number Diff line number Diff line
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
+5 −2
Original line number Diff line number Diff line
@@ -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)/..
+10 −3
Original line number Diff line number Diff line
@@ -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;
+12 −3
Original line number Diff line number Diff line
@@ -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;