Commit 7829d0ec authored by Daniel Mack's avatar Daniel Mack Committed by Jaroslav Kysela

[ALSA] usb-caiaq - add support for Kore controller 2

Added support for Native Instrument's Kore controller 2. This device has
no audio but MIDI, input devices and ALSA controllers only.
Signed-off-by: default avatarDaniel Mack <daniel@caiaq.de>
Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
Signed-off-by: default avatarJaroslav Kysela <perex@perex.cz>
parent 389619f1
...@@ -42,6 +42,7 @@ config SND_USB_CAIAQ ...@@ -42,6 +42,7 @@ config SND_USB_CAIAQ
* Native Instruments RigKontrol2 * Native Instruments RigKontrol2
* Native Instruments RigKontrol3 * Native Instruments RigKontrol3
* Native Instruments Kore Controller * Native Instruments Kore Controller
* Native Instruments Kore Controller 2
* Native Instruments Audio Kontrol 1 * Native Instruments Audio Kontrol 1
* Native Instruments Audio 8 DJ * Native Instruments Audio 8 DJ
...@@ -59,6 +60,7 @@ config SND_USB_CAIAQ_INPUT ...@@ -59,6 +60,7 @@ config SND_USB_CAIAQ_INPUT
* Native Instruments RigKontrol2 * Native Instruments RigKontrol2
* Native Instruments RigKontrol3 * Native Instruments RigKontrol3
* Native Instruments Kore Controller * Native Instruments Kore Controller
* Native Instruments Kore Controller 2
* Native Instruments Audio Kontrol 1 * Native Instruments Audio Kontrol 1
endmenu endmenu
......
...@@ -288,6 +288,7 @@ int __devinit snd_usb_caiaq_control_init(struct snd_usb_caiaqdev *dev) ...@@ -288,6 +288,7 @@ int __devinit snd_usb_caiaq_control_init(struct snd_usb_caiaqdev *dev)
break; break;
case USB_ID(USB_VID_NATIVEINSTRUMENTS, USB_PID_KORECONTROLLER): case USB_ID(USB_VID_NATIVEINSTRUMENTS, USB_PID_KORECONTROLLER):
case USB_ID(USB_VID_NATIVEINSTRUMENTS, USB_PID_KORECONTROLLER2):
for (i = 0; i < ARRAY_SIZE(kore_controller); i++) { for (i = 0; i < ARRAY_SIZE(kore_controller); i++) {
struct caiaq_controller *c = kore_controller + i; struct caiaq_controller *c = kore_controller + i;
kcontrol_template.name = c->name; kcontrol_template.name = c->name;
......
...@@ -43,11 +43,12 @@ ...@@ -43,11 +43,12 @@
#endif #endif
MODULE_AUTHOR("Daniel Mack <daniel@caiaq.de>"); MODULE_AUTHOR("Daniel Mack <daniel@caiaq.de>");
MODULE_DESCRIPTION("caiaq USB audio, version 1.3.0"); MODULE_DESCRIPTION("caiaq USB audio, version 1.3.1");
MODULE_LICENSE("GPL"); MODULE_LICENSE("GPL");
MODULE_SUPPORTED_DEVICE("{{Native Instruments, RigKontrol2}," MODULE_SUPPORTED_DEVICE("{{Native Instruments, RigKontrol2},"
"{Native Instruments, RigKontrol3}," "{Native Instruments, RigKontrol3},"
"{Native Instruments, Kore Controller}," "{Native Instruments, Kore Controller},"
"{Native Instruments, Kore Controller 2},"
"{Native Instruments, Audio Kontrol 1}" "{Native Instruments, Audio Kontrol 1}"
"{Native Instruments, Audio 8 DJ}}"); "{Native Instruments, Audio 8 DJ}}");
...@@ -95,6 +96,11 @@ static struct usb_device_id snd_usb_id_table[] = { ...@@ -95,6 +96,11 @@ static struct usb_device_id snd_usb_id_table[] = {
.idVendor = USB_VID_NATIVEINSTRUMENTS, .idVendor = USB_VID_NATIVEINSTRUMENTS,
.idProduct = USB_PID_KORECONTROLLER .idProduct = USB_PID_KORECONTROLLER
}, },
{
.match_flags = USB_DEVICE_ID_MATCH_DEVICE,
.idVendor = USB_VID_NATIVEINSTRUMENTS,
.idProduct = USB_PID_KORECONTROLLER2
},
{ {
.match_flags = USB_DEVICE_ID_MATCH_DEVICE, .match_flags = USB_DEVICE_ID_MATCH_DEVICE,
.idVendor = USB_VID_NATIVEINSTRUMENTS, .idVendor = USB_VID_NATIVEINSTRUMENTS,
...@@ -291,13 +297,21 @@ static void setup_card(struct snd_usb_caiaqdev *dev) ...@@ -291,13 +297,21 @@ static void setup_card(struct snd_usb_caiaqdev *dev)
break; break;
} }
ret = snd_usb_caiaq_audio_init(dev); if (dev->spec.num_analog_audio_out +
if (ret < 0) dev->spec.num_analog_audio_in +
log("Unable to set up audio system (ret=%d)\n", ret); dev->spec.num_digital_audio_out +
dev->spec.num_digital_audio_in > 0) {
ret = snd_usb_caiaq_audio_init(dev);
if (ret < 0)
log("Unable to set up audio system (ret=%d)\n", ret);
}
ret = snd_usb_caiaq_midi_init(dev); if (dev->spec.num_midi_in +
if (ret < 0) dev->spec.num_midi_out > 0) {
log("Unable to set up MIDI system (ret=%d)\n", ret); ret = snd_usb_caiaq_midi_init(dev);
if (ret < 0)
log("Unable to set up MIDI system (ret=%d)\n", ret);
}
#ifdef CONFIG_SND_USB_CAIAQ_INPUT #ifdef CONFIG_SND_USB_CAIAQ_INPUT
ret = snd_usb_caiaq_input_init(dev); ret = snd_usb_caiaq_input_init(dev);
......
...@@ -8,6 +8,7 @@ ...@@ -8,6 +8,7 @@
#define USB_PID_RIGKONTROL2 0x1969 #define USB_PID_RIGKONTROL2 0x1969
#define USB_PID_RIGKONTROL3 0x1940 #define USB_PID_RIGKONTROL3 0x1940
#define USB_PID_KORECONTROLLER 0x4711 #define USB_PID_KORECONTROLLER 0x4711
#define USB_PID_KORECONTROLLER2 0x4712
#define USB_PID_AK1 0x0815 #define USB_PID_AK1 0x0815
#define USB_PID_AUDIO8DJ 0x1978 #define USB_PID_AUDIO8DJ 0x1978
......
...@@ -162,6 +162,7 @@ static void snd_caiaq_input_read_analog(struct snd_usb_caiaqdev *dev, ...@@ -162,6 +162,7 @@ static void snd_caiaq_input_read_analog(struct snd_usb_caiaqdev *dev,
input_sync(input_dev); input_sync(input_dev);
break; break;
case USB_ID(USB_VID_NATIVEINSTRUMENTS, USB_PID_KORECONTROLLER): case USB_ID(USB_VID_NATIVEINSTRUMENTS, USB_PID_KORECONTROLLER):
case USB_ID(USB_VID_NATIVEINSTRUMENTS, USB_PID_KORECONTROLLER2):
input_report_abs(input_dev, ABS_X, (buf[0] << 8) | buf[1]); input_report_abs(input_dev, ABS_X, (buf[0] << 8) | buf[1]);
input_report_abs(input_dev, ABS_Y, (buf[2] << 8) | buf[3]); input_report_abs(input_dev, ABS_Y, (buf[2] << 8) | buf[3]);
input_report_abs(input_dev, ABS_Z, (buf[4] << 8) | buf[5]); input_report_abs(input_dev, ABS_Z, (buf[4] << 8) | buf[5]);
...@@ -183,6 +184,7 @@ static void snd_caiaq_input_read_erp(struct snd_usb_caiaqdev *dev, ...@@ -183,6 +184,7 @@ static void snd_caiaq_input_read_erp(struct snd_usb_caiaqdev *dev,
input_sync(input_dev); input_sync(input_dev);
break; break;
case USB_ID(USB_VID_NATIVEINSTRUMENTS, USB_PID_KORECONTROLLER): case USB_ID(USB_VID_NATIVEINSTRUMENTS, USB_PID_KORECONTROLLER):
case USB_ID(USB_VID_NATIVEINSTRUMENTS, USB_PID_KORECONTROLLER2):
i = decode_erp(buf[7], buf[5]); i = decode_erp(buf[7], buf[5]);
input_report_abs(input_dev, ABS_HAT0X, i); input_report_abs(input_dev, ABS_HAT0X, i);
i = decode_erp(buf[12], buf[14]); i = decode_erp(buf[12], buf[14]);
...@@ -223,7 +225,9 @@ static void snd_caiaq_input_read_io(struct snd_usb_caiaqdev *dev, ...@@ -223,7 +225,9 @@ static void snd_caiaq_input_read_io(struct snd_usb_caiaqdev *dev,
buf[i / 8] & (1 << (i % 8))); buf[i / 8] & (1 << (i % 8)));
if (dev->chip.usb_id == if (dev->chip.usb_id ==
USB_ID(USB_VID_NATIVEINSTRUMENTS, USB_PID_KORECONTROLLER)) USB_ID(USB_VID_NATIVEINSTRUMENTS, USB_PID_KORECONTROLLER) ||
dev->chip.usb_id ==
USB_ID(USB_VID_NATIVEINSTRUMENTS, USB_PID_KORECONTROLLER2))
input_report_abs(dev->input_dev, ABS_MISC, 255 - buf[4]); input_report_abs(dev->input_dev, ABS_MISC, 255 - buf[4]);
input_sync(input_dev); input_sync(input_dev);
...@@ -302,6 +306,7 @@ int snd_usb_caiaq_input_init(struct snd_usb_caiaqdev *dev) ...@@ -302,6 +306,7 @@ int snd_usb_caiaq_input_init(struct snd_usb_caiaqdev *dev)
snd_usb_caiaq_set_auto_msg(dev, 1, 0, 5); snd_usb_caiaq_set_auto_msg(dev, 1, 0, 5);
break; break;
case USB_ID(USB_VID_NATIVEINSTRUMENTS, USB_PID_KORECONTROLLER): case USB_ID(USB_VID_NATIVEINSTRUMENTS, USB_PID_KORECONTROLLER):
case USB_ID(USB_VID_NATIVEINSTRUMENTS, USB_PID_KORECONTROLLER2):
input->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS); input->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS);
input->absbit[0] = BIT_MASK(ABS_HAT0X) | BIT_MASK(ABS_HAT0Y) | input->absbit[0] = BIT_MASK(ABS_HAT0X) | BIT_MASK(ABS_HAT0Y) |
BIT_MASK(ABS_HAT1X) | BIT_MASK(ABS_HAT1Y) | BIT_MASK(ABS_HAT1X) | BIT_MASK(ABS_HAT1Y) |
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment