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