ALSA: seq: Allow the modular sequencer registration
authorTakashi Iwai <tiwai@suse.de>
Fri, 9 Jun 2017 13:11:58 +0000 (15:11 +0200)
committerTakashi Iwai <tiwai@suse.de>
Mon, 12 Jun 2017 06:43:33 +0000 (08:43 +0200)
commit111b0cdb97d44cfe5dec1338a78ba8aff65c32e2
tree41822f2d0878d180aa540a33ce4e79f19d34b10d
parent8272115578ce02566b4c6bbe45f09d0d55f4a1c6
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>
16 files changed:
sound/core/Kconfig
sound/core/Makefile
sound/core/rawmidi.c
sound/core/seq/Kconfig
sound/core/seq/Makefile
sound/core/seq/seq_device.c [deleted file]
sound/core/seq_device.c [new file with mode: 0644]
sound/drivers/Kconfig
sound/drivers/opl3/opl3_lib.c
sound/drivers/opl4/opl4_lib.c
sound/drivers/opl4/opl4_local.h
sound/isa/Kconfig
sound/isa/sb/emu8000.c
sound/isa/sb/sb16.c
sound/pci/Kconfig
sound/pci/emu10k1/emu10k1.c