forked from torvalds/linux
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
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: Tejun Heo <[email protected]> Signed-off-by: Takashi Iwai <[email protected]> Signed-off-by: Jaroslav Kysela <[email protected]>
- Loading branch information
Showing
5 changed files
with
71 additions
and
19 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -42,3 +42,4 @@ config DMASOUND_Q40 | |
|
||
config DMASOUND | ||
tristate | ||
select SOUND_OSS_CORE |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,5 +1,61 @@ | ||
/* | ||
* 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 <[email protected]> | ||
* | ||
|
@@ -34,21 +90,17 @@ | |
* locking at some point in 2.3.x. | ||
*/ | ||
|
||
#include <linux/module.h> | ||
#include <linux/init.h> | ||
#include <linux/slab.h> | ||
#include <linux/smp_lock.h> | ||
#include <linux/types.h> | ||
#include <linux/kernel.h> | ||
#include <linux/fs.h> | ||
#include <linux/sound.h> | ||
#include <linux/major.h> | ||
#include <linux/kmod.h> | ||
#include <linux/device.h> | ||
|
||
#define SOUND_STEP 16 | ||
|
||
|
||
struct sound_unit | ||
{ | ||
int unit_minor; | ||
|
@@ -64,9 +116,6 @@ extern int msnd_classic_init(void); | |
extern int msnd_pinnacle_init(void); | ||
#endif | ||
|
||
struct class *sound_class; | ||
EXPORT_SYMBOL(sound_class); | ||
|
||
/* | ||
* Low level list operator. Scan the ordered list, find a hole and | ||
* join into it. Called with the lock asserted | ||
|
@@ -523,31 +572,23 @@ int soundcore_open(struct inode *inode, struct file *file) | |
return -ENODEV; | ||
} | ||
|
||
MODULE_DESCRIPTION("Core sound module"); | ||
MODULE_AUTHOR("Alan Cox"); | ||
MODULE_LICENSE("GPL"); | ||
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 | ||
empty */ | ||
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) { | ||
printk(KERN_ERR "soundcore: sound device already in use.\n"); | ||
return -EBUSY; | ||
} | ||
sound_class = class_create(THIS_MODULE, "sound"); | ||
if (IS_ERR(sound_class)) | ||
return PTR_ERR(sound_class); | ||
|
||
return 0; | ||
} | ||
|
||
module_init(init_soundcore); | ||
module_exit(cleanup_soundcore); | ||
#endif /* CONFIG_SOUND_OSS_CORE */ |