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

Commit d886e87c authored by Tejun Heo's avatar Tejun Heo Committed by Jaroslav Kysela
Browse files

sound: make OSS sound core optional



sound/sound_core.c implements soundcore.ko and contains two parts -
sound_class which is shared by both ALSA and OSS and device
redirection support for OSS.  It's always compiled when any sound
support is enabled although it's necessary only when OSS (the actual
one or emulation) is enabled.  This is slightly wasteful and as device
redirection always registers character device region for major 14, it
prevents alternative implementation.

This patch introduces a new config SOUND_OSS_CORE which is selected
iff OSS support is actually necessary and build the OSS core part
conditionally.

If OSS is disabled, soundcore merely contains sound_class but leaving
it that way seems to be the simplest approach as otherwise sound_class
should be in ALSA core file if OSS is disabled but should be in
soundcore if OSS is enabled.  Also, there's also the user confusion
factor.

Signed-off-by: default avatarTejun Heo <tj@kernel.org>
Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
Signed-off-by: default avatarJaroslav Kysela <perex@perex.cz>
parent 9f99a638
Loading
Loading
Loading
Loading
+4 −0
Original line number Original line Diff line number Diff line
@@ -203,6 +203,10 @@ config SOUND
	tristate
	tristate
	default UML_SOUND
	default UML_SOUND


config SOUND_OSS_CORE
	bool
	default UML_SOUND

config HOSTAUDIO
config HOSTAUDIO
	tristate
	tristate
	default UML_SOUND
	default UML_SOUND
+5 −0
Original line number Original line Diff line number Diff line
@@ -28,6 +28,10 @@ menuconfig SOUND


if SOUND
if SOUND


config SOUND_OSS_CORE
	bool
	default n

source "sound/oss/dmasound/Kconfig"
source "sound/oss/dmasound/Kconfig"


if !M68K
if !M68K
@@ -80,6 +84,7 @@ endif # SND


menuconfig SOUND_PRIME
menuconfig SOUND_PRIME
	tristate "Open Sound System (DEPRECATED)"
	tristate "Open Sound System (DEPRECATED)"
	select SOUND_OSS_CORE
	help
	help
	  Say 'Y' or 'M' to enable Open Sound System drivers.
	  Say 'Y' or 'M' to enable Open Sound System drivers.


+1 −0
Original line number Original line Diff line number Diff line
@@ -44,6 +44,7 @@ config SND_SEQ_DUMMY
	  will be called snd-seq-dummy.
	  will be called snd-seq-dummy.


config SND_OSSEMUL
config SND_OSSEMUL
	select SOUND_OSS_CORE
	bool
	bool


config SND_MIXER_OSS
config SND_MIXER_OSS
+1 −0
Original line number Original line Diff line number Diff line
@@ -42,3 +42,4 @@ config DMASOUND_Q40


config DMASOUND
config DMASOUND
	tristate
	tristate
	select SOUND_OSS_CORE
+60 −19
Original line number Original line Diff line number Diff line
/*
/*
 *	Sound core handling. Breaks out sound functions to submodules
 *	Sound core.  This file is composed of two parts.  sound_class
 *	which is common to both OSS and ALSA and OSS sound core which
 *	is used OSS or emulation of it.
 */

/*
 * First, the common part.
 */
#include <linux/module.h>
#include <linux/device.h>
#include <linux/err.h>

#ifdef CONFIG_SOUND_OSS_CORE
static int __init init_oss_soundcore(void);
static void __exit cleanup_oss_soundcore(void);
#else
static inline int init_oss_soundcore(void)	{ return 0; }
static inline void cleanup_oss_soundcore(void)	{ }
#endif

struct class *sound_class;
EXPORT_SYMBOL(sound_class);

MODULE_DESCRIPTION("Core sound module");
MODULE_AUTHOR("Alan Cox");
MODULE_LICENSE("GPL");

static int __init init_soundcore(void)
{
	int rc;

	rc = init_oss_soundcore();
	if (rc)
		return rc;

	sound_class = class_create(THIS_MODULE, "sound");
	if (IS_ERR(sound_class)) {
		cleanup_oss_soundcore();
		return PTR_ERR(sound_class);
	}

	return 0;
}

static void __exit cleanup_soundcore(void)
{
	cleanup_oss_soundcore();
	class_destroy(sound_class);
}

module_init(init_soundcore);
module_exit(cleanup_soundcore);


#ifdef CONFIG_SOUND_OSS_CORE
/*
 *	OSS sound core handling. Breaks out sound functions to submodules
 *	
 *	
 *	Author:		Alan Cox <alan.cox@linux.org>
 *	Author:		Alan Cox <alan.cox@linux.org>
 *
 *
@@ -34,21 +90,17 @@
 *	locking at some point in 2.3.x.
 *	locking at some point in 2.3.x.
 */
 */


#include <linux/module.h>
#include <linux/init.h>
#include <linux/init.h>
#include <linux/slab.h>
#include <linux/slab.h>
#include <linux/smp_lock.h>
#include <linux/smp_lock.h>
#include <linux/types.h>
#include <linux/types.h>
#include <linux/kernel.h>
#include <linux/kernel.h>
#include <linux/fs.h>
#include <linux/sound.h>
#include <linux/sound.h>
#include <linux/major.h>
#include <linux/major.h>
#include <linux/kmod.h>
#include <linux/kmod.h>
#include <linux/device.h>


#define SOUND_STEP 16
#define SOUND_STEP 16



struct sound_unit
struct sound_unit
{
{
	int unit_minor;
	int unit_minor;
@@ -64,9 +116,6 @@ extern int msnd_classic_init(void);
extern int msnd_pinnacle_init(void);
extern int msnd_pinnacle_init(void);
#endif
#endif


struct class *sound_class;
EXPORT_SYMBOL(sound_class);

/*
/*
 *	Low level list operator. Scan the ordered list, find a hole and
 *	Low level list operator. Scan the ordered list, find a hole and
 *	join into it. Called with the lock asserted
 *	join into it. Called with the lock asserted
@@ -523,31 +572,23 @@ int soundcore_open(struct inode *inode, struct file *file)
	return -ENODEV;
	return -ENODEV;
}
}


MODULE_DESCRIPTION("Core sound module");
MODULE_AUTHOR("Alan Cox");
MODULE_LICENSE("GPL");
MODULE_ALIAS_CHARDEV_MAJOR(SOUND_MAJOR);
MODULE_ALIAS_CHARDEV_MAJOR(SOUND_MAJOR);


static void __exit cleanup_soundcore(void)
static void __exit cleanup_oss_soundcore(void)
{
{
	/* We have nothing to really do here - we know the lists must be
	/* We have nothing to really do here - we know the lists must be
	   empty */
	   empty */
	unregister_chrdev(SOUND_MAJOR, "sound");
	unregister_chrdev(SOUND_MAJOR, "sound");
	class_destroy(sound_class);
}
}


static int __init init_soundcore(void)
static int __init init_oss_soundcore(void)
{
{
	if (register_chrdev(SOUND_MAJOR, "sound", &soundcore_fops)==-1) {
	if (register_chrdev(SOUND_MAJOR, "sound", &soundcore_fops)==-1) {
		printk(KERN_ERR "soundcore: sound device already in use.\n");
		printk(KERN_ERR "soundcore: sound device already in use.\n");
		return -EBUSY;
		return -EBUSY;
	}
	}
	sound_class = class_create(THIS_MODULE, "sound");
	if (IS_ERR(sound_class))
		return PTR_ERR(sound_class);


	return 0;
	return 0;
}
}


module_init(init_soundcore);
#endif /* CONFIG_SOUND_OSS_CORE */
module_exit(cleanup_soundcore);