1 // SPDX-License-Identifier: GPL-2.0-or-later 2 /* 3 * Copyright (c) 2006,2007 Daniel Mack, Tim Ruetz 4 */ 5 6 #include <linux/device.h> 7 #include <linux/gfp.h> 8 #include <linux/init.h> 9 #include <linux/usb.h> 10 #include <linux/usb/input.h> 11 #include <sound/core.h> 12 #include <sound/pcm.h> 13 14 #include "device.h" 15 #include "input.h" 16 17 static const unsigned short keycode_ak1[] = { KEY_C, KEY_B, KEY_A }; 18 static const unsigned short keycode_rk2[] = { KEY_1, KEY_2, KEY_3, KEY_4, 19 KEY_5, KEY_6, KEY_7 }; 20 static const unsigned short keycode_rk3[] = { KEY_1, KEY_2, KEY_3, KEY_4, 21 KEY_5, KEY_6, KEY_7, KEY_8, KEY_9 }; 22 23 static const unsigned short keycode_kore[] = { 24 KEY_FN_F1, /* "menu" */ 25 KEY_FN_F7, /* "lcd backlight */ 26 KEY_FN_F2, /* "control" */ 27 KEY_FN_F3, /* "enter" */ 28 KEY_FN_F4, /* "view" */ 29 KEY_FN_F5, /* "esc" */ 30 KEY_FN_F6, /* "sound" */ 31 KEY_FN_F8, /* array spacer, never triggered. */ 32 KEY_RIGHT, 33 KEY_DOWN, 34 KEY_UP, 35 KEY_LEFT, 36 KEY_SOUND, /* "listen" */ 37 KEY_RECORD, 38 KEY_PLAYPAUSE, 39 KEY_STOP, 40 BTN_4, /* 8 softkeys */ 41 BTN_3, 42 BTN_2, 43 BTN_1, 44 BTN_5, 45 BTN_6, 46 BTN_7, 47 BTN_8, 48 KEY_BRL_DOT4, /* touch sensitive knobs (Kore 2 order) */ 49 KEY_BRL_DOT3, 50 KEY_BRL_DOT2, 51 KEY_BRL_DOT1, 52 KEY_BRL_DOT8, 53 KEY_BRL_DOT7, 54 KEY_BRL_DOT6, 55 KEY_BRL_DOT5 56 }; 57 58 /* index of the first touch sensor in keycode_kore */ 59 #define KORE_TOUCH_KEYS 24 60 61 /* the first Kore controller reports its touch sensors in this order */ 62 static const unsigned short keycode_kore1_touch[] = { 63 KEY_BRL_DOT4, 64 KEY_BRL_DOT8, 65 KEY_BRL_DOT3, 66 KEY_BRL_DOT7, 67 KEY_BRL_DOT2, 68 KEY_BRL_DOT6, 69 KEY_BRL_DOT1, 70 KEY_BRL_DOT5 71 }; 72 73 #define MASCHINE_BUTTONS (42) 74 #define MASCHINE_BUTTON(X) ((X) + BTN_MISC) 75 #define MASCHINE_PADS (16) 76 #define MASCHINE_PAD(X) ((X) + ABS_PRESSURE) 77 78 static const unsigned short keycode_maschine[] = { 79 MASCHINE_BUTTON(40), /* mute */ 80 MASCHINE_BUTTON(39), /* solo */ 81 MASCHINE_BUTTON(38), /* select */ 82 MASCHINE_BUTTON(37), /* duplicate */ 83 MASCHINE_BUTTON(36), /* navigate */ 84 MASCHINE_BUTTON(35), /* pad mode */ 85 MASCHINE_BUTTON(34), /* pattern */ 86 MASCHINE_BUTTON(33), /* scene */ 87 KEY_RESERVED, /* spacer */ 88 89 MASCHINE_BUTTON(30), /* rec */ 90 MASCHINE_BUTTON(31), /* erase */ 91 MASCHINE_BUTTON(32), /* shift */ 92 MASCHINE_BUTTON(28), /* grid */ 93 MASCHINE_BUTTON(27), /* > */ 94 MASCHINE_BUTTON(26), /* < */ 95 MASCHINE_BUTTON(25), /* restart */ 96 97 MASCHINE_BUTTON(21), /* E */ 98 MASCHINE_BUTTON(22), /* F */ 99 MASCHINE_BUTTON(23), /* G */ 100 MASCHINE_BUTTON(24), /* H */ 101 MASCHINE_BUTTON(20), /* D */ 102 MASCHINE_BUTTON(19), /* C */ 103 MASCHINE_BUTTON(18), /* B */ 104 MASCHINE_BUTTON(17), /* A */ 105 106 MASCHINE_BUTTON(0), /* control */ 107 MASCHINE_BUTTON(2), /* browse */ 108 MASCHINE_BUTTON(4), /* < */ 109 MASCHINE_BUTTON(6), /* snap */ 110 MASCHINE_BUTTON(7), /* autowrite */ 111 MASCHINE_BUTTON(5), /* > */ 112 MASCHINE_BUTTON(3), /* sampling */ 113 MASCHINE_BUTTON(1), /* step */ 114 115 MASCHINE_BUTTON(15), /* 8 softkeys */ 116 MASCHINE_BUTTON(14), 117 MASCHINE_BUTTON(13), 118 MASCHINE_BUTTON(12), 119 MASCHINE_BUTTON(11), 120 MASCHINE_BUTTON(10), 121 MASCHINE_BUTTON(9), 122 MASCHINE_BUTTON(8), 123 124 MASCHINE_BUTTON(16), /* note repeat */ 125 MASCHINE_BUTTON(29) /* play */ 126 }; 127 128 #define KONTROLX1_INPUTS (40) 129 #define KONTROLS4_BUTTONS (12 * 8) 130 #define KONTROLS4_AXIS (46) 131 132 #define KONTROLS4_BUTTON(X) ((X) + BTN_MISC) 133 #define KONTROLS4_ABS(X) ((X) + ABS_HAT0X) 134 135 #define DEG90 (range / 2) 136 #define DEG180 (range) 137 #define DEG270 (DEG90 + DEG180) 138 #define DEG360 (DEG180 * 2) 139 #define HIGH_PEAK (268) 140 #define LOW_PEAK (-7) 141 142 /* some of these devices have endless rotation potentiometers 143 * built in which use two tapers, 90 degrees phase shifted. 144 * this algorithm decodes them to one single value, ranging 145 * from 0 to 999 */ 146 static unsigned int decode_erp(unsigned char a, unsigned char b) 147 { 148 int weight_a, weight_b; 149 int pos_a, pos_b; 150 int ret; 151 int range = HIGH_PEAK - LOW_PEAK; 152 int mid_value = (HIGH_PEAK + LOW_PEAK) / 2; 153 154 weight_b = abs(mid_value - a) - (range / 2 - 100) / 2; 155 156 if (weight_b < 0) 157 weight_b = 0; 158 159 if (weight_b > 100) 160 weight_b = 100; 161 162 weight_a = 100 - weight_b; 163 164 if (a < mid_value) { 165 /* 0..90 and 270..360 degrees */ 166 pos_b = b - LOW_PEAK + DEG270; 167 if (pos_b >= DEG360) 168 pos_b -= DEG360; 169 } else 170 /* 90..270 degrees */ 171 pos_b = HIGH_PEAK - b + DEG90; 172 173 174 if (b > mid_value) 175 /* 0..180 degrees */ 176 pos_a = a - LOW_PEAK; 177 else 178 /* 180..360 degrees */ 179 pos_a = HIGH_PEAK - a + DEG180; 180 181 /* interpolate both slider values, depending on weight factors */ 182 /* 0..99 x DEG360 */ 183 ret = pos_a * weight_a + pos_b * weight_b; 184 185 /* normalize to 0..999 */ 186 ret *= 10; 187 ret /= DEG360; 188 189 if (ret < 0) 190 ret += 1000; 191 192 if (ret >= 1000) 193 ret -= 1000; 194 195 return ret; 196 } 197 198 #undef DEG90 199 #undef DEG180 200 #undef DEG270 201 #undef DEG360 202 #undef HIGH_PEAK 203 #undef LOW_PEAK 204 205 static inline void snd_caiaq_input_report_abs(struct snd_usb_caiaqdev *cdev, 206 int axis, const unsigned char *buf, 207 int offset) 208 { 209 input_report_abs(cdev->input_dev, axis, 210 (buf[offset * 2] << 8) | buf[offset * 2 + 1]); 211 } 212 213 static void snd_caiaq_input_read_analog(struct snd_usb_caiaqdev *cdev, 214 const unsigned char *buf, 215 unsigned int len) 216 { 217 struct input_dev *input_dev = cdev->input_dev; 218 219 switch (cdev->chip.usb_id) { 220 case USB_ID(USB_VID_NATIVEINSTRUMENTS, USB_PID_RIGKONTROL2): 221 if (len < 6) 222 return; 223 snd_caiaq_input_report_abs(cdev, ABS_X, buf, 2); 224 snd_caiaq_input_report_abs(cdev, ABS_Y, buf, 0); 225 snd_caiaq_input_report_abs(cdev, ABS_Z, buf, 1); 226 break; 227 case USB_ID(USB_VID_NATIVEINSTRUMENTS, USB_PID_RIGKONTROL3): 228 case USB_ID(USB_VID_NATIVEINSTRUMENTS, USB_PID_KORECONTROLLER): 229 case USB_ID(USB_VID_NATIVEINSTRUMENTS, USB_PID_KORECONTROLLER2): 230 if (len < 6) 231 return; 232 snd_caiaq_input_report_abs(cdev, ABS_X, buf, 0); 233 snd_caiaq_input_report_abs(cdev, ABS_Y, buf, 1); 234 snd_caiaq_input_report_abs(cdev, ABS_Z, buf, 2); 235 break; 236 case USB_ID(USB_VID_NATIVEINSTRUMENTS, USB_PID_TRAKTORKONTROLX1): 237 if (len < 16) 238 return; 239 snd_caiaq_input_report_abs(cdev, ABS_HAT0X, buf, 4); 240 snd_caiaq_input_report_abs(cdev, ABS_HAT0Y, buf, 2); 241 snd_caiaq_input_report_abs(cdev, ABS_HAT1X, buf, 6); 242 snd_caiaq_input_report_abs(cdev, ABS_HAT1Y, buf, 1); 243 snd_caiaq_input_report_abs(cdev, ABS_HAT2X, buf, 7); 244 snd_caiaq_input_report_abs(cdev, ABS_HAT2Y, buf, 0); 245 snd_caiaq_input_report_abs(cdev, ABS_HAT3X, buf, 5); 246 snd_caiaq_input_report_abs(cdev, ABS_HAT3Y, buf, 3); 247 break; 248 } 249 250 input_sync(input_dev); 251 } 252 253 static void snd_caiaq_input_read_erp(struct snd_usb_caiaqdev *cdev, 254 const char *buf, unsigned int len) 255 { 256 struct input_dev *input_dev = cdev->input_dev; 257 int i; 258 259 switch (cdev->chip.usb_id) { 260 case USB_ID(USB_VID_NATIVEINSTRUMENTS, USB_PID_AK1): 261 if (len < 2) 262 return; 263 i = decode_erp(buf[0], buf[1]); 264 input_report_abs(input_dev, ABS_X, i); 265 input_sync(input_dev); 266 break; 267 case USB_ID(USB_VID_NATIVEINSTRUMENTS, USB_PID_KORECONTROLLER): 268 case USB_ID(USB_VID_NATIVEINSTRUMENTS, USB_PID_KORECONTROLLER2): 269 if (len < 16) 270 return; 271 i = decode_erp(buf[7], buf[5]); 272 input_report_abs(input_dev, ABS_HAT0X, i); 273 i = decode_erp(buf[12], buf[14]); 274 input_report_abs(input_dev, ABS_HAT0Y, i); 275 i = decode_erp(buf[15], buf[13]); 276 input_report_abs(input_dev, ABS_HAT1X, i); 277 i = decode_erp(buf[0], buf[2]); 278 input_report_abs(input_dev, ABS_HAT1Y, i); 279 i = decode_erp(buf[3], buf[1]); 280 input_report_abs(input_dev, ABS_HAT2X, i); 281 i = decode_erp(buf[8], buf[10]); 282 input_report_abs(input_dev, ABS_HAT2Y, i); 283 i = decode_erp(buf[11], buf[9]); 284 input_report_abs(input_dev, ABS_HAT3X, i); 285 i = decode_erp(buf[4], buf[6]); 286 input_report_abs(input_dev, ABS_HAT3Y, i); 287 input_sync(input_dev); 288 break; 289 290 case USB_ID(USB_VID_NATIVEINSTRUMENTS, USB_PID_MASCHINECONTROLLER): 291 if (len < 22) 292 return; 293 /* 4 under the left screen */ 294 input_report_abs(input_dev, ABS_HAT0X, decode_erp(buf[21], buf[20])); 295 input_report_abs(input_dev, ABS_HAT0Y, decode_erp(buf[15], buf[14])); 296 input_report_abs(input_dev, ABS_HAT1X, decode_erp(buf[9], buf[8])); 297 input_report_abs(input_dev, ABS_HAT1Y, decode_erp(buf[3], buf[2])); 298 299 /* 4 under the right screen */ 300 input_report_abs(input_dev, ABS_HAT2X, decode_erp(buf[19], buf[18])); 301 input_report_abs(input_dev, ABS_HAT2Y, decode_erp(buf[13], buf[12])); 302 input_report_abs(input_dev, ABS_HAT3X, decode_erp(buf[7], buf[6])); 303 input_report_abs(input_dev, ABS_HAT3Y, decode_erp(buf[1], buf[0])); 304 305 /* volume */ 306 input_report_abs(input_dev, ABS_RX, decode_erp(buf[17], buf[16])); 307 /* tempo */ 308 input_report_abs(input_dev, ABS_RY, decode_erp(buf[11], buf[10])); 309 /* swing */ 310 input_report_abs(input_dev, ABS_RZ, decode_erp(buf[5], buf[4])); 311 312 input_sync(input_dev); 313 break; 314 } 315 } 316 317 static void snd_caiaq_input_read_io(struct snd_usb_caiaqdev *cdev, 318 unsigned char *buf, unsigned int len) 319 { 320 struct input_dev *input_dev = cdev->input_dev; 321 unsigned short *keycode = input_dev->keycode; 322 int i; 323 324 if (!keycode) 325 return; 326 327 if (input_dev->id.product == USB_PID_RIGKONTROL2) 328 for (i = 0; i < len; i++) 329 buf[i] = ~buf[i]; 330 331 for (i = 0; i < input_dev->keycodemax && i < len * 8; i++) 332 input_report_key(input_dev, keycode[i], 333 buf[i / 8] & (1 << (i % 8))); 334 335 switch (cdev->chip.usb_id) { 336 case USB_ID(USB_VID_NATIVEINSTRUMENTS, USB_PID_KORECONTROLLER): 337 case USB_ID(USB_VID_NATIVEINSTRUMENTS, USB_PID_KORECONTROLLER2): 338 if (len < 5) 339 return; 340 input_report_abs(cdev->input_dev, ABS_MISC, 255 - buf[4]); 341 break; 342 case USB_ID(USB_VID_NATIVEINSTRUMENTS, USB_PID_TRAKTORKONTROLX1): 343 if (len < 7) 344 return; 345 /* rotary encoders */ 346 input_report_abs(cdev->input_dev, ABS_X, buf[5] & 0xf); 347 input_report_abs(cdev->input_dev, ABS_Y, buf[5] >> 4); 348 input_report_abs(cdev->input_dev, ABS_Z, buf[6] & 0xf); 349 input_report_abs(cdev->input_dev, ABS_MISC, buf[6] >> 4); 350 break; 351 } 352 353 input_sync(input_dev); 354 } 355 356 #define TKS4_MSGBLOCK_SIZE 16 357 358 static void snd_usb_caiaq_tks4_dispatch(struct snd_usb_caiaqdev *cdev, 359 const unsigned char *buf, 360 unsigned int len) 361 { 362 struct device *dev = caiaqdev_to_dev(cdev); 363 364 while (len >= TKS4_MSGBLOCK_SIZE) { 365 unsigned int i, block_id = (buf[0] << 8) | buf[1]; 366 367 switch (block_id) { 368 case 0: 369 /* buttons */ 370 for (i = 0; i < KONTROLS4_BUTTONS; i++) 371 input_report_key(cdev->input_dev, KONTROLS4_BUTTON(i), 372 (buf[4 + (i / 8)] >> (i % 8)) & 1); 373 break; 374 375 case 1: 376 /* left wheel */ 377 input_report_abs(cdev->input_dev, KONTROLS4_ABS(36), buf[9] | ((buf[8] & 0x3) << 8)); 378 /* right wheel */ 379 input_report_abs(cdev->input_dev, KONTROLS4_ABS(37), buf[13] | ((buf[12] & 0x3) << 8)); 380 381 /* rotary encoders */ 382 input_report_abs(cdev->input_dev, KONTROLS4_ABS(38), buf[3] & 0xf); 383 input_report_abs(cdev->input_dev, KONTROLS4_ABS(39), buf[4] >> 4); 384 input_report_abs(cdev->input_dev, KONTROLS4_ABS(40), buf[4] & 0xf); 385 input_report_abs(cdev->input_dev, KONTROLS4_ABS(41), buf[5] >> 4); 386 input_report_abs(cdev->input_dev, KONTROLS4_ABS(42), buf[5] & 0xf); 387 input_report_abs(cdev->input_dev, KONTROLS4_ABS(43), buf[6] >> 4); 388 input_report_abs(cdev->input_dev, KONTROLS4_ABS(44), buf[6] & 0xf); 389 input_report_abs(cdev->input_dev, KONTROLS4_ABS(45), buf[7] >> 4); 390 input_report_abs(cdev->input_dev, KONTROLS4_ABS(46), buf[7] & 0xf); 391 392 break; 393 case 2: 394 /* Volume Fader Channel D */ 395 snd_caiaq_input_report_abs(cdev, KONTROLS4_ABS(0), buf, 1); 396 /* Volume Fader Channel B */ 397 snd_caiaq_input_report_abs(cdev, KONTROLS4_ABS(1), buf, 2); 398 /* Volume Fader Channel A */ 399 snd_caiaq_input_report_abs(cdev, KONTROLS4_ABS(2), buf, 3); 400 /* Volume Fader Channel C */ 401 snd_caiaq_input_report_abs(cdev, KONTROLS4_ABS(3), buf, 4); 402 /* Loop Volume */ 403 snd_caiaq_input_report_abs(cdev, KONTROLS4_ABS(4), buf, 6); 404 /* Crossfader */ 405 snd_caiaq_input_report_abs(cdev, KONTROLS4_ABS(7), buf, 7); 406 407 break; 408 409 case 3: 410 /* Tempo Fader R */ 411 snd_caiaq_input_report_abs(cdev, KONTROLS4_ABS(6), buf, 3); 412 /* Tempo Fader L */ 413 snd_caiaq_input_report_abs(cdev, KONTROLS4_ABS(5), buf, 4); 414 /* Mic Volume */ 415 snd_caiaq_input_report_abs(cdev, KONTROLS4_ABS(8), buf, 6); 416 /* Cue Mix */ 417 snd_caiaq_input_report_abs(cdev, KONTROLS4_ABS(9), buf, 7); 418 419 break; 420 421 case 4: 422 /* Wheel distance sensor L */ 423 snd_caiaq_input_report_abs(cdev, KONTROLS4_ABS(10), buf, 1); 424 /* Wheel distance sensor R */ 425 snd_caiaq_input_report_abs(cdev, KONTROLS4_ABS(11), buf, 2); 426 /* Channel D EQ - Filter */ 427 snd_caiaq_input_report_abs(cdev, KONTROLS4_ABS(12), buf, 3); 428 /* Channel D EQ - Low */ 429 snd_caiaq_input_report_abs(cdev, KONTROLS4_ABS(13), buf, 4); 430 /* Channel D EQ - Mid */ 431 snd_caiaq_input_report_abs(cdev, KONTROLS4_ABS(14), buf, 5); 432 /* Channel D EQ - Hi */ 433 snd_caiaq_input_report_abs(cdev, KONTROLS4_ABS(15), buf, 6); 434 /* FX2 - dry/wet */ 435 snd_caiaq_input_report_abs(cdev, KONTROLS4_ABS(16), buf, 7); 436 437 break; 438 439 case 5: 440 /* FX2 - 1 */ 441 snd_caiaq_input_report_abs(cdev, KONTROLS4_ABS(17), buf, 1); 442 /* FX2 - 2 */ 443 snd_caiaq_input_report_abs(cdev, KONTROLS4_ABS(18), buf, 2); 444 /* FX2 - 3 */ 445 snd_caiaq_input_report_abs(cdev, KONTROLS4_ABS(19), buf, 3); 446 /* Channel B EQ - Filter */ 447 snd_caiaq_input_report_abs(cdev, KONTROLS4_ABS(20), buf, 4); 448 /* Channel B EQ - Low */ 449 snd_caiaq_input_report_abs(cdev, KONTROLS4_ABS(21), buf, 5); 450 /* Channel B EQ - Mid */ 451 snd_caiaq_input_report_abs(cdev, KONTROLS4_ABS(22), buf, 6); 452 /* Channel B EQ - Hi */ 453 snd_caiaq_input_report_abs(cdev, KONTROLS4_ABS(23), buf, 7); 454 455 break; 456 457 case 6: 458 /* Channel A EQ - Filter */ 459 snd_caiaq_input_report_abs(cdev, KONTROLS4_ABS(24), buf, 1); 460 /* Channel A EQ - Low */ 461 snd_caiaq_input_report_abs(cdev, KONTROLS4_ABS(25), buf, 2); 462 /* Channel A EQ - Mid */ 463 snd_caiaq_input_report_abs(cdev, KONTROLS4_ABS(26), buf, 3); 464 /* Channel A EQ - Hi */ 465 snd_caiaq_input_report_abs(cdev, KONTROLS4_ABS(27), buf, 4); 466 /* Channel C EQ - Filter */ 467 snd_caiaq_input_report_abs(cdev, KONTROLS4_ABS(28), buf, 5); 468 /* Channel C EQ - Low */ 469 snd_caiaq_input_report_abs(cdev, KONTROLS4_ABS(29), buf, 6); 470 /* Channel C EQ - Mid */ 471 snd_caiaq_input_report_abs(cdev, KONTROLS4_ABS(30), buf, 7); 472 473 break; 474 475 case 7: 476 /* Channel C EQ - Hi */ 477 snd_caiaq_input_report_abs(cdev, KONTROLS4_ABS(31), buf, 1); 478 /* FX1 - wet/dry */ 479 snd_caiaq_input_report_abs(cdev, KONTROLS4_ABS(32), buf, 2); 480 /* FX1 - 1 */ 481 snd_caiaq_input_report_abs(cdev, KONTROLS4_ABS(33), buf, 3); 482 /* FX1 - 2 */ 483 snd_caiaq_input_report_abs(cdev, KONTROLS4_ABS(34), buf, 4); 484 /* FX1 - 3 */ 485 snd_caiaq_input_report_abs(cdev, KONTROLS4_ABS(35), buf, 5); 486 487 break; 488 489 default: 490 dev_dbg(dev, "%s(): bogus block (id %d)\n", 491 __func__, block_id); 492 return; 493 } 494 495 len -= TKS4_MSGBLOCK_SIZE; 496 buf += TKS4_MSGBLOCK_SIZE; 497 } 498 499 input_sync(cdev->input_dev); 500 } 501 502 #define MASCHINE_MSGBLOCK_SIZE 2 503 504 static void snd_usb_caiaq_maschine_dispatch(struct snd_usb_caiaqdev *cdev, 505 const unsigned char *buf, 506 unsigned int len) 507 { 508 unsigned int i, pad_id; 509 __le16 *pressure = (__le16 *) buf; 510 511 for (i = 0; i < MASCHINE_PADS; i++) { 512 pad_id = le16_to_cpu(*pressure) >> 12; 513 input_report_abs(cdev->input_dev, MASCHINE_PAD(pad_id), 514 le16_to_cpu(*pressure) & 0xfff); 515 pressure++; 516 } 517 518 input_sync(cdev->input_dev); 519 } 520 521 static void snd_usb_caiaq_ep4_reply_dispatch(struct urb *urb) 522 { 523 struct snd_usb_caiaqdev *cdev = urb->context; 524 unsigned char *buf = urb->transfer_buffer; 525 struct device *dev = &urb->dev->dev; 526 int ret; 527 528 if (urb->status || !cdev || urb != cdev->ep4_in_urb) 529 return; 530 531 switch (cdev->chip.usb_id) { 532 case USB_ID(USB_VID_NATIVEINSTRUMENTS, USB_PID_TRAKTORKONTROLX1): 533 if (urb->actual_length < 24) 534 goto requeue; 535 536 if (buf[0] & 0x3) 537 snd_caiaq_input_read_io(cdev, buf + 1, 7); 538 539 if (buf[0] & 0x4) 540 snd_caiaq_input_read_analog(cdev, buf + 8, 16); 541 542 break; 543 544 case USB_ID(USB_VID_NATIVEINSTRUMENTS, USB_PID_TRAKTORKONTROLS4): 545 snd_usb_caiaq_tks4_dispatch(cdev, buf, urb->actual_length); 546 break; 547 548 case USB_ID(USB_VID_NATIVEINSTRUMENTS, USB_PID_MASCHINECONTROLLER): 549 if (urb->actual_length < (MASCHINE_PADS * MASCHINE_MSGBLOCK_SIZE)) 550 goto requeue; 551 552 snd_usb_caiaq_maschine_dispatch(cdev, buf, urb->actual_length); 553 break; 554 } 555 556 requeue: 557 cdev->ep4_in_urb->actual_length = 0; 558 ret = usb_submit_urb(cdev->ep4_in_urb, GFP_ATOMIC); 559 if (ret < 0) 560 dev_err(dev, "unable to submit urb. OOM!?\n"); 561 } 562 563 static int snd_usb_caiaq_input_open(struct input_dev *idev) 564 { 565 struct snd_usb_caiaqdev *cdev = input_get_drvdata(idev); 566 567 if (!cdev) 568 return -EINVAL; 569 570 switch (cdev->chip.usb_id) { 571 case USB_ID(USB_VID_NATIVEINSTRUMENTS, USB_PID_TRAKTORKONTROLX1): 572 case USB_ID(USB_VID_NATIVEINSTRUMENTS, USB_PID_TRAKTORKONTROLS4): 573 case USB_ID(USB_VID_NATIVEINSTRUMENTS, USB_PID_MASCHINECONTROLLER): 574 if (usb_submit_urb(cdev->ep4_in_urb, GFP_KERNEL) != 0) 575 return -EIO; 576 break; 577 } 578 579 return 0; 580 } 581 582 static void snd_usb_caiaq_input_close(struct input_dev *idev) 583 { 584 struct snd_usb_caiaqdev *cdev = input_get_drvdata(idev); 585 586 if (!cdev) 587 return; 588 589 switch (cdev->chip.usb_id) { 590 case USB_ID(USB_VID_NATIVEINSTRUMENTS, USB_PID_TRAKTORKONTROLX1): 591 case USB_ID(USB_VID_NATIVEINSTRUMENTS, USB_PID_TRAKTORKONTROLS4): 592 case USB_ID(USB_VID_NATIVEINSTRUMENTS, USB_PID_MASCHINECONTROLLER): 593 usb_kill_urb(cdev->ep4_in_urb); 594 break; 595 } 596 } 597 598 void snd_usb_caiaq_input_dispatch(struct snd_usb_caiaqdev *cdev, 599 char *buf, 600 unsigned int len) 601 { 602 if (!cdev->input_dev || len < 1) 603 return; 604 605 switch (buf[0]) { 606 case EP1_CMD_READ_ANALOG: 607 snd_caiaq_input_read_analog(cdev, buf + 1, len - 1); 608 break; 609 case EP1_CMD_READ_ERP: 610 snd_caiaq_input_read_erp(cdev, buf + 1, len - 1); 611 break; 612 case EP1_CMD_READ_IO: 613 snd_caiaq_input_read_io(cdev, buf + 1, len - 1); 614 break; 615 } 616 } 617 618 int snd_usb_caiaq_input_init(struct snd_usb_caiaqdev *cdev) 619 { 620 struct usb_device *usb_dev = cdev->chip.dev; 621 struct input_dev *input; 622 int i, ret = 0; 623 int len; 624 625 input = input_allocate_device(); 626 if (!input) 627 return -ENOMEM; 628 629 len = usb_make_path(usb_dev, cdev->phys, sizeof(cdev->phys)); 630 if (len >= 0) 631 strscpy(cdev->phys + len, "/input0", sizeof(cdev->phys) - len); 632 633 input->name = cdev->product_name; 634 input->phys = cdev->phys; 635 usb_to_input_id(usb_dev, &input->id); 636 input->dev.parent = &usb_dev->dev; 637 638 input_set_drvdata(input, cdev); 639 640 switch (cdev->chip.usb_id) { 641 case USB_ID(USB_VID_NATIVEINSTRUMENTS, USB_PID_RIGKONTROL2): 642 input->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS); 643 input->absbit[0] = BIT_MASK(ABS_X) | BIT_MASK(ABS_Y) | 644 BIT_MASK(ABS_Z); 645 BUILD_BUG_ON(sizeof(cdev->keycode) < sizeof(keycode_rk2)); 646 memcpy(cdev->keycode, keycode_rk2, sizeof(keycode_rk2)); 647 input->keycodemax = ARRAY_SIZE(keycode_rk2); 648 input_set_abs_params(input, ABS_X, 0, 4096, 0, 10); 649 input_set_abs_params(input, ABS_Y, 0, 4096, 0, 10); 650 input_set_abs_params(input, ABS_Z, 0, 4096, 0, 10); 651 snd_usb_caiaq_set_auto_msg(cdev, 1, 10, 0); 652 break; 653 case USB_ID(USB_VID_NATIVEINSTRUMENTS, USB_PID_RIGKONTROL3): 654 input->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS); 655 input->absbit[0] = BIT_MASK(ABS_X) | BIT_MASK(ABS_Y) | 656 BIT_MASK(ABS_Z); 657 BUILD_BUG_ON(sizeof(cdev->keycode) < sizeof(keycode_rk3)); 658 memcpy(cdev->keycode, keycode_rk3, sizeof(keycode_rk3)); 659 input->keycodemax = ARRAY_SIZE(keycode_rk3); 660 input_set_abs_params(input, ABS_X, 0, 1024, 0, 10); 661 input_set_abs_params(input, ABS_Y, 0, 1024, 0, 10); 662 input_set_abs_params(input, ABS_Z, 0, 1024, 0, 10); 663 snd_usb_caiaq_set_auto_msg(cdev, 1, 10, 0); 664 break; 665 case USB_ID(USB_VID_NATIVEINSTRUMENTS, USB_PID_AK1): 666 input->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS); 667 input->absbit[0] = BIT_MASK(ABS_X); 668 BUILD_BUG_ON(sizeof(cdev->keycode) < sizeof(keycode_ak1)); 669 memcpy(cdev->keycode, keycode_ak1, sizeof(keycode_ak1)); 670 input->keycodemax = ARRAY_SIZE(keycode_ak1); 671 input_set_abs_params(input, ABS_X, 0, 999, 0, 10); 672 snd_usb_caiaq_set_auto_msg(cdev, 1, 0, 5); 673 break; 674 case USB_ID(USB_VID_NATIVEINSTRUMENTS, USB_PID_KORECONTROLLER): 675 case USB_ID(USB_VID_NATIVEINSTRUMENTS, USB_PID_KORECONTROLLER2): 676 input->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS); 677 input->absbit[0] = BIT_MASK(ABS_HAT0X) | BIT_MASK(ABS_HAT0Y) | 678 BIT_MASK(ABS_HAT1X) | BIT_MASK(ABS_HAT1Y) | 679 BIT_MASK(ABS_HAT2X) | BIT_MASK(ABS_HAT2Y) | 680 BIT_MASK(ABS_HAT3X) | BIT_MASK(ABS_HAT3Y) | 681 BIT_MASK(ABS_X) | BIT_MASK(ABS_Y) | 682 BIT_MASK(ABS_Z); 683 input->absbit[BIT_WORD(ABS_MISC)] |= BIT_MASK(ABS_MISC); 684 BUILD_BUG_ON(sizeof(cdev->keycode) < sizeof(keycode_kore)); 685 memcpy(cdev->keycode, keycode_kore, sizeof(keycode_kore)); 686 BUILD_BUG_ON(KORE_TOUCH_KEYS + ARRAY_SIZE(keycode_kore1_touch) > 687 ARRAY_SIZE(keycode_kore)); 688 if (cdev->chip.usb_id == 689 USB_ID(USB_VID_NATIVEINSTRUMENTS, USB_PID_KORECONTROLLER)) 690 memcpy(cdev->keycode + KORE_TOUCH_KEYS, keycode_kore1_touch, 691 sizeof(keycode_kore1_touch)); 692 input->keycodemax = ARRAY_SIZE(keycode_kore); 693 input_set_abs_params(input, ABS_HAT0X, 0, 999, 0, 10); 694 input_set_abs_params(input, ABS_HAT0Y, 0, 999, 0, 10); 695 input_set_abs_params(input, ABS_HAT1X, 0, 999, 0, 10); 696 input_set_abs_params(input, ABS_HAT1Y, 0, 999, 0, 10); 697 input_set_abs_params(input, ABS_HAT2X, 0, 999, 0, 10); 698 input_set_abs_params(input, ABS_HAT2Y, 0, 999, 0, 10); 699 input_set_abs_params(input, ABS_HAT3X, 0, 999, 0, 10); 700 input_set_abs_params(input, ABS_HAT3Y, 0, 999, 0, 10); 701 input_set_abs_params(input, ABS_X, 0, 4096, 0, 10); 702 input_set_abs_params(input, ABS_Y, 0, 4096, 0, 10); 703 input_set_abs_params(input, ABS_Z, 0, 4096, 0, 10); 704 input_set_abs_params(input, ABS_MISC, 0, 255, 0, 1); 705 snd_usb_caiaq_set_auto_msg(cdev, 1, 10, 5); 706 break; 707 case USB_ID(USB_VID_NATIVEINSTRUMENTS, USB_PID_TRAKTORKONTROLX1): 708 input->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS); 709 input->absbit[0] = BIT_MASK(ABS_HAT0X) | BIT_MASK(ABS_HAT0Y) | 710 BIT_MASK(ABS_HAT1X) | BIT_MASK(ABS_HAT1Y) | 711 BIT_MASK(ABS_HAT2X) | BIT_MASK(ABS_HAT2Y) | 712 BIT_MASK(ABS_HAT3X) | BIT_MASK(ABS_HAT3Y) | 713 BIT_MASK(ABS_X) | BIT_MASK(ABS_Y) | 714 BIT_MASK(ABS_Z); 715 input->absbit[BIT_WORD(ABS_MISC)] |= BIT_MASK(ABS_MISC); 716 BUILD_BUG_ON(sizeof(cdev->keycode) < KONTROLX1_INPUTS); 717 for (i = 0; i < KONTROLX1_INPUTS; i++) 718 cdev->keycode[i] = BTN_MISC + i; 719 input->keycodemax = KONTROLX1_INPUTS; 720 721 /* analog potentiometers */ 722 input_set_abs_params(input, ABS_HAT0X, 0, 4096, 0, 10); 723 input_set_abs_params(input, ABS_HAT0Y, 0, 4096, 0, 10); 724 input_set_abs_params(input, ABS_HAT1X, 0, 4096, 0, 10); 725 input_set_abs_params(input, ABS_HAT1Y, 0, 4096, 0, 10); 726 input_set_abs_params(input, ABS_HAT2X, 0, 4096, 0, 10); 727 input_set_abs_params(input, ABS_HAT2Y, 0, 4096, 0, 10); 728 input_set_abs_params(input, ABS_HAT3X, 0, 4096, 0, 10); 729 input_set_abs_params(input, ABS_HAT3Y, 0, 4096, 0, 10); 730 731 /* rotary encoders */ 732 input_set_abs_params(input, ABS_X, 0, 0xf, 0, 1); 733 input_set_abs_params(input, ABS_Y, 0, 0xf, 0, 1); 734 input_set_abs_params(input, ABS_Z, 0, 0xf, 0, 1); 735 input_set_abs_params(input, ABS_MISC, 0, 0xf, 0, 1); 736 737 cdev->ep4_in_urb = usb_alloc_urb(0, GFP_KERNEL); 738 if (!cdev->ep4_in_urb) { 739 ret = -ENOMEM; 740 goto exit_free_idev; 741 } 742 743 usb_fill_bulk_urb(cdev->ep4_in_urb, usb_dev, 744 usb_rcvbulkpipe(usb_dev, 0x4), 745 cdev->ep4_in_buf, EP4_BUFSIZE, 746 snd_usb_caiaq_ep4_reply_dispatch, cdev); 747 ret = usb_urb_ep_type_check(cdev->ep4_in_urb); 748 if (ret < 0) 749 goto exit_free_idev; 750 751 snd_usb_caiaq_set_auto_msg(cdev, 1, 10, 5); 752 753 break; 754 755 case USB_ID(USB_VID_NATIVEINSTRUMENTS, USB_PID_TRAKTORKONTROLS4): 756 input->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS); 757 BUILD_BUG_ON(sizeof(cdev->keycode) < KONTROLS4_BUTTONS); 758 for (i = 0; i < KONTROLS4_BUTTONS; i++) 759 cdev->keycode[i] = KONTROLS4_BUTTON(i); 760 input->keycodemax = KONTROLS4_BUTTONS; 761 762 for (i = 0; i < KONTROLS4_AXIS; i++) { 763 int axis = KONTROLS4_ABS(i); 764 input->absbit[BIT_WORD(axis)] |= BIT_MASK(axis); 765 } 766 767 /* 36 analog potentiometers and faders */ 768 for (i = 0; i < 36; i++) 769 input_set_abs_params(input, KONTROLS4_ABS(i), 0, 0xfff, 0, 10); 770 771 /* 2 encoder wheels */ 772 input_set_abs_params(input, KONTROLS4_ABS(36), 0, 0x3ff, 0, 1); 773 input_set_abs_params(input, KONTROLS4_ABS(37), 0, 0x3ff, 0, 1); 774 775 /* 9 rotary encoders */ 776 for (i = 0; i < 9; i++) 777 input_set_abs_params(input, KONTROLS4_ABS(38+i), 0, 0xf, 0, 1); 778 779 cdev->ep4_in_urb = usb_alloc_urb(0, GFP_KERNEL); 780 if (!cdev->ep4_in_urb) { 781 ret = -ENOMEM; 782 goto exit_free_idev; 783 } 784 785 usb_fill_bulk_urb(cdev->ep4_in_urb, usb_dev, 786 usb_rcvbulkpipe(usb_dev, 0x4), 787 cdev->ep4_in_buf, EP4_BUFSIZE, 788 snd_usb_caiaq_ep4_reply_dispatch, cdev); 789 ret = usb_urb_ep_type_check(cdev->ep4_in_urb); 790 if (ret < 0) 791 goto exit_free_idev; 792 793 snd_usb_caiaq_set_auto_msg(cdev, 1, 10, 5); 794 795 break; 796 797 case USB_ID(USB_VID_NATIVEINSTRUMENTS, USB_PID_MASCHINECONTROLLER): 798 input->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS); 799 input->absbit[0] = BIT_MASK(ABS_HAT0X) | BIT_MASK(ABS_HAT0Y) | 800 BIT_MASK(ABS_HAT1X) | BIT_MASK(ABS_HAT1Y) | 801 BIT_MASK(ABS_HAT2X) | BIT_MASK(ABS_HAT2Y) | 802 BIT_MASK(ABS_HAT3X) | BIT_MASK(ABS_HAT3Y) | 803 BIT_MASK(ABS_RX) | BIT_MASK(ABS_RY) | 804 BIT_MASK(ABS_RZ); 805 806 BUILD_BUG_ON(sizeof(cdev->keycode) < sizeof(keycode_maschine)); 807 memcpy(cdev->keycode, keycode_maschine, sizeof(keycode_maschine)); 808 input->keycodemax = ARRAY_SIZE(keycode_maschine); 809 810 for (i = 0; i < MASCHINE_PADS; i++) { 811 input->absbit[0] |= MASCHINE_PAD(i); 812 input_set_abs_params(input, MASCHINE_PAD(i), 0, 0xfff, 5, 10); 813 } 814 815 input_set_abs_params(input, ABS_HAT0X, 0, 999, 0, 10); 816 input_set_abs_params(input, ABS_HAT0Y, 0, 999, 0, 10); 817 input_set_abs_params(input, ABS_HAT1X, 0, 999, 0, 10); 818 input_set_abs_params(input, ABS_HAT1Y, 0, 999, 0, 10); 819 input_set_abs_params(input, ABS_HAT2X, 0, 999, 0, 10); 820 input_set_abs_params(input, ABS_HAT2Y, 0, 999, 0, 10); 821 input_set_abs_params(input, ABS_HAT3X, 0, 999, 0, 10); 822 input_set_abs_params(input, ABS_HAT3Y, 0, 999, 0, 10); 823 input_set_abs_params(input, ABS_RX, 0, 999, 0, 10); 824 input_set_abs_params(input, ABS_RY, 0, 999, 0, 10); 825 input_set_abs_params(input, ABS_RZ, 0, 999, 0, 10); 826 827 cdev->ep4_in_urb = usb_alloc_urb(0, GFP_KERNEL); 828 if (!cdev->ep4_in_urb) { 829 ret = -ENOMEM; 830 goto exit_free_idev; 831 } 832 833 usb_fill_bulk_urb(cdev->ep4_in_urb, usb_dev, 834 usb_rcvbulkpipe(usb_dev, 0x4), 835 cdev->ep4_in_buf, EP4_BUFSIZE, 836 snd_usb_caiaq_ep4_reply_dispatch, cdev); 837 ret = usb_urb_ep_type_check(cdev->ep4_in_urb); 838 if (ret < 0) 839 goto exit_free_idev; 840 841 snd_usb_caiaq_set_auto_msg(cdev, 1, 10, 5); 842 break; 843 844 default: 845 /* no input methods supported on this device */ 846 ret = -ENODEV; 847 goto exit_free_idev; 848 } 849 850 input->open = snd_usb_caiaq_input_open; 851 input->close = snd_usb_caiaq_input_close; 852 input->keycode = cdev->keycode; 853 input->keycodesize = sizeof(unsigned short); 854 for (i = 0; i < input->keycodemax; i++) 855 __set_bit(cdev->keycode[i], input->keybit); 856 857 cdev->input_dev = input; 858 859 ret = input_register_device(input); 860 if (ret < 0) 861 goto exit_free_idev; 862 863 return 0; 864 865 exit_free_idev: 866 input_free_device(input); 867 cdev->input_dev = NULL; 868 return ret; 869 } 870 871 void snd_usb_caiaq_input_disconnect(struct snd_usb_caiaqdev *cdev) 872 { 873 if (!cdev || !cdev->input_dev) 874 return; 875 876 usb_kill_urb(cdev->ep4_in_urb); 877 input_unregister_device(cdev->input_dev); 878 } 879 880 void snd_usb_caiaq_input_free(struct snd_usb_caiaqdev *cdev) 881 { 882 if (!cdev || !cdev->input_dev) 883 return; 884 885 usb_free_urb(cdev->ep4_in_urb); 886 cdev->ep4_in_urb = NULL; 887 cdev->input_dev = NULL; 888 } 889