ALSA: oxfw: add scs1x layer
authorTakashi Sakamoto <o-takashi@sakamocchi.jp>
Tue, 22 Dec 2015 00:15:39 +0000 (09:15 +0900)
committerTakashi Iwai <tiwai@suse.de>
Tue, 22 Dec 2015 10:51:27 +0000 (11:51 +0100)
Stanton Controllers and Systems 1 (SCS.1) series is supported by ALSA
scs1x driver. This driver just supports MIDI functionality. On the other
hand, models in this series are based on OXFW971 and ALSA OXFW driver can
support them.

SCS.1 series has MIDI functionality to control its surface state such as
LED lighting. When operating physical knobs and faders, the models
generate MIDI messages. These MIDI messages are transferred by asynchronous
transactions. These transactions are really model-specific and ALSA OXFW
driver requires the functionality so as scs1x module implements.

This commit adds scs1x layer as a preparation to merge scs1x driver to
oxfw driver.

Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/firewire/oxfw/Makefile
sound/firewire/oxfw/oxfw-scs1x.c [new file with mode: 0644]
sound/firewire/oxfw/oxfw.c
sound/firewire/oxfw/oxfw.h

index 4e54ba9f4394bfcdfc45bce347010df9f2860cd5..b474da7c6a1fc4d21e92611e4778a8507b3a5f29 100644 (file)
@@ -1,3 +1,3 @@
 snd-oxfw-objs := oxfw-command.o oxfw-stream.o oxfw-pcm.o oxfw-proc.o \
-                oxfw-midi.o oxfw-hwdep.o oxfw-spkr.o oxfw.o
+                oxfw-midi.o oxfw-hwdep.o oxfw-spkr.o oxfw-scs1x.o oxfw.o
 obj-$(CONFIG_SND_OXFW) += snd-oxfw.o
diff --git a/sound/firewire/oxfw/oxfw-scs1x.c b/sound/firewire/oxfw/oxfw-scs1x.c
new file mode 100644 (file)
index 0000000..34db0d0
--- /dev/null
@@ -0,0 +1,26 @@
+/*
+ * oxfw-scs1x.c - a part of driver for OXFW970/971 based devices
+ *
+ * Copyright (c) Clemens Ladisch <clemens@ladisch.de>
+ * Copyright (c) 2015 Takashi Sakamoto <o-takashi@sakamocchi.jp>
+ *
+ * Licensed under the terms of the GNU General Public License, version 2.
+ */
+
+#include "oxfw.h"
+
+int snd_oxfw_scs1x_add(struct snd_oxfw *oxfw)
+{
+       struct snd_rawmidi *rmidi;
+       int err;
+
+       /* Use unique name for backward compatibility to scs1x module. */
+       err = snd_rawmidi_new(oxfw->card, "SCS.1x", 0, 0, 0, &rmidi);
+       if (err < 0)
+               return err;
+
+       snprintf(rmidi->name, sizeof(rmidi->name),
+                "%s MIDI", oxfw->card->shortname);
+
+       return err;
+}
index 96fbb784f0867bfca375ab41faffe5fdc665d4a6..b20e496e220103bdc92195e0ceeb55370a277562 100644 (file)
@@ -216,11 +216,11 @@ static int oxfw_probe(struct fw_unit *unit,
        if (err < 0)
                goto error;
 
-       err = detect_quirks(oxfw);
+       err = name_card(oxfw);
        if (err < 0)
                goto error;
 
-       err = name_card(oxfw);
+       err = detect_quirks(oxfw);
        if (err < 0)
                goto error;
 
index 1c9844a4649d7784ec0c921f0187470f42e7ad89..cbf00eee678cf6c8768f0d97c9afb0eea8b751d4 100644 (file)
@@ -134,3 +134,4 @@ int snd_oxfw_create_midi(struct snd_oxfw *oxfw);
 int snd_oxfw_create_hwdep(struct snd_oxfw *oxfw);
 
 int snd_oxfw_add_spkr(struct snd_oxfw *oxfw, bool is_lacie);
+int snd_oxfw_scs1x_add(struct snd_oxfw *oxfw);