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