[alsa-devel] [PATCH RESEND] sound: make OSS sound core optional
Takashi Iwai
tiwai at suse.de
Wed Aug 27 12:04:09 CEST 2008
At Wed, 27 Aug 2008 11:57:06 +0200,
Tejun Heo wrote:
>
> Takashi Iwai wrote:
> >> SOUND_OSS_CORE should be turned on if ALSA OSS emul is turned on or
> >> arch-um hostsound is turned on, both of which can be enabled regardless
> >> of SOUND_PRIME, no?
> >
> > Yes, sorry, I didn't cite clearly. I meant only the last line.
> > sound/oss/dmasound/Kconfig is included and evaluated outside the block
> > "if SOUND_PRIME". Thus, CONFIG_SOUND_OSS_CORE won't be enabled for
> > drivers in sound/oss/dmasound.
>
> Ah.. okay, dmasound also requires SOUND_OSS_CORE but not in
> SOUND_PRIME. I see.
>
> > My suggestion is to move that line source sound/oss/dmasound/Kconfig
> > into the "if SOUND_PRIME" block first, then apply your patch.
>
> That would pull in sound_firmware. Most likely no big deal but
> still...
Ouch, another pain.
sound_firmware.c should be removed and the relevant code should use
request_firmware()...
> How about just adding select SOUND_OSS_CORE to DMASOUND for
> now?
Looks good to me.
Acked-by: Takashi Iwai <tiwai at suse.de>
If no objection comes up, I'll merge it to sound tree later.
thanks,
Takashi
> Thanks.
>
> Subject: [PATCH] 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: Tejun Heo <tj at kernel.org>
> ---
> arch/um/Kconfig.char | 4 ++
> sound/Kconfig | 5 ++
> sound/core/Kconfig | 1
> sound/oss/dmasound/Kconfig | 1
> sound/sound_core.c | 79 ++++++++++++++++++++++++++++++++++-----------
> 5 files changed, 71 insertions(+), 19 deletions(-)
>
> Index: work/sound/Kconfig
> ===================================================================
> --- work.orig/sound/Kconfig
> +++ work/sound/Kconfig
> @@ -28,6 +28,10 @@ menuconfig SOUND
>
> if SOUND
>
> +config SOUND_OSS_CORE
> + bool
> + default n
> +
> source "sound/oss/dmasound/Kconfig"
>
> if !M68K
> @@ -80,6 +84,7 @@ endif # SND
>
> menuconfig SOUND_PRIME
> tristate "Open Sound System (DEPRECATED)"
> + select SOUND_OSS_CORE
> help
> Say 'Y' or 'M' to enable Open Sound System drivers.
>
> Index: work/sound/core/Kconfig
> ===================================================================
> --- work.orig/sound/core/Kconfig
> +++ work/sound/core/Kconfig
> @@ -38,6 +38,7 @@ config SND_SEQ_DUMMY
> will be called snd-seq-dummy.
>
> config SND_OSSEMUL
> + select SOUND_OSS_CORE
> bool
>
> config SND_MIXER_OSS
> Index: work/sound/sound_core.c
> ===================================================================
> --- work.orig/sound/sound_core.c
> +++ work/sound/sound_core.c
> @@ -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 <alan.cox at linux.org>
> *
> @@ -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,
> 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 */
> Index: work/arch/um/Kconfig.char
> ===================================================================
> --- work.orig/arch/um/Kconfig.char
> +++ work/arch/um/Kconfig.char
> @@ -203,6 +203,10 @@ config SOUND
> tristate
> default UML_SOUND
>
> +config SOUND_OSS_CORE
> + bool
> + default UML_SOUND
> +
> config HOSTAUDIO
> tristate
> default UML_SOUND
> Index: work/sound/oss/dmasound/Kconfig
> ===================================================================
> --- work.orig/sound/oss/dmasound/Kconfig
> +++ work/sound/oss/dmasound/Kconfig
> @@ -42,3 +42,4 @@ config DMASOUND_Q40
>
> config DMASOUND
> tristate
> + select SOUND_OSS_CORE
>
More information about the Alsa-devel
mailing list