1 /*
2  *  HIDPP protocol for Logitech Unifying receivers
3  *
4  *  Copyright (c) 2011 Logitech (c)
5  *  Copyright (c) 2012-2013 Google (c)
6  *  Copyright (c) 2013-2014 Red Hat Inc.
7  */
8 
9 /*
10  * This program is free software; you can redistribute it and/or modify it
11  * under the terms of the GNU General Public License as published by the Free
12  * Software Foundation; version 2 of the License.
13  */
14 
15 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
16 
17 #include <linux/device.h>
18 #include <linux/hid.h>
19 #include <linux/module.h>
20 #include <linux/slab.h>
21 #include <linux/sched.h>
22 #include <linux/kfifo.h>
23 #include <linux/input/mt.h>
24 #include <asm/unaligned.h>
25 #include "hid-ids.h"
26 
27 MODULE_LICENSE("GPL");
28 MODULE_AUTHOR("Benjamin Tissoires <benjamin.tissoires@gmail.com>");
29 MODULE_AUTHOR("Nestor Lopez Casado <nlopezcasad@logitech.com>");
30 
31 static bool disable_raw_mode;
32 module_param(disable_raw_mode, bool, 0644);
33 MODULE_PARM_DESC(disable_raw_mode,
34 	"Disable Raw mode reporting for touchpads and keep firmware gestures.");
35 
36 #define REPORT_ID_HIDPP_SHORT			0x10
37 #define REPORT_ID_HIDPP_LONG			0x11
38 
39 #define HIDPP_REPORT_SHORT_LENGTH		7
40 #define HIDPP_REPORT_LONG_LENGTH		20
41 
42 #define HIDPP_QUIRK_CLASS_WTP			BIT(0)
43 
44 /* bits 1..20 are reserved for classes */
45 #define HIDPP_QUIRK_DELAYED_INIT		BIT(21)
46 #define HIDPP_QUIRK_WTP_PHYSICAL_BUTTONS	BIT(22)
47 
48 /*
49  * There are two hidpp protocols in use, the first version hidpp10 is known
50  * as register access protocol or RAP, the second version hidpp20 is known as
51  * feature access protocol or FAP
52  *
53  * Most older devices (including the Unifying usb receiver) use the RAP protocol
54  * where as most newer devices use the FAP protocol. Both protocols are
55  * compatible with the underlying transport, which could be usb, Unifiying, or
56  * bluetooth. The message lengths are defined by the hid vendor specific report
57  * descriptor for the HIDPP_SHORT report type (total message lenth 7 bytes) and
58  * the HIDPP_LONG report type (total message length 20 bytes)
59  *
60  * The RAP protocol uses both report types, whereas the FAP only uses HIDPP_LONG
61  * messages. The Unifying receiver itself responds to RAP messages (device index
62  * is 0xFF for the receiver), and all messages (short or long) with a device
63  * index between 1 and 6 are passed untouched to the corresponding paired
64  * Unifying device.
65  *
66  * The paired device can be RAP or FAP, it will receive the message untouched
67  * from the Unifiying receiver.
68  */
69 
70 struct fap {
71 	u8 feature_index;
72 	u8 funcindex_clientid;
73 	u8 params[HIDPP_REPORT_LONG_LENGTH - 4U];
74 };
75 
76 struct rap {
77 	u8 sub_id;
78 	u8 reg_address;
79 	u8 params[HIDPP_REPORT_LONG_LENGTH - 4U];
80 };
81 
82 struct hidpp_report {
83 	u8 report_id;
84 	u8 device_index;
85 	union {
86 		struct fap fap;
87 		struct rap rap;
88 		u8 rawbytes[sizeof(struct fap)];
89 	};
90 } __packed;
91 
92 struct hidpp_device {
93 	struct hid_device *hid_dev;
94 	struct mutex send_mutex;
95 	void *send_receive_buf;
96 	char *name;		/* will never be NULL and should not be freed */
97 	wait_queue_head_t wait;
98 	bool answer_available;
99 	u8 protocol_major;
100 	u8 protocol_minor;
101 
102 	void *private_data;
103 
104 	struct work_struct work;
105 	struct kfifo delayed_work_fifo;
106 	atomic_t connected;
107 	struct input_dev *delayed_input;
108 
109 	unsigned long quirks;
110 };
111 
112 
113 /* HID++ 1.0 error codes */
114 #define HIDPP_ERROR				0x8f
115 #define HIDPP_ERROR_SUCCESS			0x00
116 #define HIDPP_ERROR_INVALID_SUBID		0x01
117 #define HIDPP_ERROR_INVALID_ADRESS		0x02
118 #define HIDPP_ERROR_INVALID_VALUE		0x03
119 #define HIDPP_ERROR_CONNECT_FAIL		0x04
120 #define HIDPP_ERROR_TOO_MANY_DEVICES		0x05
121 #define HIDPP_ERROR_ALREADY_EXISTS		0x06
122 #define HIDPP_ERROR_BUSY			0x07
123 #define HIDPP_ERROR_UNKNOWN_DEVICE		0x08
124 #define HIDPP_ERROR_RESOURCE_ERROR		0x09
125 #define HIDPP_ERROR_REQUEST_UNAVAILABLE		0x0a
126 #define HIDPP_ERROR_INVALID_PARAM_VALUE		0x0b
127 #define HIDPP_ERROR_WRONG_PIN_CODE		0x0c
128 /* HID++ 2.0 error codes */
129 #define HIDPP20_ERROR				0xff
130 
131 static void hidpp_connect_event(struct hidpp_device *hidpp_dev);
132 
133 static int __hidpp_send_report(struct hid_device *hdev,
134 				struct hidpp_report *hidpp_report)
135 {
136 	int fields_count, ret;
137 
138 	switch (hidpp_report->report_id) {
139 	case REPORT_ID_HIDPP_SHORT:
140 		fields_count = HIDPP_REPORT_SHORT_LENGTH;
141 		break;
142 	case REPORT_ID_HIDPP_LONG:
143 		fields_count = HIDPP_REPORT_LONG_LENGTH;
144 		break;
145 	default:
146 		return -ENODEV;
147 	}
148 
149 	/*
150 	 * set the device_index as the receiver, it will be overwritten by
151 	 * hid_hw_request if needed
152 	 */
153 	hidpp_report->device_index = 0xff;
154 
155 	ret = hid_hw_raw_request(hdev, hidpp_report->report_id,
156 		(u8 *)hidpp_report, fields_count, HID_OUTPUT_REPORT,
157 		HID_REQ_SET_REPORT);
158 
159 	return ret == fields_count ? 0 : -1;
160 }
161 
162 /**
163  * hidpp_send_message_sync() returns 0 in case of success, and something else
164  * in case of a failure.
165  * - If ' something else' is positive, that means that an error has been raised
166  *   by the protocol itself.
167  * - If ' something else' is negative, that means that we had a classic error
168  *   (-ENOMEM, -EPIPE, etc...)
169  */
170 static int hidpp_send_message_sync(struct hidpp_device *hidpp,
171 	struct hidpp_report *message,
172 	struct hidpp_report *response)
173 {
174 	int ret;
175 
176 	mutex_lock(&hidpp->send_mutex);
177 
178 	hidpp->send_receive_buf = response;
179 	hidpp->answer_available = false;
180 
181 	/*
182 	 * So that we can later validate the answer when it arrives
183 	 * in hidpp_raw_event
184 	 */
185 	*response = *message;
186 
187 	ret = __hidpp_send_report(hidpp->hid_dev, message);
188 
189 	if (ret) {
190 		dbg_hid("__hidpp_send_report returned err: %d\n", ret);
191 		memset(response, 0, sizeof(struct hidpp_report));
192 		goto exit;
193 	}
194 
195 	if (!wait_event_timeout(hidpp->wait, hidpp->answer_available,
196 				5*HZ)) {
197 		dbg_hid("%s:timeout waiting for response\n", __func__);
198 		memset(response, 0, sizeof(struct hidpp_report));
199 		ret = -ETIMEDOUT;
200 	}
201 
202 	if (response->report_id == REPORT_ID_HIDPP_SHORT &&
203 	    response->rap.sub_id == HIDPP_ERROR) {
204 		ret = response->rap.params[1];
205 		dbg_hid("%s:got hidpp error %02X\n", __func__, ret);
206 		goto exit;
207 	}
208 
209 	if (response->report_id == REPORT_ID_HIDPP_LONG &&
210 	    response->fap.feature_index == HIDPP20_ERROR) {
211 		ret = response->fap.params[1];
212 		dbg_hid("%s:got hidpp 2.0 error %02X\n", __func__, ret);
213 		goto exit;
214 	}
215 
216 exit:
217 	mutex_unlock(&hidpp->send_mutex);
218 	return ret;
219 
220 }
221 
222 static int hidpp_send_fap_command_sync(struct hidpp_device *hidpp,
223 	u8 feat_index, u8 funcindex_clientid, u8 *params, int param_count,
224 	struct hidpp_report *response)
225 {
226 	struct hidpp_report *message;
227 	int ret;
228 
229 	if (param_count > sizeof(message->fap.params))
230 		return -EINVAL;
231 
232 	message = kzalloc(sizeof(struct hidpp_report), GFP_KERNEL);
233 	if (!message)
234 		return -ENOMEM;
235 	message->report_id = REPORT_ID_HIDPP_LONG;
236 	message->fap.feature_index = feat_index;
237 	message->fap.funcindex_clientid = funcindex_clientid;
238 	memcpy(&message->fap.params, params, param_count);
239 
240 	ret = hidpp_send_message_sync(hidpp, message, response);
241 	kfree(message);
242 	return ret;
243 }
244 
245 static int hidpp_send_rap_command_sync(struct hidpp_device *hidpp_dev,
246 	u8 report_id, u8 sub_id, u8 reg_address, u8 *params, int param_count,
247 	struct hidpp_report *response)
248 {
249 	struct hidpp_report *message;
250 	int ret;
251 
252 	if ((report_id != REPORT_ID_HIDPP_SHORT) &&
253 	    (report_id != REPORT_ID_HIDPP_LONG))
254 		return -EINVAL;
255 
256 	if (param_count > sizeof(message->rap.params))
257 		return -EINVAL;
258 
259 	message = kzalloc(sizeof(struct hidpp_report), GFP_KERNEL);
260 	if (!message)
261 		return -ENOMEM;
262 	message->report_id = report_id;
263 	message->rap.sub_id = sub_id;
264 	message->rap.reg_address = reg_address;
265 	memcpy(&message->rap.params, params, param_count);
266 
267 	ret = hidpp_send_message_sync(hidpp_dev, message, response);
268 	kfree(message);
269 	return ret;
270 }
271 
272 static void delayed_work_cb(struct work_struct *work)
273 {
274 	struct hidpp_device *hidpp = container_of(work, struct hidpp_device,
275 							work);
276 	hidpp_connect_event(hidpp);
277 }
278 
279 static inline bool hidpp_match_answer(struct hidpp_report *question,
280 		struct hidpp_report *answer)
281 {
282 	return (answer->fap.feature_index == question->fap.feature_index) &&
283 	   (answer->fap.funcindex_clientid == question->fap.funcindex_clientid);
284 }
285 
286 static inline bool hidpp_match_error(struct hidpp_report *question,
287 		struct hidpp_report *answer)
288 {
289 	return ((answer->rap.sub_id == HIDPP_ERROR) ||
290 	    (answer->fap.feature_index == HIDPP20_ERROR)) &&
291 	    (answer->fap.funcindex_clientid == question->fap.feature_index) &&
292 	    (answer->fap.params[0] == question->fap.funcindex_clientid);
293 }
294 
295 static inline bool hidpp_report_is_connect_event(struct hidpp_report *report)
296 {
297 	return (report->report_id == REPORT_ID_HIDPP_SHORT) &&
298 		(report->rap.sub_id == 0x41);
299 }
300 
301 /**
302  * hidpp_prefix_name() prefixes the current given name with "Logitech ".
303  */
304 static void hidpp_prefix_name(char **name, int name_length)
305 {
306 #define PREFIX_LENGTH 9 /* "Logitech " */
307 
308 	int new_length;
309 	char *new_name;
310 
311 	if (name_length > PREFIX_LENGTH &&
312 	    strncmp(*name, "Logitech ", PREFIX_LENGTH) == 0)
313 		/* The prefix has is already in the name */
314 		return;
315 
316 	new_length = PREFIX_LENGTH + name_length;
317 	new_name = kzalloc(new_length, GFP_KERNEL);
318 	if (!new_name)
319 		return;
320 
321 	snprintf(new_name, new_length, "Logitech %s", *name);
322 
323 	kfree(*name);
324 
325 	*name = new_name;
326 }
327 
328 /* -------------------------------------------------------------------------- */
329 /* HIDP++ 1.0 commands                                                        */
330 /* -------------------------------------------------------------------------- */
331 
332 #define HIDPP_SET_REGISTER				0x80
333 #define HIDPP_GET_REGISTER				0x81
334 #define HIDPP_SET_LONG_REGISTER				0x82
335 #define HIDPP_GET_LONG_REGISTER				0x83
336 
337 #define HIDPP_REG_PAIRING_INFORMATION			0xB5
338 #define DEVICE_NAME					0x40
339 
340 static char *hidpp_get_unifying_name(struct hidpp_device *hidpp_dev)
341 {
342 	struct hidpp_report response;
343 	int ret;
344 	/* hid-logitech-dj is in charge of setting the right device index */
345 	u8 params[1] = { DEVICE_NAME };
346 	char *name;
347 	int len;
348 
349 	ret = hidpp_send_rap_command_sync(hidpp_dev,
350 					REPORT_ID_HIDPP_SHORT,
351 					HIDPP_GET_LONG_REGISTER,
352 					HIDPP_REG_PAIRING_INFORMATION,
353 					params, 1, &response);
354 	if (ret)
355 		return NULL;
356 
357 	len = response.rap.params[1];
358 
359 	if (2 + len > sizeof(response.rap.params))
360 		return NULL;
361 
362 	name = kzalloc(len + 1, GFP_KERNEL);
363 	if (!name)
364 		return NULL;
365 
366 	memcpy(name, &response.rap.params[2], len);
367 
368 	/* include the terminating '\0' */
369 	hidpp_prefix_name(&name, len + 1);
370 
371 	return name;
372 }
373 
374 /* -------------------------------------------------------------------------- */
375 /* 0x0000: Root                                                               */
376 /* -------------------------------------------------------------------------- */
377 
378 #define HIDPP_PAGE_ROOT					0x0000
379 #define HIDPP_PAGE_ROOT_IDX				0x00
380 
381 #define CMD_ROOT_GET_FEATURE				0x01
382 #define CMD_ROOT_GET_PROTOCOL_VERSION			0x11
383 
384 static int hidpp_root_get_feature(struct hidpp_device *hidpp, u16 feature,
385 	u8 *feature_index, u8 *feature_type)
386 {
387 	struct hidpp_report response;
388 	int ret;
389 	u8 params[2] = { feature >> 8, feature & 0x00FF };
390 
391 	ret = hidpp_send_fap_command_sync(hidpp,
392 			HIDPP_PAGE_ROOT_IDX,
393 			CMD_ROOT_GET_FEATURE,
394 			params, 2, &response);
395 	if (ret)
396 		return ret;
397 
398 	*feature_index = response.fap.params[0];
399 	*feature_type = response.fap.params[1];
400 
401 	return ret;
402 }
403 
404 static int hidpp_root_get_protocol_version(struct hidpp_device *hidpp)
405 {
406 	struct hidpp_report response;
407 	int ret;
408 
409 	ret = hidpp_send_fap_command_sync(hidpp,
410 			HIDPP_PAGE_ROOT_IDX,
411 			CMD_ROOT_GET_PROTOCOL_VERSION,
412 			NULL, 0, &response);
413 
414 	if (ret == HIDPP_ERROR_INVALID_SUBID) {
415 		hidpp->protocol_major = 1;
416 		hidpp->protocol_minor = 0;
417 		return 0;
418 	}
419 
420 	/* the device might not be connected */
421 	if (ret == HIDPP_ERROR_RESOURCE_ERROR)
422 		return -EIO;
423 
424 	if (ret > 0) {
425 		hid_err(hidpp->hid_dev, "%s: received protocol error 0x%02x\n",
426 			__func__, ret);
427 		return -EPROTO;
428 	}
429 	if (ret)
430 		return ret;
431 
432 	hidpp->protocol_major = response.fap.params[0];
433 	hidpp->protocol_minor = response.fap.params[1];
434 
435 	return ret;
436 }
437 
438 static bool hidpp_is_connected(struct hidpp_device *hidpp)
439 {
440 	int ret;
441 
442 	ret = hidpp_root_get_protocol_version(hidpp);
443 	if (!ret)
444 		hid_dbg(hidpp->hid_dev, "HID++ %u.%u device connected.\n",
445 			hidpp->protocol_major, hidpp->protocol_minor);
446 	return ret == 0;
447 }
448 
449 /* -------------------------------------------------------------------------- */
450 /* 0x0005: GetDeviceNameType                                                  */
451 /* -------------------------------------------------------------------------- */
452 
453 #define HIDPP_PAGE_GET_DEVICE_NAME_TYPE			0x0005
454 
455 #define CMD_GET_DEVICE_NAME_TYPE_GET_COUNT		0x01
456 #define CMD_GET_DEVICE_NAME_TYPE_GET_DEVICE_NAME	0x11
457 #define CMD_GET_DEVICE_NAME_TYPE_GET_TYPE		0x21
458 
459 static int hidpp_devicenametype_get_count(struct hidpp_device *hidpp,
460 	u8 feature_index, u8 *nameLength)
461 {
462 	struct hidpp_report response;
463 	int ret;
464 
465 	ret = hidpp_send_fap_command_sync(hidpp, feature_index,
466 		CMD_GET_DEVICE_NAME_TYPE_GET_COUNT, NULL, 0, &response);
467 
468 	if (ret > 0) {
469 		hid_err(hidpp->hid_dev, "%s: received protocol error 0x%02x\n",
470 			__func__, ret);
471 		return -EPROTO;
472 	}
473 	if (ret)
474 		return ret;
475 
476 	*nameLength = response.fap.params[0];
477 
478 	return ret;
479 }
480 
481 static int hidpp_devicenametype_get_device_name(struct hidpp_device *hidpp,
482 	u8 feature_index, u8 char_index, char *device_name, int len_buf)
483 {
484 	struct hidpp_report response;
485 	int ret, i;
486 	int count;
487 
488 	ret = hidpp_send_fap_command_sync(hidpp, feature_index,
489 		CMD_GET_DEVICE_NAME_TYPE_GET_DEVICE_NAME, &char_index, 1,
490 		&response);
491 
492 	if (ret > 0) {
493 		hid_err(hidpp->hid_dev, "%s: received protocol error 0x%02x\n",
494 			__func__, ret);
495 		return -EPROTO;
496 	}
497 	if (ret)
498 		return ret;
499 
500 	if (response.report_id == REPORT_ID_HIDPP_LONG)
501 		count = HIDPP_REPORT_LONG_LENGTH - 4;
502 	else
503 		count = HIDPP_REPORT_SHORT_LENGTH - 4;
504 
505 	if (len_buf < count)
506 		count = len_buf;
507 
508 	for (i = 0; i < count; i++)
509 		device_name[i] = response.fap.params[i];
510 
511 	return count;
512 }
513 
514 static char *hidpp_get_device_name(struct hidpp_device *hidpp)
515 {
516 	u8 feature_type;
517 	u8 feature_index;
518 	u8 __name_length;
519 	char *name;
520 	unsigned index = 0;
521 	int ret;
522 
523 	ret = hidpp_root_get_feature(hidpp, HIDPP_PAGE_GET_DEVICE_NAME_TYPE,
524 		&feature_index, &feature_type);
525 	if (ret)
526 		return NULL;
527 
528 	ret = hidpp_devicenametype_get_count(hidpp, feature_index,
529 		&__name_length);
530 	if (ret)
531 		return NULL;
532 
533 	name = kzalloc(__name_length + 1, GFP_KERNEL);
534 	if (!name)
535 		return NULL;
536 
537 	while (index < __name_length) {
538 		ret = hidpp_devicenametype_get_device_name(hidpp,
539 			feature_index, index, name + index,
540 			__name_length - index);
541 		if (ret <= 0) {
542 			kfree(name);
543 			return NULL;
544 		}
545 		index += ret;
546 	}
547 
548 	/* include the terminating '\0' */
549 	hidpp_prefix_name(&name, __name_length + 1);
550 
551 	return name;
552 }
553 
554 /* -------------------------------------------------------------------------- */
555 /* 0x6100: TouchPadRawXY                                                      */
556 /* -------------------------------------------------------------------------- */
557 
558 #define HIDPP_PAGE_TOUCHPAD_RAW_XY			0x6100
559 
560 #define CMD_TOUCHPAD_GET_RAW_INFO			0x01
561 #define CMD_TOUCHPAD_SET_RAW_REPORT_STATE		0x21
562 
563 #define EVENT_TOUCHPAD_RAW_XY				0x00
564 
565 #define TOUCHPAD_RAW_XY_ORIGIN_LOWER_LEFT		0x01
566 #define TOUCHPAD_RAW_XY_ORIGIN_UPPER_LEFT		0x03
567 
568 struct hidpp_touchpad_raw_info {
569 	u16 x_size;
570 	u16 y_size;
571 	u8 z_range;
572 	u8 area_range;
573 	u8 timestamp_unit;
574 	u8 maxcontacts;
575 	u8 origin;
576 	u16 res;
577 };
578 
579 struct hidpp_touchpad_raw_xy_finger {
580 	u8 contact_type;
581 	u8 contact_status;
582 	u16 x;
583 	u16 y;
584 	u8 z;
585 	u8 area;
586 	u8 finger_id;
587 };
588 
589 struct hidpp_touchpad_raw_xy {
590 	u16 timestamp;
591 	struct hidpp_touchpad_raw_xy_finger fingers[2];
592 	u8 spurious_flag;
593 	u8 end_of_frame;
594 	u8 finger_count;
595 	u8 button;
596 };
597 
598 static int hidpp_touchpad_get_raw_info(struct hidpp_device *hidpp,
599 	u8 feature_index, struct hidpp_touchpad_raw_info *raw_info)
600 {
601 	struct hidpp_report response;
602 	int ret;
603 	u8 *params = (u8 *)response.fap.params;
604 
605 	ret = hidpp_send_fap_command_sync(hidpp, feature_index,
606 		CMD_TOUCHPAD_GET_RAW_INFO, NULL, 0, &response);
607 
608 	if (ret > 0) {
609 		hid_err(hidpp->hid_dev, "%s: received protocol error 0x%02x\n",
610 			__func__, ret);
611 		return -EPROTO;
612 	}
613 	if (ret)
614 		return ret;
615 
616 	raw_info->x_size = get_unaligned_be16(&params[0]);
617 	raw_info->y_size = get_unaligned_be16(&params[2]);
618 	raw_info->z_range = params[4];
619 	raw_info->area_range = params[5];
620 	raw_info->maxcontacts = params[7];
621 	raw_info->origin = params[8];
622 	/* res is given in unit per inch */
623 	raw_info->res = get_unaligned_be16(&params[13]) * 2 / 51;
624 
625 	return ret;
626 }
627 
628 static int hidpp_touchpad_set_raw_report_state(struct hidpp_device *hidpp_dev,
629 		u8 feature_index, bool send_raw_reports,
630 		bool sensor_enhanced_settings)
631 {
632 	struct hidpp_report response;
633 
634 	/*
635 	 * Params:
636 	 *   bit 0 - enable raw
637 	 *   bit 1 - 16bit Z, no area
638 	 *   bit 2 - enhanced sensitivity
639 	 *   bit 3 - width, height (4 bits each) instead of area
640 	 *   bit 4 - send raw + gestures (degrades smoothness)
641 	 *   remaining bits - reserved
642 	 */
643 	u8 params = send_raw_reports | (sensor_enhanced_settings << 2);
644 
645 	return hidpp_send_fap_command_sync(hidpp_dev, feature_index,
646 		CMD_TOUCHPAD_SET_RAW_REPORT_STATE, &params, 1, &response);
647 }
648 
649 static void hidpp_touchpad_touch_event(u8 *data,
650 	struct hidpp_touchpad_raw_xy_finger *finger)
651 {
652 	u8 x_m = data[0] << 2;
653 	u8 y_m = data[2] << 2;
654 
655 	finger->x = x_m << 6 | data[1];
656 	finger->y = y_m << 6 | data[3];
657 
658 	finger->contact_type = data[0] >> 6;
659 	finger->contact_status = data[2] >> 6;
660 
661 	finger->z = data[4];
662 	finger->area = data[5];
663 	finger->finger_id = data[6] >> 4;
664 }
665 
666 static void hidpp_touchpad_raw_xy_event(struct hidpp_device *hidpp_dev,
667 		u8 *data, struct hidpp_touchpad_raw_xy *raw_xy)
668 {
669 	memset(raw_xy, 0, sizeof(struct hidpp_touchpad_raw_xy));
670 	raw_xy->end_of_frame = data[8] & 0x01;
671 	raw_xy->spurious_flag = (data[8] >> 1) & 0x01;
672 	raw_xy->finger_count = data[15] & 0x0f;
673 	raw_xy->button = (data[8] >> 2) & 0x01;
674 
675 	if (raw_xy->finger_count) {
676 		hidpp_touchpad_touch_event(&data[2], &raw_xy->fingers[0]);
677 		hidpp_touchpad_touch_event(&data[9], &raw_xy->fingers[1]);
678 	}
679 }
680 
681 /* ************************************************************************** */
682 /*                                                                            */
683 /* Device Support                                                             */
684 /*                                                                            */
685 /* ************************************************************************** */
686 
687 /* -------------------------------------------------------------------------- */
688 /* Touchpad HID++ devices                                                     */
689 /* -------------------------------------------------------------------------- */
690 
691 #define WTP_MANUAL_RESOLUTION				39
692 
693 struct wtp_data {
694 	struct input_dev *input;
695 	u16 x_size, y_size;
696 	u8 finger_count;
697 	u8 mt_feature_index;
698 	u8 button_feature_index;
699 	u8 maxcontacts;
700 	bool flip_y;
701 	unsigned int resolution;
702 };
703 
704 static int wtp_input_mapping(struct hid_device *hdev, struct hid_input *hi,
705 		struct hid_field *field, struct hid_usage *usage,
706 		unsigned long **bit, int *max)
707 {
708 	return -1;
709 }
710 
711 static void wtp_populate_input(struct hidpp_device *hidpp,
712 		struct input_dev *input_dev, bool origin_is_hid_core)
713 {
714 	struct wtp_data *wd = hidpp->private_data;
715 
716 	__set_bit(EV_ABS, input_dev->evbit);
717 	__set_bit(EV_KEY, input_dev->evbit);
718 	__clear_bit(EV_REL, input_dev->evbit);
719 	__clear_bit(EV_LED, input_dev->evbit);
720 
721 	input_set_abs_params(input_dev, ABS_MT_POSITION_X, 0, wd->x_size, 0, 0);
722 	input_abs_set_res(input_dev, ABS_MT_POSITION_X, wd->resolution);
723 	input_set_abs_params(input_dev, ABS_MT_POSITION_Y, 0, wd->y_size, 0, 0);
724 	input_abs_set_res(input_dev, ABS_MT_POSITION_Y, wd->resolution);
725 
726 	/* Max pressure is not given by the devices, pick one */
727 	input_set_abs_params(input_dev, ABS_MT_PRESSURE, 0, 50, 0, 0);
728 
729 	input_set_capability(input_dev, EV_KEY, BTN_LEFT);
730 
731 	if (hidpp->quirks & HIDPP_QUIRK_WTP_PHYSICAL_BUTTONS)
732 		input_set_capability(input_dev, EV_KEY, BTN_RIGHT);
733 	else
734 		__set_bit(INPUT_PROP_BUTTONPAD, input_dev->propbit);
735 
736 	input_mt_init_slots(input_dev, wd->maxcontacts, INPUT_MT_POINTER |
737 		INPUT_MT_DROP_UNUSED);
738 
739 	wd->input = input_dev;
740 }
741 
742 static void wtp_touch_event(struct wtp_data *wd,
743 	struct hidpp_touchpad_raw_xy_finger *touch_report)
744 {
745 	int slot;
746 
747 	if (!touch_report->finger_id || touch_report->contact_type)
748 		/* no actual data */
749 		return;
750 
751 	slot = input_mt_get_slot_by_key(wd->input, touch_report->finger_id);
752 
753 	input_mt_slot(wd->input, slot);
754 	input_mt_report_slot_state(wd->input, MT_TOOL_FINGER,
755 					touch_report->contact_status);
756 	if (touch_report->contact_status) {
757 		input_event(wd->input, EV_ABS, ABS_MT_POSITION_X,
758 				touch_report->x);
759 		input_event(wd->input, EV_ABS, ABS_MT_POSITION_Y,
760 				wd->flip_y ? wd->y_size - touch_report->y :
761 					     touch_report->y);
762 		input_event(wd->input, EV_ABS, ABS_MT_PRESSURE,
763 				touch_report->area);
764 	}
765 }
766 
767 static void wtp_send_raw_xy_event(struct hidpp_device *hidpp,
768 		struct hidpp_touchpad_raw_xy *raw)
769 {
770 	struct wtp_data *wd = hidpp->private_data;
771 	int i;
772 
773 	for (i = 0; i < 2; i++)
774 		wtp_touch_event(wd, &(raw->fingers[i]));
775 
776 	if (raw->end_of_frame &&
777 	    !(hidpp->quirks & HIDPP_QUIRK_WTP_PHYSICAL_BUTTONS))
778 		input_event(wd->input, EV_KEY, BTN_LEFT, raw->button);
779 
780 	if (raw->end_of_frame || raw->finger_count <= 2) {
781 		input_mt_sync_frame(wd->input);
782 		input_sync(wd->input);
783 	}
784 }
785 
786 static int wtp_mouse_raw_xy_event(struct hidpp_device *hidpp, u8 *data)
787 {
788 	struct wtp_data *wd = hidpp->private_data;
789 	u8 c1_area = ((data[7] & 0xf) * (data[7] & 0xf) +
790 		      (data[7] >> 4) * (data[7] >> 4)) / 2;
791 	u8 c2_area = ((data[13] & 0xf) * (data[13] & 0xf) +
792 		      (data[13] >> 4) * (data[13] >> 4)) / 2;
793 	struct hidpp_touchpad_raw_xy raw = {
794 		.timestamp = data[1],
795 		.fingers = {
796 			{
797 				.contact_type = 0,
798 				.contact_status = !!data[7],
799 				.x = get_unaligned_le16(&data[3]),
800 				.y = get_unaligned_le16(&data[5]),
801 				.z = c1_area,
802 				.area = c1_area,
803 				.finger_id = data[2],
804 			}, {
805 				.contact_type = 0,
806 				.contact_status = !!data[13],
807 				.x = get_unaligned_le16(&data[9]),
808 				.y = get_unaligned_le16(&data[11]),
809 				.z = c2_area,
810 				.area = c2_area,
811 				.finger_id = data[8],
812 			}
813 		},
814 		.finger_count = wd->maxcontacts,
815 		.spurious_flag = 0,
816 		.end_of_frame = (data[0] >> 7) == 0,
817 		.button = data[0] & 0x01,
818 	};
819 
820 	wtp_send_raw_xy_event(hidpp, &raw);
821 
822 	return 1;
823 }
824 
825 static int wtp_raw_event(struct hid_device *hdev, u8 *data, int size)
826 {
827 	struct hidpp_device *hidpp = hid_get_drvdata(hdev);
828 	struct wtp_data *wd = hidpp->private_data;
829 	struct hidpp_report *report = (struct hidpp_report *)data;
830 	struct hidpp_touchpad_raw_xy raw;
831 
832 	if (!wd || !wd->input)
833 		return 1;
834 
835 	switch (data[0]) {
836 	case 0x02:
837 		if (size < 2) {
838 			hid_err(hdev, "Received HID report of bad size (%d)",
839 				size);
840 			return 1;
841 		}
842 		if (hidpp->quirks & HIDPP_QUIRK_WTP_PHYSICAL_BUTTONS) {
843 			input_event(wd->input, EV_KEY, BTN_LEFT,
844 					!!(data[1] & 0x01));
845 			input_event(wd->input, EV_KEY, BTN_RIGHT,
846 					!!(data[1] & 0x02));
847 			input_sync(wd->input);
848 			return 0;
849 		} else {
850 			if (size < 21)
851 				return 1;
852 			return wtp_mouse_raw_xy_event(hidpp, &data[7]);
853 		}
854 	case REPORT_ID_HIDPP_LONG:
855 		/* size is already checked in hidpp_raw_event. */
856 		if ((report->fap.feature_index != wd->mt_feature_index) ||
857 		    (report->fap.funcindex_clientid != EVENT_TOUCHPAD_RAW_XY))
858 			return 1;
859 		hidpp_touchpad_raw_xy_event(hidpp, data + 4, &raw);
860 
861 		wtp_send_raw_xy_event(hidpp, &raw);
862 		return 0;
863 	}
864 
865 	return 0;
866 }
867 
868 static int wtp_get_config(struct hidpp_device *hidpp)
869 {
870 	struct wtp_data *wd = hidpp->private_data;
871 	struct hidpp_touchpad_raw_info raw_info = {0};
872 	u8 feature_type;
873 	int ret;
874 
875 	ret = hidpp_root_get_feature(hidpp, HIDPP_PAGE_TOUCHPAD_RAW_XY,
876 		&wd->mt_feature_index, &feature_type);
877 	if (ret)
878 		/* means that the device is not powered up */
879 		return ret;
880 
881 	ret = hidpp_touchpad_get_raw_info(hidpp, wd->mt_feature_index,
882 		&raw_info);
883 	if (ret)
884 		return ret;
885 
886 	wd->x_size = raw_info.x_size;
887 	wd->y_size = raw_info.y_size;
888 	wd->maxcontacts = raw_info.maxcontacts;
889 	wd->flip_y = raw_info.origin == TOUCHPAD_RAW_XY_ORIGIN_LOWER_LEFT;
890 	wd->resolution = raw_info.res;
891 	if (!wd->resolution)
892 		wd->resolution = WTP_MANUAL_RESOLUTION;
893 
894 	return 0;
895 }
896 
897 static int wtp_allocate(struct hid_device *hdev, const struct hid_device_id *id)
898 {
899 	struct hidpp_device *hidpp = hid_get_drvdata(hdev);
900 	struct wtp_data *wd;
901 
902 	wd = devm_kzalloc(&hdev->dev, sizeof(struct wtp_data),
903 			GFP_KERNEL);
904 	if (!wd)
905 		return -ENOMEM;
906 
907 	hidpp->private_data = wd;
908 
909 	return 0;
910 };
911 
912 static int wtp_connect(struct hid_device *hdev, bool connected)
913 {
914 	struct hidpp_device *hidpp = hid_get_drvdata(hdev);
915 	struct wtp_data *wd = hidpp->private_data;
916 	int ret;
917 
918 	if (!connected)
919 		return 0;
920 
921 	if (!wd->x_size) {
922 		ret = wtp_get_config(hidpp);
923 		if (ret) {
924 			hid_err(hdev, "Can not get wtp config: %d\n", ret);
925 			return ret;
926 		}
927 	}
928 
929 	return hidpp_touchpad_set_raw_report_state(hidpp, wd->mt_feature_index,
930 			true, true);
931 }
932 
933 /* -------------------------------------------------------------------------- */
934 /* Generic HID++ devices                                                      */
935 /* -------------------------------------------------------------------------- */
936 
937 static int hidpp_input_mapping(struct hid_device *hdev, struct hid_input *hi,
938 		struct hid_field *field, struct hid_usage *usage,
939 		unsigned long **bit, int *max)
940 {
941 	struct hidpp_device *hidpp = hid_get_drvdata(hdev);
942 
943 	if (hidpp->quirks & HIDPP_QUIRK_CLASS_WTP)
944 		return wtp_input_mapping(hdev, hi, field, usage, bit, max);
945 
946 	return 0;
947 }
948 
949 static void hidpp_populate_input(struct hidpp_device *hidpp,
950 		struct input_dev *input, bool origin_is_hid_core)
951 {
952 	if (hidpp->quirks & HIDPP_QUIRK_CLASS_WTP)
953 		wtp_populate_input(hidpp, input, origin_is_hid_core);
954 }
955 
956 static void hidpp_input_configured(struct hid_device *hdev,
957 				struct hid_input *hidinput)
958 {
959 	struct hidpp_device *hidpp = hid_get_drvdata(hdev);
960 	struct input_dev *input = hidinput->input;
961 
962 	hidpp_populate_input(hidpp, input, true);
963 }
964 
965 static int hidpp_raw_hidpp_event(struct hidpp_device *hidpp, u8 *data,
966 		int size)
967 {
968 	struct hidpp_report *question = hidpp->send_receive_buf;
969 	struct hidpp_report *answer = hidpp->send_receive_buf;
970 	struct hidpp_report *report = (struct hidpp_report *)data;
971 
972 	/*
973 	 * If the mutex is locked then we have a pending answer from a
974 	 * previously sent command.
975 	 */
976 	if (unlikely(mutex_is_locked(&hidpp->send_mutex))) {
977 		/*
978 		 * Check for a correct hidpp20 answer or the corresponding
979 		 * error
980 		 */
981 		if (hidpp_match_answer(question, report) ||
982 				hidpp_match_error(question, report)) {
983 			*answer = *report;
984 			hidpp->answer_available = true;
985 			wake_up(&hidpp->wait);
986 			/*
987 			 * This was an answer to a command that this driver sent
988 			 * We return 1 to hid-core to avoid forwarding the
989 			 * command upstream as it has been treated by the driver
990 			 */
991 
992 			return 1;
993 		}
994 	}
995 
996 	if (unlikely(hidpp_report_is_connect_event(report))) {
997 		atomic_set(&hidpp->connected,
998 				!(report->rap.params[0] & (1 << 6)));
999 		if ((hidpp->quirks & HIDPP_QUIRK_DELAYED_INIT) &&
1000 		    (schedule_work(&hidpp->work) == 0))
1001 			dbg_hid("%s: connect event already queued\n", __func__);
1002 		return 1;
1003 	}
1004 
1005 	return 0;
1006 }
1007 
1008 static int hidpp_raw_event(struct hid_device *hdev, struct hid_report *report,
1009 		u8 *data, int size)
1010 {
1011 	struct hidpp_device *hidpp = hid_get_drvdata(hdev);
1012 	int ret = 0;
1013 
1014 	/* Generic HID++ processing. */
1015 	switch (data[0]) {
1016 	case REPORT_ID_HIDPP_LONG:
1017 		if (size != HIDPP_REPORT_LONG_LENGTH) {
1018 			hid_err(hdev, "received hid++ report of bad size (%d)",
1019 				size);
1020 			return 1;
1021 		}
1022 		ret = hidpp_raw_hidpp_event(hidpp, data, size);
1023 		break;
1024 	case REPORT_ID_HIDPP_SHORT:
1025 		if (size != HIDPP_REPORT_SHORT_LENGTH) {
1026 			hid_err(hdev, "received hid++ report of bad size (%d)",
1027 				size);
1028 			return 1;
1029 		}
1030 		ret = hidpp_raw_hidpp_event(hidpp, data, size);
1031 		break;
1032 	}
1033 
1034 	/* If no report is available for further processing, skip calling
1035 	 * raw_event of subclasses. */
1036 	if (ret != 0)
1037 		return ret;
1038 
1039 	if (hidpp->quirks & HIDPP_QUIRK_CLASS_WTP)
1040 		return wtp_raw_event(hdev, data, size);
1041 
1042 	return 0;
1043 }
1044 
1045 static void hidpp_overwrite_name(struct hid_device *hdev, bool use_unifying)
1046 {
1047 	struct hidpp_device *hidpp = hid_get_drvdata(hdev);
1048 	char *name;
1049 
1050 	if (use_unifying)
1051 		/*
1052 		 * the device is connected through an Unifying receiver, and
1053 		 * might not be already connected.
1054 		 * Ask the receiver for its name.
1055 		 */
1056 		name = hidpp_get_unifying_name(hidpp);
1057 	else
1058 		name = hidpp_get_device_name(hidpp);
1059 
1060 	if (!name)
1061 		hid_err(hdev, "unable to retrieve the name of the device");
1062 	else
1063 		snprintf(hdev->name, sizeof(hdev->name), "%s", name);
1064 
1065 	kfree(name);
1066 }
1067 
1068 static int hidpp_input_open(struct input_dev *dev)
1069 {
1070 	struct hid_device *hid = input_get_drvdata(dev);
1071 
1072 	return hid_hw_open(hid);
1073 }
1074 
1075 static void hidpp_input_close(struct input_dev *dev)
1076 {
1077 	struct hid_device *hid = input_get_drvdata(dev);
1078 
1079 	hid_hw_close(hid);
1080 }
1081 
1082 static struct input_dev *hidpp_allocate_input(struct hid_device *hdev)
1083 {
1084 	struct input_dev *input_dev = devm_input_allocate_device(&hdev->dev);
1085 	struct hidpp_device *hidpp = hid_get_drvdata(hdev);
1086 
1087 	if (!input_dev)
1088 		return NULL;
1089 
1090 	input_set_drvdata(input_dev, hdev);
1091 	input_dev->open = hidpp_input_open;
1092 	input_dev->close = hidpp_input_close;
1093 
1094 	input_dev->name = hidpp->name;
1095 	input_dev->phys = hdev->phys;
1096 	input_dev->uniq = hdev->uniq;
1097 	input_dev->id.bustype = hdev->bus;
1098 	input_dev->id.vendor  = hdev->vendor;
1099 	input_dev->id.product = hdev->product;
1100 	input_dev->id.version = hdev->version;
1101 	input_dev->dev.parent = &hdev->dev;
1102 
1103 	return input_dev;
1104 }
1105 
1106 static void hidpp_connect_event(struct hidpp_device *hidpp)
1107 {
1108 	struct hid_device *hdev = hidpp->hid_dev;
1109 	int ret = 0;
1110 	bool connected = atomic_read(&hidpp->connected);
1111 	struct input_dev *input;
1112 	char *name, *devm_name;
1113 
1114 	if (hidpp->quirks & HIDPP_QUIRK_CLASS_WTP) {
1115 		ret = wtp_connect(hdev, connected);
1116 		if (ret)
1117 			return;
1118 	}
1119 
1120 	if (!connected || hidpp->delayed_input)
1121 		return;
1122 
1123 	if (!hidpp->protocol_major) {
1124 		ret = !hidpp_is_connected(hidpp);
1125 		if (ret) {
1126 			hid_err(hdev, "Can not get the protocol version.\n");
1127 			return;
1128 		}
1129 	}
1130 
1131 	/* the device is already connected, we can ask for its name and
1132 	 * protocol */
1133 	hid_info(hdev, "HID++ %u.%u device connected.\n",
1134 		 hidpp->protocol_major, hidpp->protocol_minor);
1135 
1136 	if (!hidpp->name || hidpp->name == hdev->name) {
1137 		name = hidpp_get_device_name(hidpp);
1138 		if (!name) {
1139 			hid_err(hdev,
1140 				"unable to retrieve the name of the device");
1141 			return;
1142 		}
1143 
1144 		devm_name = devm_kasprintf(&hdev->dev, GFP_KERNEL, "%s", name);
1145 		kfree(name);
1146 		if (!devm_name)
1147 			return;
1148 
1149 		hidpp->name = devm_name;
1150 	}
1151 
1152 	input = hidpp_allocate_input(hdev);
1153 	if (!input) {
1154 		hid_err(hdev, "cannot allocate new input device: %d\n", ret);
1155 		return;
1156 	}
1157 
1158 	hidpp_populate_input(hidpp, input, false);
1159 
1160 	ret = input_register_device(input);
1161 	if (ret)
1162 		input_free_device(input);
1163 
1164 	hidpp->delayed_input = input;
1165 }
1166 
1167 static int hidpp_probe(struct hid_device *hdev, const struct hid_device_id *id)
1168 {
1169 	struct hidpp_device *hidpp;
1170 	int ret;
1171 	bool connected;
1172 	unsigned int connect_mask = HID_CONNECT_DEFAULT;
1173 
1174 	hidpp = devm_kzalloc(&hdev->dev, sizeof(struct hidpp_device),
1175 			GFP_KERNEL);
1176 	if (!hidpp)
1177 		return -ENOMEM;
1178 
1179 	hidpp->hid_dev = hdev;
1180 	hidpp->name = hdev->name;
1181 	hid_set_drvdata(hdev, hidpp);
1182 
1183 	hidpp->quirks = id->driver_data;
1184 
1185 	if (disable_raw_mode) {
1186 		hidpp->quirks &= ~HIDPP_QUIRK_CLASS_WTP;
1187 		hidpp->quirks &= ~HIDPP_QUIRK_DELAYED_INIT;
1188 	}
1189 
1190 	if (hidpp->quirks & HIDPP_QUIRK_CLASS_WTP) {
1191 		ret = wtp_allocate(hdev, id);
1192 		if (ret)
1193 			goto wtp_allocate_fail;
1194 	}
1195 
1196 	INIT_WORK(&hidpp->work, delayed_work_cb);
1197 	mutex_init(&hidpp->send_mutex);
1198 	init_waitqueue_head(&hidpp->wait);
1199 
1200 	ret = hid_parse(hdev);
1201 	if (ret) {
1202 		hid_err(hdev, "%s:parse failed\n", __func__);
1203 		goto hid_parse_fail;
1204 	}
1205 
1206 	/* Allow incoming packets */
1207 	hid_device_io_start(hdev);
1208 
1209 	connected = hidpp_is_connected(hidpp);
1210 	if (id->group != HID_GROUP_LOGITECH_DJ_DEVICE) {
1211 		if (!connected) {
1212 			ret = -ENODEV;
1213 			hid_err(hdev, "Device not connected");
1214 			hid_device_io_stop(hdev);
1215 			goto hid_parse_fail;
1216 		}
1217 
1218 		hid_info(hdev, "HID++ %u.%u device connected.\n",
1219 			 hidpp->protocol_major, hidpp->protocol_minor);
1220 	}
1221 
1222 	hidpp_overwrite_name(hdev, id->group == HID_GROUP_LOGITECH_DJ_DEVICE);
1223 	atomic_set(&hidpp->connected, connected);
1224 
1225 	if (connected && (hidpp->quirks & HIDPP_QUIRK_CLASS_WTP)) {
1226 		ret = wtp_get_config(hidpp);
1227 		if (ret)
1228 			goto hid_parse_fail;
1229 	}
1230 
1231 	/* Block incoming packets */
1232 	hid_device_io_stop(hdev);
1233 
1234 	if (hidpp->quirks & HIDPP_QUIRK_DELAYED_INIT)
1235 		connect_mask &= ~HID_CONNECT_HIDINPUT;
1236 
1237 	ret = hid_hw_start(hdev, connect_mask);
1238 	if (ret) {
1239 		hid_err(hdev, "%s:hid_hw_start returned error\n", __func__);
1240 		goto hid_hw_start_fail;
1241 	}
1242 
1243 	if (hidpp->quirks & HIDPP_QUIRK_DELAYED_INIT) {
1244 		/* Allow incoming packets */
1245 		hid_device_io_start(hdev);
1246 
1247 		hidpp_connect_event(hidpp);
1248 	}
1249 
1250 	return ret;
1251 
1252 hid_hw_start_fail:
1253 hid_parse_fail:
1254 	cancel_work_sync(&hidpp->work);
1255 	mutex_destroy(&hidpp->send_mutex);
1256 wtp_allocate_fail:
1257 	hid_set_drvdata(hdev, NULL);
1258 	return ret;
1259 }
1260 
1261 static void hidpp_remove(struct hid_device *hdev)
1262 {
1263 	struct hidpp_device *hidpp = hid_get_drvdata(hdev);
1264 
1265 	cancel_work_sync(&hidpp->work);
1266 	mutex_destroy(&hidpp->send_mutex);
1267 	hid_hw_stop(hdev);
1268 }
1269 
1270 static const struct hid_device_id hidpp_devices[] = {
1271 	{ /* wireless touchpad */
1272 	  HID_DEVICE(BUS_USB, HID_GROUP_LOGITECH_DJ_DEVICE,
1273 		USB_VENDOR_ID_LOGITECH, 0x4011),
1274 	  .driver_data = HIDPP_QUIRK_CLASS_WTP | HIDPP_QUIRK_DELAYED_INIT |
1275 			 HIDPP_QUIRK_WTP_PHYSICAL_BUTTONS },
1276 	{ /* wireless touchpad T650 */
1277 	  HID_DEVICE(BUS_USB, HID_GROUP_LOGITECH_DJ_DEVICE,
1278 		USB_VENDOR_ID_LOGITECH, 0x4101),
1279 	  .driver_data = HIDPP_QUIRK_CLASS_WTP | HIDPP_QUIRK_DELAYED_INIT },
1280 	{ /* wireless touchpad T651 */
1281 	  HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_LOGITECH,
1282 		USB_DEVICE_ID_LOGITECH_T651),
1283 	  .driver_data = HIDPP_QUIRK_CLASS_WTP },
1284 
1285 	{ HID_DEVICE(BUS_USB, HID_GROUP_LOGITECH_DJ_DEVICE,
1286 		USB_VENDOR_ID_LOGITECH, HID_ANY_ID)},
1287 	{}
1288 };
1289 
1290 MODULE_DEVICE_TABLE(hid, hidpp_devices);
1291 
1292 static struct hid_driver hidpp_driver = {
1293 	.name = "logitech-hidpp-device",
1294 	.id_table = hidpp_devices,
1295 	.probe = hidpp_probe,
1296 	.remove = hidpp_remove,
1297 	.raw_event = hidpp_raw_event,
1298 	.input_configured = hidpp_input_configured,
1299 	.input_mapping = hidpp_input_mapping,
1300 };
1301 
1302 module_hid_driver(hidpp_driver);
1303