summaryrefslogtreecommitdiffstats
path: root/sound/drivers
diff options
context:
space:
mode:
authorTakashi Iwai <tiwai@suse.de>2017-06-09 09:11:58 -0400
committerTakashi Iwai <tiwai@suse.de>2017-06-12 02:43:33 -0400
commit111b0cdb97d44cfe5dec1338a78ba8aff65c32e2 (patch)
tree41822f2d0878d180aa540a33ce4e79f19d34b10d /sound/drivers
parent8272115578ce02566b4c6bbe45f09d0d55f4a1c6 (diff)
ALSA: seq: Allow the modular sequencer registration
Many drivers bind the sequencer stuff in off-load by another driver module, so that it's loaded only on demand. In the current code, this mechanism doesn't work when the driver is built-in while the sequencer is module. We check with IS_REACHABLE() and enable only when the sequencer is in the same level of build. However, this is basically a overshoot. The binder code (snd-seq-device) is an individual module from the sequencer core (snd-seq), and we just have to make the former a built-in while keeping the latter a module for allowing the scenario like the above. This patch achieves that by rewriting Kconfig slightly. Now, a driver that provides the manual sequencer device binding should select CONFIG_SND_SEQ_DEVICE in a way as select SND_SEQ_DEVICE if SND_SEQUENCER != n Note that the "!=n" is needed here to avoid the influence of the sequencer core is module while the driver is built-in. Also, since rawmidi.o may be linked with snd_seq_device.o when built-in, we have to shuffle the code to make the linker happy. (the kernel linker isn't smart enough yet to handle such a case.) That is, snd_seq_device.c is moved to sound/core from sound/core/seq, as well as Makefile. Last but not least, the patch replaces the code using IS_REACHABLE() with IS_ENABLED(), since now the condition meets always when enabled. Signed-off-by: Takashi Iwai <tiwai@suse.de>
Diffstat (limited to 'sound/drivers')
-rw-r--r--sound/drivers/Kconfig2
-rw-r--r--sound/drivers/opl3/opl3_lib.c2
-rw-r--r--sound/drivers/opl4/opl4_lib.c4
-rw-r--r--sound/drivers/opl4/opl4_local.h2
4 files changed, 6 insertions, 4 deletions
diff --git a/sound/drivers/Kconfig b/sound/drivers/Kconfig
index 0e3dc80a7262..7144cc36e8ae 100644
--- a/sound/drivers/Kconfig
+++ b/sound/drivers/Kconfig
@@ -6,11 +6,13 @@ config SND_OPL3_LIB
6 tristate 6 tristate
7 select SND_TIMER 7 select SND_TIMER
8 select SND_HWDEP 8 select SND_HWDEP
9 select SND_SEQ_DEVICE if SND_SEQUENCER != n
9 10
10config SND_OPL4_LIB 11config SND_OPL4_LIB
11 tristate 12 tristate
12 select SND_TIMER 13 select SND_TIMER
13 select SND_HWDEP 14 select SND_HWDEP
15 select SND_SEQ_DEVICE if SND_SEQUENCER != n
14 16
15# select SEQ stuff to min(SND_SEQUENCER,SND_XXX) 17# select SEQ stuff to min(SND_SEQUENCER,SND_XXX)
16config SND_OPL3_LIB_SEQ 18config SND_OPL3_LIB_SEQ
diff --git a/sound/drivers/opl3/opl3_lib.c b/sound/drivers/opl3/opl3_lib.c
index cd9e9f31720f..d5e5b4657b4b 100644
--- a/sound/drivers/opl3/opl3_lib.c
+++ b/sound/drivers/opl3/opl3_lib.c
@@ -528,7 +528,7 @@ int snd_opl3_hwdep_new(struct snd_opl3 * opl3,
528 528
529 opl3->hwdep = hw; 529 opl3->hwdep = hw;
530 opl3->seq_dev_num = seq_device; 530 opl3->seq_dev_num = seq_device;
531#if IS_REACHABLE(CONFIG_SND_SEQUENCER) 531#if IS_ENABLED(CONFIG_SND_SEQUENCER)
532 if (snd_seq_device_new(card, seq_device, SNDRV_SEQ_DEV_ID_OPL3, 532 if (snd_seq_device_new(card, seq_device, SNDRV_SEQ_DEV_ID_OPL3,
533 sizeof(struct snd_opl3 *), &opl3->seq_dev) >= 0) { 533 sizeof(struct snd_opl3 *), &opl3->seq_dev) >= 0) {
534 strcpy(opl3->seq_dev->name, hw->name); 534 strcpy(opl3->seq_dev->name, hw->name);
diff --git a/sound/drivers/opl4/opl4_lib.c b/sound/drivers/opl4/opl4_lib.c
index 240656e54400..bc345d564f8d 100644
--- a/sound/drivers/opl4/opl4_lib.c
+++ b/sound/drivers/opl4/opl4_lib.c
@@ -153,7 +153,7 @@ static int snd_opl4_detect(struct snd_opl4 *opl4)
153 return 0; 153 return 0;
154} 154}
155 155
156#if IS_REACHABLE(CONFIG_SND_SEQUENCER) 156#if IS_ENABLED(CONFIG_SND_SEQUENCER)
157static void snd_opl4_seq_dev_free(struct snd_seq_device *seq_dev) 157static void snd_opl4_seq_dev_free(struct snd_seq_device *seq_dev)
158{ 158{
159 struct snd_opl4 *opl4 = seq_dev->private_data; 159 struct snd_opl4 *opl4 = seq_dev->private_data;
@@ -249,7 +249,7 @@ int snd_opl4_create(struct snd_card *card,
249 snd_opl4_create_mixer(opl4); 249 snd_opl4_create_mixer(opl4);
250 snd_opl4_create_proc(opl4); 250 snd_opl4_create_proc(opl4);
251 251
252#if IS_REACHABLE(CONFIG_SND_SEQUENCER) 252#if IS_ENABLED(CONFIG_SND_SEQUENCER)
253 opl4->seq_client = -1; 253 opl4->seq_client = -1;
254 if (opl4->hardware < OPL3_HW_OPL4_ML) 254 if (opl4->hardware < OPL3_HW_OPL4_ML)
255 snd_opl4_create_seq_dev(opl4, seq_device); 255 snd_opl4_create_seq_dev(opl4, seq_device);
diff --git a/sound/drivers/opl4/opl4_local.h b/sound/drivers/opl4/opl4_local.h
index d5bac93f8245..a16b4677c1e9 100644
--- a/sound/drivers/opl4/opl4_local.h
+++ b/sound/drivers/opl4/opl4_local.h
@@ -184,7 +184,7 @@ struct snd_opl4 {
184#endif 184#endif
185 struct mutex access_mutex; 185 struct mutex access_mutex;
186 186
187#if IS_REACHABLE(CONFIG_SND_SEQUENCER) 187#if IS_ENABLED(CONFIG_SND_SEQUENCER)
188 int used; 188 int used;
189 189
190 int seq_dev_num; 190 int seq_dev_num;