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