aboutsummaryrefslogtreecommitdiffstats
path: root/include/sound/seq_kernel.h
diff options
context:
space:
mode:
authorTakashi Iwai <tiwai@suse.de>2014-10-15 14:06:25 +0200
committerTakashi Iwai <tiwai@suse.de>2014-10-18 20:25:12 +0200
commit68ab61084de3220e2fb0a698c890ba91decddc85 (patch)
tree3a39c406c22fc8a5646c27e6a27994041ef62bc0 /include/sound/seq_kernel.h
parentALSA: seq: Use atomic ops for autoload refcount (diff)
downloadlinux-dev-68ab61084de3220e2fb0a698c890ba91decddc85.tar.xz
linux-dev-68ab61084de3220e2fb0a698c890ba91decddc85.zip
ALSA: seq: bind seq driver automatically
Currently the sequencer module binding is performed independently from the card module itself. The reason behind it is to keep the sequencer stuff optional and allow the system running without it (e.g. for using PCM or rawmidi only). This works in most cases, but a remaining problem is that the binding isn't done automatically when a new driver module is probed. Typically this becomes visible when a hotplug driver like usb audio is used. This patch tries to address this and other potential issues. First, the seq-binder (seq_device.c) tries to load a missing driver module at creating a new device object. This is done asynchronously in a workq for avoiding the deadlock (modprobe call in module init path). This action, however, should be enabled only when the sequencer stuff was already initialized, i.e. snd-seq module was already loaded. For that, a new function, snd_seq_autoload_init() is introduced here; this clears the blocking of autoloading, and also tries to load all pending driver modules. Reported-by: Adam Goode <agoode@chromium.org> Signed-off-by: Takashi Iwai <tiwai@suse.de>
Diffstat (limited to 'include/sound/seq_kernel.h')
-rw-r--r--include/sound/seq_kernel.h4
1 files changed, 4 insertions, 0 deletions
diff --git a/include/sound/seq_kernel.h b/include/sound/seq_kernel.h
index 2398521f0998..eea5400fe373 100644
--- a/include/sound/seq_kernel.h
+++ b/include/sound/seq_kernel.h
@@ -108,9 +108,13 @@ int snd_seq_event_port_detach(int client, int port);
#ifdef CONFIG_MODULES
void snd_seq_autoload_lock(void);
void snd_seq_autoload_unlock(void);
+void snd_seq_autoload_init(void);
+#define snd_seq_autoload_exit() snd_seq_autoload_lock()
#else
#define snd_seq_autoload_lock()
#define snd_seq_autoload_unlock()
+#define snd_seq_autoload_init()
+#define snd_seq_autoload_exit()
#endif
#endif /* __SOUND_SEQ_KERNEL_H */