ALSA: seq: Allow the tristate build of OSS emulation
authorTakashi Iwai <tiwai@suse.de>
Fri, 9 Jun 2017 12:06:46 +0000 (14:06 +0200)
committerTakashi Iwai <tiwai@suse.de>
Fri, 9 Jun 2017 20:09:45 +0000 (22:09 +0200)
Currently OSS sequencer emulation is tied with ALSA sequencer core,
both are built in the same level; i.e. when CONFIG_SND_SEQUENCER=y,
the OSS sequencer emulation is also always built-in, even though the
functionality can be built as an individual module.

This patch changes the rule and allows users to build snd-seq-oss
module while others are built-in.  Essentially, it's just a few simple
changes in Kconfig and Makefile.  Some driver codes like opl3 need to
convert from the simple ifdef to IS_ENABLED().  But that's all.

You might wonder how about the dependency: right, it can be messy, but
it still works.  Since we rewrote the sequencer binding with the
standard bus, the driver can be bound at any time on demand.  So, the
synthesizer driver module can be loaded individually from the OSS
emulation core before/after it.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
include/sound/emux_synth.h
include/sound/opl3.h
sound/core/Kconfig
sound/core/seq/Makefile
sound/core/seq/oss/Makefile
sound/drivers/opl3/opl3_seq.c
sound/drivers/opl3/opl3_voice.h
sound/isa/sb/emu8000_callback.c
sound/synth/emux/emux.c
sound/synth/emux/emux_effect.c
sound/synth/emux/emux_oss.c

index a0a40b74bf13ed8a954bb2595ccaa73c6237dbdd..19a0cb561ffc1c4921e7ac138fc88850b41d4ba0 100644 (file)
@@ -25,9 +25,7 @@
 #include <sound/seq_device.h>
 #include <sound/soundfont.h>
 #include <sound/seq_midi_emul.h>
-#ifdef CONFIG_SND_SEQUENCER_OSS
 #include <sound/seq_oss.h>
-#endif
 #include <sound/emux_legacy.h>
 #include <sound/seq_virmidi.h>
 
@@ -66,7 +64,7 @@ struct snd_emux_operators {
                       const void __user *data, long count);
        void (*sysex)(struct snd_emux *emu, char *buf, int len, int parsed,
                      struct snd_midi_channel_set *chset);
-#ifdef CONFIG_SND_SEQUENCER_OSS
+#if IS_ENABLED(CONFIG_SND_SEQUENCER_OSS)
        int (*oss_ioctl)(struct snd_emux *emu, int cmd, int p1, int p2);
 #endif
 };
@@ -129,7 +127,7 @@ struct snd_emux {
        struct snd_info_entry *proc;
 #endif
 
-#ifdef CONFIG_SND_SEQUENCER_OSS
+#if IS_ENABLED(CONFIG_SND_SEQUENCER_OSS)
        struct snd_seq_device *oss_synth;
 #endif
 };
@@ -150,7 +148,7 @@ struct snd_emux_port {
 #ifdef SNDRV_EMUX_USE_RAW_EFFECT
        struct snd_emux_effect_table *effect;
 #endif
-#ifdef CONFIG_SND_SEQUENCER_OSS
+#if IS_ENABLED(CONFIG_SND_SEQUENCER_OSS)
        struct snd_seq_oss_arg *oss_arg;
 #endif
 };
index 5a87641c6ae45f9ae688c9e8054320b0cf195ea1..a4a593590cff9f0058aec11958bd9931db816780 100644 (file)
 #include <sound/hwdep.h>
 #include <sound/timer.h>
 #include <sound/seq_midi_emul.h>
-#ifdef CONFIG_SND_SEQUENCER_OSS
 #include <sound/seq_oss.h>
 #include <sound/seq_oss_legacy.h>
-#endif
 #include <sound/seq_device.h>
 #include <sound/asound_fm.h>
 
@@ -330,7 +328,7 @@ struct snd_opl3 {
        struct snd_seq_device *seq_dev; /* sequencer device */
        struct snd_midi_channel_set * chset;
 
-#ifdef CONFIG_SND_SEQUENCER_OSS
+#if IS_ENABLED(CONFIG_SND_SEQUENCER_OSS)
        struct snd_seq_device *oss_seq_dev;     /* OSS sequencer device */
        struct snd_midi_channel_set * oss_chset;
 #endif
index 3a9afc520d4e7661239365edbcb05e515790208c..d64dbee36986132fad548b35d4995cccb6adcc64 100644 (file)
@@ -110,7 +110,7 @@ config SND_PCM_TIMER
          footprint, about 20KB on x86_64 platform.
 
 config SND_SEQUENCER_OSS
-       bool "OSS Sequencer API"
+       tristate "OSS Sequencer API"
        depends on SND_SEQUENCER
        depends on SND_OSSEMUL
        help
index b65fa5a1943b28e6525c890777f29bb1a47d3750..3283b055e5fff744080ac62f3d74dfa83a1e84f3 100644 (file)
@@ -15,10 +15,9 @@ snd-seq-dummy-objs := seq_dummy.o
 snd-seq-virmidi-objs := seq_virmidi.o
 
 obj-$(CONFIG_SND_SEQUENCER) += snd-seq.o snd-seq-device.o
-ifeq ($(CONFIG_SND_SEQUENCER_OSS),y)
-  obj-$(CONFIG_SND_SEQUENCER) += snd-seq-midi-event.o
-  obj-$(CONFIG_SND_SEQUENCER) += oss/
-endif
+obj-$(CONFIG_SND_SEQUENCER_OSS) += snd-seq-midi-event.o
+obj-$(CONFIG_SND_SEQUENCER_OSS) += oss/
+
 obj-$(CONFIG_SND_SEQ_DUMMY) += snd-seq-dummy.o
 
 # Toplevel Module Dependency
index b38406b8463ca95b5e2f844bef9cb1f672def92c..4ea4e3eea6b7982bc4dca5526680b693c9bec46c 100644 (file)
@@ -7,4 +7,4 @@ snd-seq-oss-objs  := seq_oss.o seq_oss_init.o seq_oss_timer.o seq_oss_ioctl.o \
                     seq_oss_event.o seq_oss_rw.o seq_oss_synth.o \
                     seq_oss_midi.o seq_oss_readq.o seq_oss_writeq.o
 
-obj-$(CONFIG_SND_SEQUENCER) += snd-seq-oss.o
+obj-$(CONFIG_SND_SEQUENCER_OSS) += snd-seq-oss.o
index fdae5d7f421ff76c119606ca04e909f58f76be0d..d3e91be8b23a56f9e08e7c5cabbd83fd82ad7c09 100644 (file)
@@ -252,7 +252,7 @@ static int snd_opl3_seq_probe(struct device *_dev)
        spin_lock_init(&opl3->sys_timer_lock);
        opl3->sys_timer_status = 0;
 
-#ifdef CONFIG_SND_SEQUENCER_OSS
+#if IS_ENABLED(CONFIG_SND_SEQUENCER_OSS)
        snd_opl3_init_seq_oss(opl3, name);
 #endif
        return 0;
@@ -267,7 +267,7 @@ static int snd_opl3_seq_remove(struct device *_dev)
        if (opl3 == NULL)
                return -EINVAL;
 
-#ifdef CONFIG_SND_SEQUENCER_OSS
+#if IS_ENABLED(CONFIG_SND_SEQUENCER_OSS)
        snd_opl3_free_seq_oss(opl3);
 #endif
        if (opl3->seq_client >= 0) {
index a371c075ac87b361cf14233a9f96de551dd13264..eaef435e0528da8c8112bf5ccfed99d7b634dc54 100644 (file)
@@ -44,9 +44,12 @@ void snd_opl3_load_drums(struct snd_opl3 *opl3);
 void snd_opl3_drum_switch(struct snd_opl3 *opl3, int note, int on_off, int vel, struct snd_midi_channel *chan);
 
 /* Prototypes for opl3_oss.c */
-#ifdef CONFIG_SND_SEQUENCER_OSS
+#if IS_ENABLED(CONFIG_SND_SEQUENCER_OSS)
 void snd_opl3_init_seq_oss(struct snd_opl3 *opl3, char *name);
 void snd_opl3_free_seq_oss(struct snd_opl3 *opl3);
+#else
+#define snd_opl3_init_seq_oss(opl3, name) /* NOP */
+#define snd_opl3_free_seq_oss(opl3) /* NOP */
 #endif
 
 #endif
index 72a9ac5efb4061360d539fb1ed13300033f13d95..d28d712f99f4266367960814e91cdfab74c3b342 100644 (file)
@@ -36,7 +36,7 @@ static void reset_voice(struct snd_emux *emu, int ch);
 static void terminate_voice(struct snd_emux_voice *vp);
 static void sysex(struct snd_emux *emu, char *buf, int len, int parsed,
                  struct snd_midi_channel_set *chset);
-#ifdef CONFIG_SND_SEQUENCER_OSS
+#if IS_ENABLED(CONFIG_SND_SEQUENCER_OSS)
 static int oss_ioctl(struct snd_emux *emu, int cmd, int p1, int p2);
 #endif
 static int load_fx(struct snd_emux *emu, int type, int mode,
@@ -76,7 +76,7 @@ static struct snd_emux_operators emu8000_ops = {
        .sample_reset = snd_emu8000_sample_reset,
        .load_fx =      load_fx,
        .sysex =        sysex,
-#ifdef CONFIG_SND_SEQUENCER_OSS
+#if IS_ENABLED(CONFIG_SND_SEQUENCER_OSS)
        .oss_ioctl =    oss_ioctl,
 #endif
 };
@@ -477,7 +477,7 @@ sysex(struct snd_emux *emu, char *buf, int len, int parsed, struct snd_midi_chan
 }
 
 
-#ifdef CONFIG_SND_SEQUENCER_OSS
+#if IS_ENABLED(CONFIG_SND_SEQUENCER_OSS)
 /*
  * OSS ioctl callback
  */
index 9312cd8a6fdd11b6c9749e97e0fee3b8ce9f0000..b9981e8c002729e33a255bcb9a55e387d39ba22b 100644 (file)
@@ -47,7 +47,7 @@ int snd_emux_new(struct snd_emux **remu)
        mutex_init(&emu->register_mutex);
 
        emu->client = -1;
-#ifdef CONFIG_SND_SEQUENCER_OSS
+#if IS_ENABLED(CONFIG_SND_SEQUENCER_OSS)
        emu->oss_synth = NULL;
 #endif
        emu->max_voices = 0;
@@ -123,7 +123,7 @@ int snd_emux_register(struct snd_emux *emu, struct snd_card *card, int index, ch
        snd_emux_init_voices(emu);
 
        snd_emux_init_seq(emu, card, index);
-#ifdef CONFIG_SND_SEQUENCER_OSS
+#if IS_ENABLED(CONFIG_SND_SEQUENCER_OSS)
        snd_emux_init_seq_oss(emu);
 #endif
        snd_emux_init_virmidi(emu, card);
@@ -150,7 +150,7 @@ int snd_emux_free(struct snd_emux *emu)
 
        snd_emux_proc_free(emu);
        snd_emux_delete_virmidi(emu);
-#ifdef CONFIG_SND_SEQUENCER_OSS
+#if IS_ENABLED(CONFIG_SND_SEQUENCER_OSS)
        snd_emux_detach_seq_oss(emu);
 #endif
        snd_emux_detach_seq(emu);
index a447218b61602ab6e0a944fe8c43a4cad6e5e977..9ac0bf531b4b2ef1df29e6e034f1a8b5e830f290 100644 (file)
@@ -150,7 +150,7 @@ effect_get_offset(struct snd_midi_channel *chan, int lo, int hi, int mode)
        return addr;
 }
 
-#ifdef CONFIG_SND_SEQUENCER_OSS
+#if IS_ENABLED(CONFIG_SND_SEQUENCER_OSS)
 /* change effects - for OSS sequencer compatibility */
 void
 snd_emux_send_effect_oss(struct snd_emux_port *port,
index 850fab4a8f3b5d4a17f51f9a4521fbd0cf624709..de19e108974a432ec9f796f6c8dc5a1b99dec707 100644 (file)
@@ -23,8 +23,6 @@
  */
 
 
-#ifdef CONFIG_SND_SEQUENCER_OSS
-
 #include <linux/export.h>
 #include <linux/uaccess.h>
 #include <sound/core.h>
@@ -505,5 +503,3 @@ fake_event(struct snd_emux *emu, struct snd_emux_port *port, int ch, int param,
        ev.data.control.value = val;
        snd_emux_event_input(&ev, 0, port, atomic, hop);
 }
-
-#endif /* CONFIG_SND_SEQUENCER_OSS */