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:
Родитель
8272115578
Коммит
111b0cdb97
|
@ -18,8 +18,12 @@ config SND_DMAENGINE_PCM
|
|||
config SND_HWDEP
|
||||
tristate
|
||||
|
||||
config SND_SEQ_DEVICE
|
||||
tristate
|
||||
|
||||
config SND_RAWMIDI
|
||||
tristate
|
||||
select SND_SEQ_DEVICE if SND_SEQUENCER != n
|
||||
|
||||
config SND_COMPRESS_OFFLOAD
|
||||
tristate
|
||||
|
|
|
@ -31,6 +31,7 @@ snd-timer-objs := timer.o
|
|||
snd-hrtimer-objs := hrtimer.o
|
||||
snd-rtctimer-objs := rtctimer.o
|
||||
snd-hwdep-objs := hwdep.o
|
||||
snd-seq-device-objs := seq_device.o
|
||||
|
||||
snd-compress-objs := compress_offload.o
|
||||
|
||||
|
@ -40,6 +41,7 @@ obj-$(CONFIG_SND_TIMER) += snd-timer.o
|
|||
obj-$(CONFIG_SND_HRTIMER) += snd-hrtimer.o
|
||||
obj-$(CONFIG_SND_PCM) += snd-pcm.o
|
||||
obj-$(CONFIG_SND_DMAENGINE_PCM) += snd-pcm-dmaengine.o
|
||||
obj-$(CONFIG_SND_SEQ_DEVICE) += snd-seq-device.o
|
||||
obj-$(CONFIG_SND_RAWMIDI) += snd-rawmidi.o
|
||||
|
||||
obj-$(CONFIG_SND_OSSEMUL) += oss/
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
config SND_SEQUENCER
|
||||
tristate "Sequencer support"
|
||||
select SND_TIMER
|
||||
select SND_SEQ_DEVICE
|
||||
help
|
||||
Say Y or M to enable MIDI sequencer and router support. This
|
||||
feature allows routing and enqueueing of MIDI events. Events
|
||||
|
@ -59,4 +60,3 @@ config SND_SEQ_VIRMIDI
|
|||
tristate
|
||||
|
||||
endif # SND_SEQUENCER
|
||||
|
||||
|
|
|
@ -3,7 +3,6 @@
|
|||
# Copyright (c) 1999 by Jaroslav Kysela <perex@perex.cz>
|
||||
#
|
||||
|
||||
snd-seq-device-objs := seq_device.o
|
||||
snd-seq-objs := seq.o seq_lock.o seq_clientmgr.o seq_memory.o seq_queue.o \
|
||||
seq_fifo.o seq_prioq.o seq_timer.o \
|
||||
seq_system.o seq_ports.o
|
||||
|
@ -14,7 +13,7 @@ snd-seq-midi-event-objs := seq_midi_event.o
|
|||
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
|
||||
obj-$(CONFIG_SND_SEQUENCER) += snd-seq.o
|
||||
obj-$(CONFIG_SND_SEQUENCER_OSS) += oss/
|
||||
|
||||
obj-$(CONFIG_SND_SEQ_DUMMY) += snd-seq-dummy.o
|
||||
|
|
|
@ -6,11 +6,13 @@ config SND_OPL3_LIB
|
|||
tristate
|
||||
select SND_TIMER
|
||||
select SND_HWDEP
|
||||
select SND_SEQ_DEVICE if SND_SEQUENCER != n
|
||||
|
||||
config SND_OPL4_LIB
|
||||
tristate
|
||||
select SND_TIMER
|
||||
select SND_HWDEP
|
||||
select SND_SEQ_DEVICE if SND_SEQUENCER != n
|
||||
|
||||
# select SEQ stuff to min(SND_SEQUENCER,SND_XXX)
|
||||
config SND_OPL3_LIB_SEQ
|
||||
|
|
|
@ -528,7 +528,7 @@ int snd_opl3_hwdep_new(struct snd_opl3 * opl3,
|
|||
|
||||
opl3->hwdep = hw;
|
||||
opl3->seq_dev_num = seq_device;
|
||||
#if IS_REACHABLE(CONFIG_SND_SEQUENCER)
|
||||
#if IS_ENABLED(CONFIG_SND_SEQUENCER)
|
||||
if (snd_seq_device_new(card, seq_device, SNDRV_SEQ_DEV_ID_OPL3,
|
||||
sizeof(struct snd_opl3 *), &opl3->seq_dev) >= 0) {
|
||||
strcpy(opl3->seq_dev->name, hw->name);
|
||||
|
|
|
@ -153,7 +153,7 @@ static int snd_opl4_detect(struct snd_opl4 *opl4)
|
|||
return 0;
|
||||
}
|
||||
|
||||
#if IS_REACHABLE(CONFIG_SND_SEQUENCER)
|
||||
#if IS_ENABLED(CONFIG_SND_SEQUENCER)
|
||||
static void snd_opl4_seq_dev_free(struct snd_seq_device *seq_dev)
|
||||
{
|
||||
struct snd_opl4 *opl4 = seq_dev->private_data;
|
||||
|
@ -249,7 +249,7 @@ int snd_opl4_create(struct snd_card *card,
|
|||
snd_opl4_create_mixer(opl4);
|
||||
snd_opl4_create_proc(opl4);
|
||||
|
||||
#if IS_REACHABLE(CONFIG_SND_SEQUENCER)
|
||||
#if IS_ENABLED(CONFIG_SND_SEQUENCER)
|
||||
opl4->seq_client = -1;
|
||||
if (opl4->hardware < OPL3_HW_OPL4_ML)
|
||||
snd_opl4_create_seq_dev(opl4, seq_device);
|
||||
|
|
|
@ -184,7 +184,7 @@ struct snd_opl4 {
|
|||
#endif
|
||||
struct mutex access_mutex;
|
||||
|
||||
#if IS_REACHABLE(CONFIG_SND_SEQUENCER)
|
||||
#if IS_ENABLED(CONFIG_SND_SEQUENCER)
|
||||
int used;
|
||||
|
||||
int seq_dev_num;
|
||||
|
|
|
@ -377,6 +377,7 @@ config SND_SBAWE
|
|||
select SND_OPL3_LIB
|
||||
select SND_MPU401_UART
|
||||
select SND_SB16_DSP
|
||||
select SND_SEQ_DEVICE if SND_SEQUENCER != n
|
||||
help
|
||||
Say Y here to include support for Sound Blaster AWE soundcards
|
||||
(including the Plug and Play version).
|
||||
|
|
|
@ -1138,7 +1138,7 @@ snd_emu8000_new(struct snd_card *card, int index, long port, int seq_ports,
|
|||
snd_emu8000_free(hw);
|
||||
return err;
|
||||
}
|
||||
#if IS_REACHABLE(CONFIG_SND_SEQUENCER)
|
||||
#if IS_ENABLED(CONFIG_SND_SEQUENCER)
|
||||
if (snd_seq_device_new(card, index, SNDRV_SEQ_DEV_ID_EMU8000,
|
||||
sizeof(struct snd_emu8000*), &awe) >= 0) {
|
||||
strcpy(awe->name, "EMU-8000");
|
||||
|
|
|
@ -62,7 +62,7 @@ MODULE_SUPPORTED_DEVICE("{{Creative Labs,SB AWE 32},"
|
|||
#define SNDRV_DEBUG_IRQ
|
||||
#endif
|
||||
|
||||
#if defined(SNDRV_SBAWE) && IS_REACHABLE(CONFIG_SND_SEQUENCER)
|
||||
#if defined(SNDRV_SBAWE) && IS_ENABLED(CONFIG_SND_SEQUENCER)
|
||||
#define SNDRV_SBAWE_EMU8000
|
||||
#endif
|
||||
|
||||
|
|
|
@ -465,6 +465,7 @@ config SND_EMU10K1
|
|||
select SND_RAWMIDI
|
||||
select SND_AC97_CODEC
|
||||
select SND_TIMER
|
||||
select SND_SEQ_DEVICE if SND_SEQUENCER != n
|
||||
depends on ZONE_DMA
|
||||
help
|
||||
Say Y to include support for Sound Blaster PCI 512, Live!,
|
||||
|
|
|
@ -37,7 +37,7 @@ MODULE_LICENSE("GPL");
|
|||
MODULE_SUPPORTED_DEVICE("{{Creative Labs,SB Live!/PCI512/E-mu APS},"
|
||||
"{Creative Labs,SB Audigy}}");
|
||||
|
||||
#if IS_REACHABLE(CONFIG_SND_SEQUENCER)
|
||||
#if IS_ENABLED(CONFIG_SND_SEQUENCER)
|
||||
#define ENABLE_SYNTH
|
||||
#include <sound/emu10k1_synth.h>
|
||||
#endif
|
||||
|
|
Загрузка…
Ссылка в новой задаче