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>
This commit is contained in:
@@ -1610,7 +1610,7 @@ static int snd_rawmidi_dev_free(struct snd_device *device)
|
||||
return snd_rawmidi_free(rmidi);
|
||||
}
|
||||
|
||||
#if IS_REACHABLE(CONFIG_SND_SEQUENCER)
|
||||
#if IS_ENABLED(CONFIG_SND_SEQUENCER)
|
||||
static void snd_rawmidi_dev_seq_free(struct snd_seq_device *device)
|
||||
{
|
||||
struct snd_rawmidi *rmidi = device->private_data;
|
||||
@@ -1691,7 +1691,7 @@ static int snd_rawmidi_dev_register(struct snd_device *device)
|
||||
}
|
||||
}
|
||||
rmidi->proc_entry = entry;
|
||||
#if IS_REACHABLE(CONFIG_SND_SEQUENCER)
|
||||
#if IS_ENABLED(CONFIG_SND_SEQUENCER)
|
||||
if (!rmidi->ops || !rmidi->ops->dev_register) { /* own registration mechanism */
|
||||
if (snd_seq_device_new(rmidi->card, rmidi->device, SNDRV_SEQ_DEV_ID_MIDISYNTH, 0, &rmidi->seq_dev) >= 0) {
|
||||
rmidi->seq_dev->private_data = rmidi;
|
||||
|
Reference in New Issue
Block a user