xref: /linux/sound/usb/caiaq/input.c (revision 8045043c9d66508b5ebfd702e555b9642b5aa805)
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