HID: move connect quirks
[pandora-kernel.git] / drivers / hid / hid-core.c
1 /*
2  *  HID support for Linux
3  *
4  *  Copyright (c) 1999 Andreas Gal
5  *  Copyright (c) 2000-2005 Vojtech Pavlik <vojtech@suse.cz>
6  *  Copyright (c) 2005 Michael Haboustak <mike-@cinci.rr.com> for Concept2, Inc
7  *  Copyright (c) 2006-2007 Jiri Kosina
8  */
9
10 /*
11  * This program is free software; you can redistribute it and/or modify it
12  * under the terms of the GNU General Public License as published by the Free
13  * Software Foundation; either version 2 of the License, or (at your option)
14  * any later version.
15  */
16
17 #include <linux/module.h>
18 #include <linux/slab.h>
19 #include <linux/init.h>
20 #include <linux/kernel.h>
21 #include <linux/list.h>
22 #include <linux/mm.h>
23 #include <linux/spinlock.h>
24 #include <asm/unaligned.h>
25 #include <asm/byteorder.h>
26 #include <linux/input.h>
27 #include <linux/wait.h>
28 #include <linux/vmalloc.h>
29 #include <linux/sched.h>
30
31 #include <linux/hid.h>
32 #include <linux/hiddev.h>
33 #include <linux/hid-debug.h>
34 #include <linux/hidraw.h>
35
36 #include "hid-ids.h"
37
38 /*
39  * Version Information
40  */
41
42 #define DRIVER_VERSION "v2.6"
43 #define DRIVER_AUTHOR "Andreas Gal, Vojtech Pavlik, Jiri Kosina"
44 #define DRIVER_DESC "HID core driver"
45 #define DRIVER_LICENSE "GPL"
46
47 #ifdef CONFIG_HID_DEBUG
48 int hid_debug = 0;
49 module_param_named(debug, hid_debug, int, 0600);
50 MODULE_PARM_DESC(debug, "HID debugging (0=off, 1=probing info, 2=continuous data dumping)");
51 EXPORT_SYMBOL_GPL(hid_debug);
52 #endif
53
54 /*
55  * Register a new report for a device.
56  */
57
58 static struct hid_report *hid_register_report(struct hid_device *device, unsigned type, unsigned id)
59 {
60         struct hid_report_enum *report_enum = device->report_enum + type;
61         struct hid_report *report;
62
63         if (report_enum->report_id_hash[id])
64                 return report_enum->report_id_hash[id];
65
66         if (!(report = kzalloc(sizeof(struct hid_report), GFP_KERNEL)))
67                 return NULL;
68
69         if (id != 0)
70                 report_enum->numbered = 1;
71
72         report->id = id;
73         report->type = type;
74         report->size = 0;
75         report->device = device;
76         report_enum->report_id_hash[id] = report;
77
78         list_add_tail(&report->list, &report_enum->report_list);
79
80         return report;
81 }
82
83 /*
84  * Register a new field for this report.
85  */
86
87 static struct hid_field *hid_register_field(struct hid_report *report, unsigned usages, unsigned values)
88 {
89         struct hid_field *field;
90
91         if (report->maxfield == HID_MAX_FIELDS) {
92                 dbg_hid("too many fields in report\n");
93                 return NULL;
94         }
95
96         if (!(field = kzalloc(sizeof(struct hid_field) + usages * sizeof(struct hid_usage)
97                 + values * sizeof(unsigned), GFP_KERNEL))) return NULL;
98
99         field->index = report->maxfield++;
100         report->field[field->index] = field;
101         field->usage = (struct hid_usage *)(field + 1);
102         field->value = (s32 *)(field->usage + usages);
103         field->report = report;
104
105         return field;
106 }
107
108 /*
109  * Open a collection. The type/usage is pushed on the stack.
110  */
111
112 static int open_collection(struct hid_parser *parser, unsigned type)
113 {
114         struct hid_collection *collection;
115         unsigned usage;
116
117         usage = parser->local.usage[0];
118
119         if (parser->collection_stack_ptr == HID_COLLECTION_STACK_SIZE) {
120                 dbg_hid("collection stack overflow\n");
121                 return -1;
122         }
123
124         if (parser->device->maxcollection == parser->device->collection_size) {
125                 collection = kmalloc(sizeof(struct hid_collection) *
126                                 parser->device->collection_size * 2, GFP_KERNEL);
127                 if (collection == NULL) {
128                         dbg_hid("failed to reallocate collection array\n");
129                         return -1;
130                 }
131                 memcpy(collection, parser->device->collection,
132                         sizeof(struct hid_collection) *
133                         parser->device->collection_size);
134                 memset(collection + parser->device->collection_size, 0,
135                         sizeof(struct hid_collection) *
136                         parser->device->collection_size);
137                 kfree(parser->device->collection);
138                 parser->device->collection = collection;
139                 parser->device->collection_size *= 2;
140         }
141
142         parser->collection_stack[parser->collection_stack_ptr++] =
143                 parser->device->maxcollection;
144
145         collection = parser->device->collection +
146                 parser->device->maxcollection++;
147         collection->type = type;
148         collection->usage = usage;
149         collection->level = parser->collection_stack_ptr - 1;
150
151         if (type == HID_COLLECTION_APPLICATION)
152                 parser->device->maxapplication++;
153
154         return 0;
155 }
156
157 /*
158  * Close a collection.
159  */
160
161 static int close_collection(struct hid_parser *parser)
162 {
163         if (!parser->collection_stack_ptr) {
164                 dbg_hid("collection stack underflow\n");
165                 return -1;
166         }
167         parser->collection_stack_ptr--;
168         return 0;
169 }
170
171 /*
172  * Climb up the stack, search for the specified collection type
173  * and return the usage.
174  */
175
176 static unsigned hid_lookup_collection(struct hid_parser *parser, unsigned type)
177 {
178         int n;
179         for (n = parser->collection_stack_ptr - 1; n >= 0; n--)
180                 if (parser->device->collection[parser->collection_stack[n]].type == type)
181                         return parser->device->collection[parser->collection_stack[n]].usage;
182         return 0; /* we know nothing about this usage type */
183 }
184
185 /*
186  * Add a usage to the temporary parser table.
187  */
188
189 static int hid_add_usage(struct hid_parser *parser, unsigned usage)
190 {
191         if (parser->local.usage_index >= HID_MAX_USAGES) {
192                 dbg_hid("usage index exceeded\n");
193                 return -1;
194         }
195         parser->local.usage[parser->local.usage_index] = usage;
196         parser->local.collection_index[parser->local.usage_index] =
197                 parser->collection_stack_ptr ?
198                 parser->collection_stack[parser->collection_stack_ptr - 1] : 0;
199         parser->local.usage_index++;
200         return 0;
201 }
202
203 /*
204  * Register a new field for this report.
205  */
206
207 static int hid_add_field(struct hid_parser *parser, unsigned report_type, unsigned flags)
208 {
209         struct hid_report *report;
210         struct hid_field *field;
211         int usages;
212         unsigned offset;
213         int i;
214
215         if (!(report = hid_register_report(parser->device, report_type, parser->global.report_id))) {
216                 dbg_hid("hid_register_report failed\n");
217                 return -1;
218         }
219
220         if (parser->global.logical_maximum < parser->global.logical_minimum) {
221                 dbg_hid("logical range invalid %d %d\n", parser->global.logical_minimum, parser->global.logical_maximum);
222                 return -1;
223         }
224
225         offset = report->size;
226         report->size += parser->global.report_size * parser->global.report_count;
227
228         if (!parser->local.usage_index) /* Ignore padding fields */
229                 return 0;
230
231         usages = max_t(int, parser->local.usage_index, parser->global.report_count);
232
233         if ((field = hid_register_field(report, usages, parser->global.report_count)) == NULL)
234                 return 0;
235
236         field->physical = hid_lookup_collection(parser, HID_COLLECTION_PHYSICAL);
237         field->logical = hid_lookup_collection(parser, HID_COLLECTION_LOGICAL);
238         field->application = hid_lookup_collection(parser, HID_COLLECTION_APPLICATION);
239
240         for (i = 0; i < usages; i++) {
241                 int j = i;
242                 /* Duplicate the last usage we parsed if we have excess values */
243                 if (i >= parser->local.usage_index)
244                         j = parser->local.usage_index - 1;
245                 field->usage[i].hid = parser->local.usage[j];
246                 field->usage[i].collection_index =
247                         parser->local.collection_index[j];
248         }
249
250         field->maxusage = usages;
251         field->flags = flags;
252         field->report_offset = offset;
253         field->report_type = report_type;
254         field->report_size = parser->global.report_size;
255         field->report_count = parser->global.report_count;
256         field->logical_minimum = parser->global.logical_minimum;
257         field->logical_maximum = parser->global.logical_maximum;
258         field->physical_minimum = parser->global.physical_minimum;
259         field->physical_maximum = parser->global.physical_maximum;
260         field->unit_exponent = parser->global.unit_exponent;
261         field->unit = parser->global.unit;
262
263         return 0;
264 }
265
266 /*
267  * Read data value from item.
268  */
269
270 static u32 item_udata(struct hid_item *item)
271 {
272         switch (item->size) {
273         case 1: return item->data.u8;
274         case 2: return item->data.u16;
275         case 4: return item->data.u32;
276         }
277         return 0;
278 }
279
280 static s32 item_sdata(struct hid_item *item)
281 {
282         switch (item->size) {
283         case 1: return item->data.s8;
284         case 2: return item->data.s16;
285         case 4: return item->data.s32;
286         }
287         return 0;
288 }
289
290 /*
291  * Process a global item.
292  */
293
294 static int hid_parser_global(struct hid_parser *parser, struct hid_item *item)
295 {
296         switch (item->tag) {
297         case HID_GLOBAL_ITEM_TAG_PUSH:
298
299                 if (parser->global_stack_ptr == HID_GLOBAL_STACK_SIZE) {
300                         dbg_hid("global enviroment stack overflow\n");
301                         return -1;
302                 }
303
304                 memcpy(parser->global_stack + parser->global_stack_ptr++,
305                         &parser->global, sizeof(struct hid_global));
306                 return 0;
307
308         case HID_GLOBAL_ITEM_TAG_POP:
309
310                 if (!parser->global_stack_ptr) {
311                         dbg_hid("global enviroment stack underflow\n");
312                         return -1;
313                 }
314
315                 memcpy(&parser->global, parser->global_stack +
316                         --parser->global_stack_ptr, sizeof(struct hid_global));
317                 return 0;
318
319         case HID_GLOBAL_ITEM_TAG_USAGE_PAGE:
320                 parser->global.usage_page = item_udata(item);
321                 return 0;
322
323         case HID_GLOBAL_ITEM_TAG_LOGICAL_MINIMUM:
324                 parser->global.logical_minimum = item_sdata(item);
325                 return 0;
326
327         case HID_GLOBAL_ITEM_TAG_LOGICAL_MAXIMUM:
328                 if (parser->global.logical_minimum < 0)
329                         parser->global.logical_maximum = item_sdata(item);
330                 else
331                         parser->global.logical_maximum = item_udata(item);
332                 return 0;
333
334         case HID_GLOBAL_ITEM_TAG_PHYSICAL_MINIMUM:
335                 parser->global.physical_minimum = item_sdata(item);
336                 return 0;
337
338         case HID_GLOBAL_ITEM_TAG_PHYSICAL_MAXIMUM:
339                 if (parser->global.physical_minimum < 0)
340                         parser->global.physical_maximum = item_sdata(item);
341                 else
342                         parser->global.physical_maximum = item_udata(item);
343                 return 0;
344
345         case HID_GLOBAL_ITEM_TAG_UNIT_EXPONENT:
346                 parser->global.unit_exponent = item_sdata(item);
347                 return 0;
348
349         case HID_GLOBAL_ITEM_TAG_UNIT:
350                 parser->global.unit = item_udata(item);
351                 return 0;
352
353         case HID_GLOBAL_ITEM_TAG_REPORT_SIZE:
354                 parser->global.report_size = item_udata(item);
355                 if (parser->global.report_size > 32) {
356                         dbg_hid("invalid report_size %d\n",
357                                         parser->global.report_size);
358                         return -1;
359                 }
360                 return 0;
361
362         case HID_GLOBAL_ITEM_TAG_REPORT_COUNT:
363                 parser->global.report_count = item_udata(item);
364                 if (parser->global.report_count > HID_MAX_USAGES) {
365                         dbg_hid("invalid report_count %d\n",
366                                         parser->global.report_count);
367                         return -1;
368                 }
369                 return 0;
370
371         case HID_GLOBAL_ITEM_TAG_REPORT_ID:
372                 parser->global.report_id = item_udata(item);
373                 if (parser->global.report_id == 0) {
374                         dbg_hid("report_id 0 is invalid\n");
375                         return -1;
376                 }
377                 return 0;
378
379         default:
380                 dbg_hid("unknown global tag 0x%x\n", item->tag);
381                 return -1;
382         }
383 }
384
385 /*
386  * Process a local item.
387  */
388
389 static int hid_parser_local(struct hid_parser *parser, struct hid_item *item)
390 {
391         __u32 data;
392         unsigned n;
393
394         if (item->size == 0) {
395                 dbg_hid("item data expected for local item\n");
396                 return -1;
397         }
398
399         data = item_udata(item);
400
401         switch (item->tag) {
402         case HID_LOCAL_ITEM_TAG_DELIMITER:
403
404                 if (data) {
405                         /*
406                          * We treat items before the first delimiter
407                          * as global to all usage sets (branch 0).
408                          * In the moment we process only these global
409                          * items and the first delimiter set.
410                          */
411                         if (parser->local.delimiter_depth != 0) {
412                                 dbg_hid("nested delimiters\n");
413                                 return -1;
414                         }
415                         parser->local.delimiter_depth++;
416                         parser->local.delimiter_branch++;
417                 } else {
418                         if (parser->local.delimiter_depth < 1) {
419                                 dbg_hid("bogus close delimiter\n");
420                                 return -1;
421                         }
422                         parser->local.delimiter_depth--;
423                 }
424                 return 1;
425
426         case HID_LOCAL_ITEM_TAG_USAGE:
427
428                 if (parser->local.delimiter_branch > 1) {
429                         dbg_hid("alternative usage ignored\n");
430                         return 0;
431                 }
432
433                 if (item->size <= 2)
434                         data = (parser->global.usage_page << 16) + data;
435
436                 return hid_add_usage(parser, data);
437
438         case HID_LOCAL_ITEM_TAG_USAGE_MINIMUM:
439
440                 if (parser->local.delimiter_branch > 1) {
441                         dbg_hid("alternative usage ignored\n");
442                         return 0;
443                 }
444
445                 if (item->size <= 2)
446                         data = (parser->global.usage_page << 16) + data;
447
448                 parser->local.usage_minimum = data;
449                 return 0;
450
451         case HID_LOCAL_ITEM_TAG_USAGE_MAXIMUM:
452
453                 if (parser->local.delimiter_branch > 1) {
454                         dbg_hid("alternative usage ignored\n");
455                         return 0;
456                 }
457
458                 if (item->size <= 2)
459                         data = (parser->global.usage_page << 16) + data;
460
461                 for (n = parser->local.usage_minimum; n <= data; n++)
462                         if (hid_add_usage(parser, n)) {
463                                 dbg_hid("hid_add_usage failed\n");
464                                 return -1;
465                         }
466                 return 0;
467
468         default:
469
470                 dbg_hid("unknown local item tag 0x%x\n", item->tag);
471                 return 0;
472         }
473         return 0;
474 }
475
476 /*
477  * Process a main item.
478  */
479
480 static int hid_parser_main(struct hid_parser *parser, struct hid_item *item)
481 {
482         __u32 data;
483         int ret;
484
485         data = item_udata(item);
486
487         switch (item->tag) {
488         case HID_MAIN_ITEM_TAG_BEGIN_COLLECTION:
489                 ret = open_collection(parser, data & 0xff);
490                 break;
491         case HID_MAIN_ITEM_TAG_END_COLLECTION:
492                 ret = close_collection(parser);
493                 break;
494         case HID_MAIN_ITEM_TAG_INPUT:
495                 ret = hid_add_field(parser, HID_INPUT_REPORT, data);
496                 break;
497         case HID_MAIN_ITEM_TAG_OUTPUT:
498                 ret = hid_add_field(parser, HID_OUTPUT_REPORT, data);
499                 break;
500         case HID_MAIN_ITEM_TAG_FEATURE:
501                 ret = hid_add_field(parser, HID_FEATURE_REPORT, data);
502                 break;
503         default:
504                 dbg_hid("unknown main item tag 0x%x\n", item->tag);
505                 ret = 0;
506         }
507
508         memset(&parser->local, 0, sizeof(parser->local));       /* Reset the local parser environment */
509
510         return ret;
511 }
512
513 /*
514  * Process a reserved item.
515  */
516
517 static int hid_parser_reserved(struct hid_parser *parser, struct hid_item *item)
518 {
519         dbg_hid("reserved item type, tag 0x%x\n", item->tag);
520         return 0;
521 }
522
523 /*
524  * Free a report and all registered fields. The field->usage and
525  * field->value table's are allocated behind the field, so we need
526  * only to free(field) itself.
527  */
528
529 static void hid_free_report(struct hid_report *report)
530 {
531         unsigned n;
532
533         for (n = 0; n < report->maxfield; n++)
534                 kfree(report->field[n]);
535         kfree(report);
536 }
537
538 /*
539  * Free a device structure, all reports, and all fields.
540  */
541
542 static void hid_device_release(struct device *dev)
543 {
544         struct hid_device *device = container_of(dev, struct hid_device, dev);
545         unsigned i, j;
546
547         for (i = 0; i < HID_REPORT_TYPES; i++) {
548                 struct hid_report_enum *report_enum = device->report_enum + i;
549
550                 for (j = 0; j < 256; j++) {
551                         struct hid_report *report = report_enum->report_id_hash[j];
552                         if (report)
553                                 hid_free_report(report);
554                 }
555         }
556
557         kfree(device->rdesc);
558         kfree(device->collection);
559         kfree(device);
560 }
561
562 /*
563  * Fetch a report description item from the data stream. We support long
564  * items, though they are not used yet.
565  */
566
567 static u8 *fetch_item(__u8 *start, __u8 *end, struct hid_item *item)
568 {
569         u8 b;
570
571         if ((end - start) <= 0)
572                 return NULL;
573
574         b = *start++;
575
576         item->type = (b >> 2) & 3;
577         item->tag  = (b >> 4) & 15;
578
579         if (item->tag == HID_ITEM_TAG_LONG) {
580
581                 item->format = HID_ITEM_FORMAT_LONG;
582
583                 if ((end - start) < 2)
584                         return NULL;
585
586                 item->size = *start++;
587                 item->tag  = *start++;
588
589                 if ((end - start) < item->size)
590                         return NULL;
591
592                 item->data.longdata = start;
593                 start += item->size;
594                 return start;
595         }
596
597         item->format = HID_ITEM_FORMAT_SHORT;
598         item->size = b & 3;
599
600         switch (item->size) {
601         case 0:
602                 return start;
603
604         case 1:
605                 if ((end - start) < 1)
606                         return NULL;
607                 item->data.u8 = *start++;
608                 return start;
609
610         case 2:
611                 if ((end - start) < 2)
612                         return NULL;
613                 item->data.u16 = get_unaligned_le16(start);
614                 start = (__u8 *)((__le16 *)start + 1);
615                 return start;
616
617         case 3:
618                 item->size++;
619                 if ((end - start) < 4)
620                         return NULL;
621                 item->data.u32 = get_unaligned_le32(start);
622                 start = (__u8 *)((__le32 *)start + 1);
623                 return start;
624         }
625
626         return NULL;
627 }
628
629 /**
630  * hid_parse_report - parse device report
631  *
632  * @device: hid device
633  * @start: report start
634  * @size: report size
635  *
636  * Parse a report description into a hid_device structure. Reports are
637  * enumerated, fields are attached to these reports.
638  * 0 returned on success, otherwise nonzero error value.
639  */
640 int hid_parse_report(struct hid_device *device, __u8 *start,
641                 unsigned size)
642 {
643         struct hid_parser *parser;
644         struct hid_item item;
645         __u8 *end;
646         int ret;
647         static int (*dispatch_type[])(struct hid_parser *parser,
648                                       struct hid_item *item) = {
649                 hid_parser_main,
650                 hid_parser_global,
651                 hid_parser_local,
652                 hid_parser_reserved
653         };
654
655         if (device->driver->report_fixup)
656                 device->driver->report_fixup(device, start, size);
657
658         device->rdesc = kmalloc(size, GFP_KERNEL);
659         if (device->rdesc == NULL)
660                 return -ENOMEM;
661         memcpy(device->rdesc, start, size);
662         device->rsize = size;
663
664         parser = vmalloc(sizeof(struct hid_parser));
665         if (!parser) {
666                 ret = -ENOMEM;
667                 goto err;
668         }
669
670         memset(parser, 0, sizeof(struct hid_parser));
671         parser->device = device;
672
673         end = start + size;
674         ret = -EINVAL;
675         while ((start = fetch_item(start, end, &item)) != NULL) {
676
677                 if (item.format != HID_ITEM_FORMAT_SHORT) {
678                         dbg_hid("unexpected long global item\n");
679                         goto err;
680                 }
681
682                 if (dispatch_type[item.type](parser, &item)) {
683                         dbg_hid("item %u %u %u %u parsing failed\n",
684                                 item.format, (unsigned)item.size, (unsigned)item.type, (unsigned)item.tag);
685                         goto err;
686                 }
687
688                 if (start == end) {
689                         if (parser->collection_stack_ptr) {
690                                 dbg_hid("unbalanced collection at end of report description\n");
691                                 goto err;
692                         }
693                         if (parser->local.delimiter_depth) {
694                                 dbg_hid("unbalanced delimiter at end of report description\n");
695                                 goto err;
696                         }
697                         vfree(parser);
698                         return 0;
699                 }
700         }
701
702         dbg_hid("item fetching failed at offset %d\n", (int)(end - start));
703 err:
704         vfree(parser);
705         return ret;
706 }
707 EXPORT_SYMBOL_GPL(hid_parse_report);
708
709 /*
710  * Convert a signed n-bit integer to signed 32-bit integer. Common
711  * cases are done through the compiler, the screwed things has to be
712  * done by hand.
713  */
714
715 static s32 snto32(__u32 value, unsigned n)
716 {
717         switch (n) {
718         case 8:  return ((__s8)value);
719         case 16: return ((__s16)value);
720         case 32: return ((__s32)value);
721         }
722         return value & (1 << (n - 1)) ? value | (-1 << n) : value;
723 }
724
725 /*
726  * Convert a signed 32-bit integer to a signed n-bit integer.
727  */
728
729 static u32 s32ton(__s32 value, unsigned n)
730 {
731         s32 a = value >> (n - 1);
732         if (a && a != -1)
733                 return value < 0 ? 1 << (n - 1) : (1 << (n - 1)) - 1;
734         return value & ((1 << n) - 1);
735 }
736
737 /*
738  * Extract/implement a data field from/to a little endian report (bit array).
739  *
740  * Code sort-of follows HID spec:
741  *     http://www.usb.org/developers/devclass_docs/HID1_11.pdf
742  *
743  * While the USB HID spec allows unlimited length bit fields in "report
744  * descriptors", most devices never use more than 16 bits.
745  * One model of UPS is claimed to report "LINEV" as a 32-bit field.
746  * Search linux-kernel and linux-usb-devel archives for "hid-core extract".
747  */
748
749 static __inline__ __u32 extract(__u8 *report, unsigned offset, unsigned n)
750 {
751         u64 x;
752
753         if (n > 32)
754                 printk(KERN_WARNING "HID: extract() called with n (%d) > 32! (%s)\n",
755                                 n, current->comm);
756
757         report += offset >> 3;  /* adjust byte index */
758         offset &= 7;            /* now only need bit offset into one byte */
759         x = get_unaligned_le64(report);
760         x = (x >> offset) & ((1ULL << n) - 1);  /* extract bit field */
761         return (u32) x;
762 }
763
764 /*
765  * "implement" : set bits in a little endian bit stream.
766  * Same concepts as "extract" (see comments above).
767  * The data mangled in the bit stream remains in little endian
768  * order the whole time. It make more sense to talk about
769  * endianness of register values by considering a register
770  * a "cached" copy of the little endiad bit stream.
771  */
772 static __inline__ void implement(__u8 *report, unsigned offset, unsigned n, __u32 value)
773 {
774         u64 x;
775         u64 m = (1ULL << n) - 1;
776
777         if (n > 32)
778                 printk(KERN_WARNING "HID: implement() called with n (%d) > 32! (%s)\n",
779                                 n, current->comm);
780
781         if (value > m)
782                 printk(KERN_WARNING "HID: implement() called with too large value %d! (%s)\n",
783                                 value, current->comm);
784         WARN_ON(value > m);
785         value &= m;
786
787         report += offset >> 3;
788         offset &= 7;
789
790         x = get_unaligned_le64(report);
791         x &= ~(m << offset);
792         x |= ((u64)value) << offset;
793         put_unaligned_le64(x, report);
794 }
795
796 /*
797  * Search an array for a value.
798  */
799
800 static __inline__ int search(__s32 *array, __s32 value, unsigned n)
801 {
802         while (n--) {
803                 if (*array++ == value)
804                         return 0;
805         }
806         return -1;
807 }
808
809 /**
810  * hid_match_report - check if driver's raw_event should be called
811  *
812  * @hid: hid device
813  * @report_type: type to match against
814  *
815  * compare hid->driver->report_table->report_type to report->type
816  */
817 static int hid_match_report(struct hid_device *hid, struct hid_report *report)
818 {
819         const struct hid_report_id *id = hid->driver->report_table;
820
821         if (!id) /* NULL means all */
822                 return 1;
823
824         for (; id->report_type != HID_TERMINATOR; id++)
825                 if (id->report_type == HID_ANY_ID ||
826                                 id->report_type == report->type)
827                         return 1;
828         return 0;
829 }
830
831 /**
832  * hid_match_usage - check if driver's event should be called
833  *
834  * @hid: hid device
835  * @usage: usage to match against
836  *
837  * compare hid->driver->usage_table->usage_{type,code} to
838  * usage->usage_{type,code}
839  */
840 static int hid_match_usage(struct hid_device *hid, struct hid_usage *usage)
841 {
842         const struct hid_usage_id *id = hid->driver->usage_table;
843
844         if (!id) /* NULL means all */
845                 return 1;
846
847         for (; id->usage_type != HID_ANY_ID - 1; id++)
848                 if ((id->usage_hid == HID_ANY_ID ||
849                                 id->usage_hid == usage->hid) &&
850                                 (id->usage_type == HID_ANY_ID ||
851                                 id->usage_type == usage->type) &&
852                                 (id->usage_code == HID_ANY_ID ||
853                                  id->usage_code == usage->code))
854                         return 1;
855         return 0;
856 }
857
858 static void hid_process_event(struct hid_device *hid, struct hid_field *field,
859                 struct hid_usage *usage, __s32 value, int interrupt)
860 {
861         struct hid_driver *hdrv = hid->driver;
862         int ret;
863
864         hid_dump_input(usage, value);
865
866         if (hdrv && hdrv->event && hid_match_usage(hid, usage)) {
867                 ret = hdrv->event(hid, field, usage, value);
868                 if (ret != 0) {
869                         if (ret < 0)
870                                 dbg_hid("%s's event failed with %d\n",
871                                                 hdrv->name, ret);
872                         return;
873                 }
874         }
875
876         if (hid->claimed & HID_CLAIMED_INPUT)
877                 hidinput_hid_event(hid, field, usage, value);
878         if (hid->claimed & HID_CLAIMED_HIDDEV && interrupt && hid->hiddev_hid_event)
879                 hid->hiddev_hid_event(hid, field, usage, value);
880 }
881
882 /*
883  * Analyse a received field, and fetch the data from it. The field
884  * content is stored for next report processing (we do differential
885  * reporting to the layer).
886  */
887
888 static void hid_input_field(struct hid_device *hid, struct hid_field *field,
889                             __u8 *data, int interrupt)
890 {
891         unsigned n;
892         unsigned count = field->report_count;
893         unsigned offset = field->report_offset;
894         unsigned size = field->report_size;
895         __s32 min = field->logical_minimum;
896         __s32 max = field->logical_maximum;
897         __s32 *value;
898
899         if (!(value = kmalloc(sizeof(__s32) * count, GFP_ATOMIC)))
900                 return;
901
902         for (n = 0; n < count; n++) {
903
904                         value[n] = min < 0 ? snto32(extract(data, offset + n * size, size), size) :
905                                                     extract(data, offset + n * size, size);
906
907                         if (!(field->flags & HID_MAIN_ITEM_VARIABLE) /* Ignore report if ErrorRollOver */
908                             && value[n] >= min && value[n] <= max
909                             && field->usage[value[n] - min].hid == HID_UP_KEYBOARD + 1)
910                                 goto exit;
911         }
912
913         for (n = 0; n < count; n++) {
914
915                 if (HID_MAIN_ITEM_VARIABLE & field->flags) {
916                         hid_process_event(hid, field, &field->usage[n], value[n], interrupt);
917                         continue;
918                 }
919
920                 if (field->value[n] >= min && field->value[n] <= max
921                         && field->usage[field->value[n] - min].hid
922                         && search(value, field->value[n], count))
923                                 hid_process_event(hid, field, &field->usage[field->value[n] - min], 0, interrupt);
924
925                 if (value[n] >= min && value[n] <= max
926                         && field->usage[value[n] - min].hid
927                         && search(field->value, value[n], count))
928                                 hid_process_event(hid, field, &field->usage[value[n] - min], 1, interrupt);
929         }
930
931         memcpy(field->value, value, count * sizeof(__s32));
932 exit:
933         kfree(value);
934 }
935
936 /*
937  * Output the field into the report.
938  */
939
940 static void hid_output_field(struct hid_field *field, __u8 *data)
941 {
942         unsigned count = field->report_count;
943         unsigned offset = field->report_offset;
944         unsigned size = field->report_size;
945         unsigned bitsused = offset + count * size;
946         unsigned n;
947
948         /* make sure the unused bits in the last byte are zeros */
949         if (count > 0 && size > 0 && (bitsused % 8) != 0)
950                 data[(bitsused-1)/8] &= (1 << (bitsused % 8)) - 1;
951
952         for (n = 0; n < count; n++) {
953                 if (field->logical_minimum < 0) /* signed values */
954                         implement(data, offset + n * size, size, s32ton(field->value[n], size));
955                 else                            /* unsigned values */
956                         implement(data, offset + n * size, size, field->value[n]);
957         }
958 }
959
960 /*
961  * Create a report.
962  */
963
964 void hid_output_report(struct hid_report *report, __u8 *data)
965 {
966         unsigned n;
967
968         if (report->id > 0)
969                 *data++ = report->id;
970
971         for (n = 0; n < report->maxfield; n++)
972                 hid_output_field(report->field[n], data);
973 }
974 EXPORT_SYMBOL_GPL(hid_output_report);
975
976 /*
977  * Set a field value. The report this field belongs to has to be
978  * created and transferred to the device, to set this value in the
979  * device.
980  */
981
982 int hid_set_field(struct hid_field *field, unsigned offset, __s32 value)
983 {
984         unsigned size = field->report_size;
985
986         hid_dump_input(field->usage + offset, value);
987
988         if (offset >= field->report_count) {
989                 dbg_hid("offset (%d) exceeds report_count (%d)\n", offset, field->report_count);
990                 hid_dump_field(field, 8);
991                 return -1;
992         }
993         if (field->logical_minimum < 0) {
994                 if (value != snto32(s32ton(value, size), size)) {
995                         dbg_hid("value %d is out of range\n", value);
996                         return -1;
997                 }
998         }
999         field->value[offset] = value;
1000         return 0;
1001 }
1002 EXPORT_SYMBOL_GPL(hid_set_field);
1003
1004 static struct hid_report *hid_get_report(struct hid_report_enum *report_enum,
1005                 const u8 *data)
1006 {
1007         struct hid_report *report;
1008         unsigned int n = 0;     /* Normally report number is 0 */
1009
1010         /* Device uses numbered reports, data[0] is report number */
1011         if (report_enum->numbered)
1012                 n = *data;
1013
1014         report = report_enum->report_id_hash[n];
1015         if (report == NULL)
1016                 dbg_hid("undefined report_id %u received\n", n);
1017
1018         return report;
1019 }
1020
1021 void hid_report_raw_event(struct hid_device *hid, int type, u8 *data, int size,
1022                 int interrupt)
1023 {
1024         struct hid_report_enum *report_enum = hid->report_enum + type;
1025         struct hid_report *report;
1026         unsigned int a;
1027         int rsize, csize = size;
1028         u8 *cdata = data;
1029
1030         report = hid_get_report(report_enum, data);
1031         if (!report)
1032                 return;
1033
1034         if (report_enum->numbered) {
1035                 cdata++;
1036                 csize--;
1037         }
1038
1039         rsize = ((report->size - 1) >> 3) + 1;
1040
1041         if (csize < rsize) {
1042                 dbg_hid("report %d is too short, (%d < %d)\n", report->id,
1043                                 csize, rsize);
1044                 memset(cdata + csize, 0, rsize - csize);
1045         }
1046
1047         if ((hid->claimed & HID_CLAIMED_HIDDEV) && hid->hiddev_report_event)
1048                 hid->hiddev_report_event(hid, report);
1049         if (hid->claimed & HID_CLAIMED_HIDRAW) {
1050                 /* numbered reports need to be passed with the report num */
1051                 if (report_enum->numbered)
1052                         hidraw_report_event(hid, data - 1, size + 1);
1053                 else
1054                         hidraw_report_event(hid, data, size);
1055         }
1056
1057         for (a = 0; a < report->maxfield; a++)
1058                 hid_input_field(hid, report->field[a], cdata, interrupt);
1059
1060         if (hid->claimed & HID_CLAIMED_INPUT)
1061                 hidinput_report_event(hid, report);
1062 }
1063 EXPORT_SYMBOL_GPL(hid_report_raw_event);
1064
1065 /**
1066  * hid_input_report - report data from lower layer (usb, bt...)
1067  *
1068  * @hid: hid device
1069  * @type: HID report type (HID_*_REPORT)
1070  * @data: report contents
1071  * @size: size of data parameter
1072  * @interrupt: called from atomic?
1073  *
1074  * This is data entry for lower layers.
1075  */
1076 int hid_input_report(struct hid_device *hid, int type, u8 *data, int size, int interrupt)
1077 {
1078         struct hid_report_enum *report_enum = hid->report_enum + type;
1079         struct hid_driver *hdrv = hid->driver;
1080         struct hid_report *report;
1081         unsigned int i;
1082         int ret;
1083
1084         if (!hid || !hid->driver)
1085                 return -ENODEV;
1086
1087         if (!size) {
1088                 dbg_hid("empty report\n");
1089                 return -1;
1090         }
1091
1092         dbg_hid("report (size %u) (%snumbered)\n", size, report_enum->numbered ? "" : "un");
1093
1094         report = hid_get_report(report_enum, data);
1095         if (!report)
1096                 return -1;
1097
1098         /* dump the report */
1099         dbg_hid("report %d (size %u) = ", report->id, size);
1100         for (i = 0; i < size; i++)
1101                 dbg_hid_line(" %02x", data[i]);
1102         dbg_hid_line("\n");
1103
1104         if (hdrv && hdrv->raw_event && hid_match_report(hid, report)) {
1105                 ret = hdrv->raw_event(hid, report, data, size);
1106                 if (ret != 0)
1107                         return ret < 0 ? ret : 0;
1108         }
1109
1110         hid_report_raw_event(hid, type, data, size, interrupt);
1111
1112         return 0;
1113 }
1114 EXPORT_SYMBOL_GPL(hid_input_report);
1115
1116 int hid_connect(struct hid_device *hdev, unsigned int connect_mask)
1117 {
1118         static const char *types[] = { "Device", "Pointer", "Mouse", "Device",
1119                 "Joystick", "Gamepad", "Keyboard", "Keypad",
1120                 "Multi-Axis Controller"
1121         };
1122         const char *type, *bus;
1123         char buf[64];
1124         unsigned int i;
1125         int len;
1126
1127         if (hdev->bus != BUS_USB)
1128                 connect_mask &= ~HID_CONNECT_HIDDEV;
1129
1130         if ((connect_mask & HID_CONNECT_HIDINPUT) && !hidinput_connect(hdev,
1131                                 connect_mask & HID_CONNECT_HIDINPUT_FORCE))
1132                 hdev->claimed |= HID_CLAIMED_INPUT;
1133         if ((connect_mask & HID_CONNECT_HIDDEV) && hdev->hiddev_connect &&
1134                         !hdev->hiddev_connect(hdev,
1135                                 connect_mask & HID_CONNECT_HIDDEV_FORCE))
1136                 hdev->claimed |= HID_CLAIMED_HIDDEV;
1137         if ((connect_mask & HID_CONNECT_HIDRAW) && !hidraw_connect(hdev))
1138                 hdev->claimed |= HID_CLAIMED_HIDRAW;
1139
1140         if (!hdev->claimed) {
1141                 dev_err(&hdev->dev, "claimed by neither input, hiddev nor "
1142                                 "hidraw\n");
1143                 return -ENODEV;
1144         }
1145
1146         if ((hdev->claimed & HID_CLAIMED_INPUT) &&
1147                         (connect_mask & HID_CONNECT_FF) && hdev->ff_init)
1148                 hdev->ff_init(hdev);
1149
1150         len = 0;
1151         if (hdev->claimed & HID_CLAIMED_INPUT)
1152                 len += sprintf(buf + len, "input");
1153         if (hdev->claimed & HID_CLAIMED_HIDDEV)
1154                 len += sprintf(buf + len, "%shiddev%d", len ? "," : "",
1155                                 hdev->minor);
1156         if (hdev->claimed & HID_CLAIMED_HIDRAW)
1157                 len += sprintf(buf + len, "%shidraw%d", len ? "," : "",
1158                                 ((struct hidraw *)hdev->hidraw)->minor);
1159
1160         type = "Device";
1161         for (i = 0; i < hdev->maxcollection; i++) {
1162                 struct hid_collection *col = &hdev->collection[i];
1163                 if (col->type == HID_COLLECTION_APPLICATION &&
1164                    (col->usage & HID_USAGE_PAGE) == HID_UP_GENDESK &&
1165                    (col->usage & 0xffff) < ARRAY_SIZE(types)) {
1166                         type = types[col->usage & 0xffff];
1167                         break;
1168                 }
1169         }
1170
1171         switch (hdev->bus) {
1172         case BUS_USB:
1173                 bus = "USB";
1174                 break;
1175         case BUS_BLUETOOTH:
1176                 bus = "BLUETOOTH";
1177                 break;
1178         default:
1179                 bus = "<UNKNOWN>";
1180         }
1181
1182         dev_info(&hdev->dev, "%s: %s HID v%x.%02x %s [%s] on %s\n",
1183                         buf, bus, hdev->version >> 8, hdev->version & 0xff,
1184                         type, hdev->name, hdev->phys);
1185
1186         return 0;
1187 }
1188 EXPORT_SYMBOL_GPL(hid_connect);
1189
1190 static bool hid_match_one_id(struct hid_device *hdev,
1191                 const struct hid_device_id *id)
1192 {
1193         return id->bus == hdev->bus &&
1194                 (id->vendor == HID_ANY_ID || id->vendor == hdev->vendor) &&
1195                 (id->product == HID_ANY_ID || id->product == hdev->product);
1196 }
1197
1198 static const struct hid_device_id *hid_match_id(struct hid_device *hdev,
1199                 const struct hid_device_id *id)
1200 {
1201         for (; id->bus; id++)
1202                 if (hid_match_one_id(hdev, id))
1203                         return id;
1204
1205         return NULL;
1206 }
1207
1208 static const struct hid_device_id hid_blacklist[] = {
1209         { HID_USB_DEVICE(USB_VENDOR_ID_A4TECH, USB_DEVICE_ID_A4TECH_WCP32PU) },
1210         { HID_USB_DEVICE(USB_VENDOR_ID_A4TECH, USB_DEVICE_ID_A4TECH_X5_005D) },
1211         { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_IRCONTROL4) },
1212         { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_MIGHTYMOUSE) },
1213         { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_FOUNTAIN_ANSI) },
1214         { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_FOUNTAIN_ISO) },
1215         { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER_ANSI) },
1216         { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER_ISO) },
1217         { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER_JIS) },
1218         { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER3_ANSI) },
1219         { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER3_ISO) },
1220         { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER3_JIS) },
1221         { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER4_ANSI) },
1222         { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER4_ISO) },
1223         { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER4_JIS) },
1224         { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_ANSI) },
1225         { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_ISO) },
1226         { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_JIS) },
1227         { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER4_HF_ANSI) },
1228         { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER4_HF_ISO) },
1229         { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER4_HF_JIS) },
1230         { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_ANSI) },
1231         { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_ISO) },
1232         { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_JIS) },
1233         { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING_ANSI) },
1234         { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING_ISO) },
1235         { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING_JIS) },
1236         { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING2_ANSI) },
1237         { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING2_ISO) },
1238         { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING2_JIS) },
1239         { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_FOUNTAIN_TP_ONLY) },
1240         { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER1_TP_ONLY) },
1241         { HID_USB_DEVICE(USB_VENDOR_ID_BELKIN, USB_DEVICE_ID_FLIP_KVM) },
1242         { HID_USB_DEVICE(USB_VENDOR_ID_CHERRY, USB_DEVICE_ID_CHERRY_CYMOTION) },
1243         { HID_USB_DEVICE(USB_VENDOR_ID_CHICONY, USB_DEVICE_ID_CHICONY_TACTICAL_PAD) },
1244         { HID_USB_DEVICE(USB_VENDOR_ID_CYPRESS, USB_DEVICE_ID_CYPRESS_BARCODE_1) },
1245         { HID_USB_DEVICE(USB_VENDOR_ID_CYPRESS, USB_DEVICE_ID_CYPRESS_BARCODE_2) },
1246         { HID_USB_DEVICE(USB_VENDOR_ID_CYPRESS, USB_DEVICE_ID_CYPRESS_MOUSE) },
1247         { HID_USB_DEVICE(USB_VENDOR_ID_DELL, USB_DEVICE_ID_DELL_W7658) },
1248         { HID_USB_DEVICE(USB_VENDOR_ID_EZKEY, USB_DEVICE_ID_BTC_8193) },
1249         { HID_USB_DEVICE(USB_VENDOR_ID_GYRATION, USB_DEVICE_ID_GYRATION_REMOTE) },
1250         { HID_USB_DEVICE(USB_VENDOR_ID_LABTEC, USB_DEVICE_ID_LABTEC_WIRELESS_KEYBOARD) },
1251         { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_MX3000_RECEIVER) },
1252         { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_S510_RECEIVER) },
1253         { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_S510_RECEIVER_2) },
1254         { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_RECEIVER) },
1255         { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_DINOVO_DESKTOP) },
1256         { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_DINOVO_EDGE) },
1257         { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_DINOVO_MINI) },
1258         { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_KBD) },
1259         { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_ELITE_KBD) },
1260         { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_CORDLESS_DESKTOP_LX500) },
1261         { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_LX3) },
1262         { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_V150) },
1263         { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_EXTREME_3D) },
1264         { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_WHEEL) },
1265         { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_SIDEWINDER_GV) },
1266         { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_NE4K) },
1267         { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_LK6K) },
1268         { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_PRESENTER_8K_USB) },
1269         { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_WIRELESS_OPTICAL_DESKTOP_3_0) },
1270         { HID_USB_DEVICE(USB_VENDOR_ID_MONTEREY, USB_DEVICE_ID_GENIUS_KB29E) },
1271         { HID_USB_DEVICE(USB_VENDOR_ID_PETALYNX, USB_DEVICE_ID_PETALYNX_MAXTER_REMOTE) },
1272         { HID_USB_DEVICE(USB_VENDOR_ID_SAMSUNG, USB_DEVICE_ID_SAMSUNG_IR_REMOTE) },
1273         { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS3_CONTROLLER) },
1274         { HID_USB_DEVICE(USB_VENDOR_ID_SUNPLUS, USB_DEVICE_ID_SUNPLUS_WDESKTOP) },
1275
1276         { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, 0x030c) },
1277         { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_PRESENTER_8K_BT) },
1278         { }
1279 };
1280
1281 static int hid_bus_match(struct device *dev, struct device_driver *drv)
1282 {
1283         struct hid_driver *hdrv = container_of(drv, struct hid_driver, driver);
1284         struct hid_device *hdev = container_of(dev, struct hid_device, dev);
1285
1286         if (!hid_match_id(hdev, hdrv->id_table))
1287                 return 0;
1288
1289         /* generic wants all non-blacklisted */
1290         if (!strncmp(hdrv->name, "generic-", 8))
1291                 return !hid_match_id(hdev, hid_blacklist);
1292
1293         return 1;
1294 }
1295
1296 static int hid_device_probe(struct device *dev)
1297 {
1298         struct hid_driver *hdrv = container_of(dev->driver,
1299                         struct hid_driver, driver);
1300         struct hid_device *hdev = container_of(dev, struct hid_device, dev);
1301         const struct hid_device_id *id;
1302         int ret = 0;
1303
1304         if (!hdev->driver) {
1305                 id = hid_match_id(hdev, hdrv->id_table);
1306                 if (id == NULL)
1307                         return -ENODEV;
1308
1309                 hdev->driver = hdrv;
1310                 if (hdrv->probe) {
1311                         ret = hdrv->probe(hdev, id);
1312                 } else { /* default probe */
1313                         ret = hid_parse(hdev);
1314                         if (!ret)
1315                                 ret = hid_hw_start(hdev, HID_CONNECT_DEFAULT);
1316                 }
1317                 if (ret)
1318                         hdev->driver = NULL;
1319         }
1320         return ret;
1321 }
1322
1323 static int hid_device_remove(struct device *dev)
1324 {
1325         struct hid_device *hdev = container_of(dev, struct hid_device, dev);
1326         struct hid_driver *hdrv = hdev->driver;
1327
1328         if (hdrv) {
1329                 if (hdrv->remove)
1330                         hdrv->remove(hdev);
1331                 else /* default remove */
1332                         hid_hw_stop(hdev);
1333                 hdev->driver = NULL;
1334         }
1335
1336         return 0;
1337 }
1338
1339 static int hid_uevent(struct device *dev, struct kobj_uevent_env *env)
1340 {
1341         struct hid_device *hdev = container_of(dev, struct hid_device, dev);
1342
1343         if (add_uevent_var(env, "HID_ID=%04X:%08X:%08X",
1344                         hdev->bus, hdev->vendor, hdev->product))
1345                 return -ENOMEM;
1346
1347         if (add_uevent_var(env, "HID_NAME=%s", hdev->name))
1348                 return -ENOMEM;
1349
1350         if (add_uevent_var(env, "HID_PHYS=%s", hdev->phys))
1351                 return -ENOMEM;
1352
1353         if (add_uevent_var(env, "HID_UNIQ=%s", hdev->uniq))
1354                 return -ENOMEM;
1355
1356         if (add_uevent_var(env, "MODALIAS=hid:b%04Xv%08Xp%08X",
1357                         hdev->bus, hdev->vendor, hdev->product))
1358                 return -ENOMEM;
1359
1360         return 0;
1361 }
1362
1363 static struct bus_type hid_bus_type = {
1364         .name           = "hid",
1365         .match          = hid_bus_match,
1366         .probe          = hid_device_probe,
1367         .remove         = hid_device_remove,
1368         .uevent         = hid_uevent,
1369 };
1370
1371 static const struct hid_device_id hid_ignore_list[] = {
1372         { HID_USB_DEVICE(USB_VENDOR_ID_ACECAD, USB_DEVICE_ID_ACECAD_FLAIR) },
1373         { HID_USB_DEVICE(USB_VENDOR_ID_ACECAD, USB_DEVICE_ID_ACECAD_302) },
1374         { HID_USB_DEVICE(USB_VENDOR_ID_ADS_TECH, USB_DEVICE_ID_ADS_TECH_RADIO_SI470X) },
1375         { HID_USB_DEVICE(USB_VENDOR_ID_AIPTEK, USB_DEVICE_ID_AIPTEK_01) },
1376         { HID_USB_DEVICE(USB_VENDOR_ID_AIPTEK, USB_DEVICE_ID_AIPTEK_10) },
1377         { HID_USB_DEVICE(USB_VENDOR_ID_AIPTEK, USB_DEVICE_ID_AIPTEK_20) },
1378         { HID_USB_DEVICE(USB_VENDOR_ID_AIPTEK, USB_DEVICE_ID_AIPTEK_21) },
1379         { HID_USB_DEVICE(USB_VENDOR_ID_AIPTEK, USB_DEVICE_ID_AIPTEK_22) },
1380         { HID_USB_DEVICE(USB_VENDOR_ID_AIPTEK, USB_DEVICE_ID_AIPTEK_23) },
1381         { HID_USB_DEVICE(USB_VENDOR_ID_AIPTEK, USB_DEVICE_ID_AIPTEK_24) },
1382         { HID_USB_DEVICE(USB_VENDOR_ID_AIRCABLE, USB_DEVICE_ID_AIRCABLE1) },
1383         { HID_USB_DEVICE(USB_VENDOR_ID_ALCOR, USB_DEVICE_ID_ALCOR_USBRS232) },
1384         { HID_USB_DEVICE(USB_VENDOR_ID_ASUS, USB_DEVICE_ID_ASUS_LCM)},
1385         { HID_USB_DEVICE(USB_VENDOR_ID_BERKSHIRE, USB_DEVICE_ID_BERKSHIRE_PCWD) },
1386         { HID_USB_DEVICE(USB_VENDOR_ID_CIDC, 0x0103) },
1387         { HID_USB_DEVICE(USB_VENDOR_ID_CYGNAL, USB_DEVICE_ID_CYGNAL_RADIO_SI470X) },
1388         { HID_USB_DEVICE(USB_VENDOR_ID_CMEDIA, USB_DEVICE_ID_CM109) },
1389         { HID_USB_DEVICE(USB_VENDOR_ID_CYPRESS, USB_DEVICE_ID_CYPRESS_HIDCOM) },
1390         { HID_USB_DEVICE(USB_VENDOR_ID_CYPRESS, USB_DEVICE_ID_CYPRESS_ULTRAMOUSE) },
1391         { HID_USB_DEVICE(USB_VENDOR_ID_DELORME, USB_DEVICE_ID_DELORME_EARTHMATE) },
1392         { HID_USB_DEVICE(USB_VENDOR_ID_DELORME, USB_DEVICE_ID_DELORME_EM_LT20) },
1393         { HID_USB_DEVICE(USB_VENDOR_ID_ESSENTIAL_REALITY, USB_DEVICE_ID_ESSENTIAL_REALITY_P5) },
1394         { HID_USB_DEVICE(USB_VENDOR_ID_GENERAL_TOUCH, 0x0001) },
1395         { HID_USB_DEVICE(USB_VENDOR_ID_GENERAL_TOUCH, 0x0002) },
1396         { HID_USB_DEVICE(USB_VENDOR_ID_GENERAL_TOUCH, 0x0003) },
1397         { HID_USB_DEVICE(USB_VENDOR_ID_GENERAL_TOUCH, 0x0004) },
1398         { HID_USB_DEVICE(USB_VENDOR_ID_GLAB, USB_DEVICE_ID_4_PHIDGETSERVO_30) },
1399         { HID_USB_DEVICE(USB_VENDOR_ID_GLAB, USB_DEVICE_ID_1_PHIDGETSERVO_30) },
1400         { HID_USB_DEVICE(USB_VENDOR_ID_GLAB, USB_DEVICE_ID_0_0_4_IF_KIT) },
1401         { HID_USB_DEVICE(USB_VENDOR_ID_GLAB, USB_DEVICE_ID_0_16_16_IF_KIT) },
1402         { HID_USB_DEVICE(USB_VENDOR_ID_GLAB, USB_DEVICE_ID_8_8_8_IF_KIT) },
1403         { HID_USB_DEVICE(USB_VENDOR_ID_GLAB, USB_DEVICE_ID_0_8_7_IF_KIT) },
1404         { HID_USB_DEVICE(USB_VENDOR_ID_GLAB, USB_DEVICE_ID_0_8_8_IF_KIT) },
1405         { HID_USB_DEVICE(USB_VENDOR_ID_GLAB, USB_DEVICE_ID_PHIDGET_MOTORCONTROL) },
1406         { HID_USB_DEVICE(USB_VENDOR_ID_GOTOP, USB_DEVICE_ID_SUPER_Q2) },
1407         { HID_USB_DEVICE(USB_VENDOR_ID_GOTOP, USB_DEVICE_ID_GOGOPEN) },
1408         { HID_USB_DEVICE(USB_VENDOR_ID_GOTOP, USB_DEVICE_ID_PENPOWER) },
1409         { HID_USB_DEVICE(USB_VENDOR_ID_GRETAGMACBETH, USB_DEVICE_ID_GRETAGMACBETH_HUEY) },
1410         { HID_USB_DEVICE(USB_VENDOR_ID_GRIFFIN, USB_DEVICE_ID_POWERMATE) },
1411         { HID_USB_DEVICE(USB_VENDOR_ID_GRIFFIN, USB_DEVICE_ID_SOUNDKNOB) },
1412         { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_90) },
1413         { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_100) },
1414         { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_101) },
1415         { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_103) },
1416         { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_104) },
1417         { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_105) },
1418         { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_106) },
1419         { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_107) },
1420         { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_108) },
1421         { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_200) },
1422         { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_201) },
1423         { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_202) },
1424         { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_203) },
1425         { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_204) },
1426         { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_205) },
1427         { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_206) },
1428         { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_207) },
1429         { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_300) },
1430         { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_301) },
1431         { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_302) },
1432         { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_303) },
1433         { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_304) },
1434         { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_305) },
1435         { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_306) },
1436         { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_307) },
1437         { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_308) },
1438         { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_309) },
1439         { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_400) },
1440         { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_401) },
1441         { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_402) },
1442         { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_403) },
1443         { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_404) },
1444         { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_405) },
1445         { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_500) },
1446         { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_501) },
1447         { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_502) },
1448         { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_503) },
1449         { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_504) },
1450         { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_1000) },
1451         { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_1001) },
1452         { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_1002) },
1453         { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_1003) },
1454         { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_1004) },
1455         { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_1005) },
1456         { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_1006) },
1457         { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_1007) },
1458         { HID_USB_DEVICE(USB_VENDOR_ID_IMATION, USB_DEVICE_ID_DISC_STAKKA) },
1459         { HID_USB_DEVICE(USB_VENDOR_ID_KBGEAR, USB_DEVICE_ID_KBGEAR_JAMSTUDIO) },
1460         { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_KYE_GPEN_560) },
1461         { HID_USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_CASSY) },
1462         { HID_USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_POCKETCASSY) },
1463         { HID_USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_MOBILECASSY) },
1464         { HID_USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_JWM) },
1465         { HID_USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_DMMP) },
1466         { HID_USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_UMIP) },
1467         { HID_USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_XRAY1) },
1468         { HID_USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_XRAY2) },
1469         { HID_USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_VIDEOCOM) },
1470         { HID_USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_COM3LAB) },
1471         { HID_USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_TELEPORT) },
1472         { HID_USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_NETWORKANALYSER) },
1473         { HID_USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_POWERCONTROL) },
1474         { HID_USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_MACHINETEST) },
1475         { HID_USB_DEVICE(USB_VENDOR_ID_MCC, USB_DEVICE_ID_MCC_PMD1024LS) },
1476         { HID_USB_DEVICE(USB_VENDOR_ID_MCC, USB_DEVICE_ID_MCC_PMD1208LS) },
1477         { HID_USB_DEVICE(USB_VENDOR_ID_MGE, USB_DEVICE_ID_MGE_UPS) },
1478         { HID_USB_DEVICE(USB_VENDOR_ID_MGE, USB_DEVICE_ID_MGE_UPS1) },
1479         { HID_USB_DEVICE(USB_VENDOR_ID_MICROCHIP, USB_DEVICE_ID_PICKIT1) },
1480         { HID_USB_DEVICE(USB_VENDOR_ID_MICROCHIP, USB_DEVICE_ID_PICKIT2) },
1481         { HID_USB_DEVICE(USB_VENDOR_ID_NATIONAL_SEMICONDUCTOR, USB_DEVICE_ID_N_S_HARMONY) },
1482         { HID_USB_DEVICE(USB_VENDOR_ID_ONTRAK, USB_DEVICE_ID_ONTRAK_ADU100) },
1483         { HID_USB_DEVICE(USB_VENDOR_ID_ONTRAK, USB_DEVICE_ID_ONTRAK_ADU100 + 20) },
1484         { HID_USB_DEVICE(USB_VENDOR_ID_ONTRAK, USB_DEVICE_ID_ONTRAK_ADU100 + 30) },
1485         { HID_USB_DEVICE(USB_VENDOR_ID_ONTRAK, USB_DEVICE_ID_ONTRAK_ADU100 + 100) },
1486         { HID_USB_DEVICE(USB_VENDOR_ID_ONTRAK, USB_DEVICE_ID_ONTRAK_ADU100 + 108) },
1487         { HID_USB_DEVICE(USB_VENDOR_ID_ONTRAK, USB_DEVICE_ID_ONTRAK_ADU100 + 118) },
1488         { HID_USB_DEVICE(USB_VENDOR_ID_ONTRAK, USB_DEVICE_ID_ONTRAK_ADU100 + 200) },
1489         { HID_USB_DEVICE(USB_VENDOR_ID_ONTRAK, USB_DEVICE_ID_ONTRAK_ADU100 + 300) },
1490         { HID_USB_DEVICE(USB_VENDOR_ID_ONTRAK, USB_DEVICE_ID_ONTRAK_ADU100 + 400) },
1491         { HID_USB_DEVICE(USB_VENDOR_ID_ONTRAK, USB_DEVICE_ID_ONTRAK_ADU100 + 500) },
1492         { HID_USB_DEVICE(USB_VENDOR_ID_PANJIT, 0x0001) },
1493         { HID_USB_DEVICE(USB_VENDOR_ID_PANJIT, 0x0002) },
1494         { HID_USB_DEVICE(USB_VENDOR_ID_PANJIT, 0x0003) },
1495         { HID_USB_DEVICE(USB_VENDOR_ID_PANJIT, 0x0004) },
1496         { HID_USB_DEVICE(USB_VENDOR_ID_SOUNDGRAPH, USB_DEVICE_ID_SOUNDGRAPH_IMON_LCD) },
1497         { HID_USB_DEVICE(USB_VENDOR_ID_VERNIER, USB_DEVICE_ID_VERNIER_LABPRO) },
1498         { HID_USB_DEVICE(USB_VENDOR_ID_VERNIER, USB_DEVICE_ID_VERNIER_GOTEMP) },
1499         { HID_USB_DEVICE(USB_VENDOR_ID_VERNIER, USB_DEVICE_ID_VERNIER_SKIP) },
1500         { HID_USB_DEVICE(USB_VENDOR_ID_VERNIER, USB_DEVICE_ID_VERNIER_CYCLOPS) },
1501         { HID_USB_DEVICE(USB_VENDOR_ID_VERNIER, USB_DEVICE_ID_VERNIER_LCSPEC) },
1502         { HID_USB_DEVICE(USB_VENDOR_ID_WACOM, HID_ANY_ID) },
1503         { HID_USB_DEVICE(USB_VENDOR_ID_WISEGROUP, USB_DEVICE_ID_4_PHIDGETSERVO_20) },
1504         { HID_USB_DEVICE(USB_VENDOR_ID_WISEGROUP, USB_DEVICE_ID_1_PHIDGETSERVO_20) },
1505         { HID_USB_DEVICE(USB_VENDOR_ID_WISEGROUP, USB_DEVICE_ID_8_8_4_IF_KIT) },
1506         { HID_USB_DEVICE(USB_VENDOR_ID_YEALINK, USB_DEVICE_ID_YEALINK_P1K_P4K_B2K) },
1507         { }
1508 };
1509
1510 static bool hid_ignore(struct hid_device *hdev)
1511 {
1512         switch (hdev->vendor) {
1513         case USB_VENDOR_ID_CODEMERCS:
1514                 /* ignore all Code Mercenaries IOWarrior devices */
1515                 if (hdev->product >= USB_DEVICE_ID_CODEMERCS_IOW_FIRST &&
1516                                 hdev->product <= USB_DEVICE_ID_CODEMERCS_IOW_LAST)
1517                         return true;
1518                 break;
1519         case USB_VENDOR_ID_LOGITECH:
1520                 if (hdev->product >= USB_DEVICE_ID_LOGITECH_HARMONY_FIRST &&
1521                                 hdev->product <= USB_DEVICE_ID_LOGITECH_HARMONY_LAST)
1522                         return true;
1523                 break;
1524         }
1525
1526         return !!hid_match_id(hdev, hid_ignore_list);
1527 }
1528
1529 int hid_add_device(struct hid_device *hdev)
1530 {
1531         static atomic_t id = ATOMIC_INIT(0);
1532         int ret;
1533
1534         if (WARN_ON(hdev->status & HID_STAT_ADDED))
1535                 return -EBUSY;
1536
1537         /* we need to kill them here, otherwise they will stay allocated to
1538          * wait for coming driver */
1539         if (hid_ignore(hdev))
1540                 return -ENODEV;
1541
1542         /* XXX hack, any other cleaner solution < 20 bus_id bytes? */
1543         sprintf(hdev->dev.bus_id, "%04X:%04X:%04X.%04X", hdev->bus,
1544                         hdev->vendor, hdev->product, atomic_inc_return(&id));
1545
1546         ret = device_add(&hdev->dev);
1547         if (!ret)
1548                 hdev->status |= HID_STAT_ADDED;
1549
1550         return ret;
1551 }
1552 EXPORT_SYMBOL_GPL(hid_add_device);
1553
1554 /**
1555  * hid_allocate_device - allocate new hid device descriptor
1556  *
1557  * Allocate and initialize hid device, so that hid_destroy_device might be
1558  * used to free it.
1559  *
1560  * New hid_device pointer is returned on success, otherwise ERR_PTR encoded
1561  * error value.
1562  */
1563 struct hid_device *hid_allocate_device(void)
1564 {
1565         struct hid_device *hdev;
1566         unsigned int i;
1567         int ret = -ENOMEM;
1568
1569         hdev = kzalloc(sizeof(*hdev), GFP_KERNEL);
1570         if (hdev == NULL)
1571                 return ERR_PTR(ret);
1572
1573         device_initialize(&hdev->dev);
1574         hdev->dev.release = hid_device_release;
1575         hdev->dev.bus = &hid_bus_type;
1576
1577         hdev->collection = kcalloc(HID_DEFAULT_NUM_COLLECTIONS,
1578                         sizeof(struct hid_collection), GFP_KERNEL);
1579         if (hdev->collection == NULL)
1580                 goto err;
1581         hdev->collection_size = HID_DEFAULT_NUM_COLLECTIONS;
1582
1583         for (i = 0; i < HID_REPORT_TYPES; i++)
1584                 INIT_LIST_HEAD(&hdev->report_enum[i].report_list);
1585
1586         return hdev;
1587 err:
1588         put_device(&hdev->dev);
1589         return ERR_PTR(ret);
1590 }
1591 EXPORT_SYMBOL_GPL(hid_allocate_device);
1592
1593 static void hid_remove_device(struct hid_device *hdev)
1594 {
1595         if (hdev->status & HID_STAT_ADDED) {
1596                 device_del(&hdev->dev);
1597                 hdev->status &= ~HID_STAT_ADDED;
1598         }
1599 }
1600
1601 /**
1602  * hid_destroy_device - free previously allocated device
1603  *
1604  * @hdev: hid device
1605  *
1606  * If you allocate hid_device through hid_allocate_device, you should ever
1607  * free by this function.
1608  */
1609 void hid_destroy_device(struct hid_device *hdev)
1610 {
1611         hid_remove_device(hdev);
1612         put_device(&hdev->dev);
1613 }
1614 EXPORT_SYMBOL_GPL(hid_destroy_device);
1615
1616 int __hid_register_driver(struct hid_driver *hdrv, struct module *owner,
1617                 const char *mod_name)
1618 {
1619         hdrv->driver.name = hdrv->name;
1620         hdrv->driver.bus = &hid_bus_type;
1621         hdrv->driver.owner = owner;
1622         hdrv->driver.mod_name = mod_name;
1623
1624         return driver_register(&hdrv->driver);
1625 }
1626 EXPORT_SYMBOL_GPL(__hid_register_driver);
1627
1628 void hid_unregister_driver(struct hid_driver *hdrv)
1629 {
1630         driver_unregister(&hdrv->driver);
1631 }
1632 EXPORT_SYMBOL_GPL(hid_unregister_driver);
1633
1634 #ifdef CONFIG_HID_COMPAT
1635 static void hid_compat_load(struct work_struct *ws)
1636 {
1637         request_module("hid-dummy");
1638 }
1639 static DECLARE_WORK(hid_compat_work, hid_compat_load);
1640 #endif
1641
1642 static int __init hid_init(void)
1643 {
1644         int ret;
1645
1646         ret = bus_register(&hid_bus_type);
1647         if (ret) {
1648                 printk(KERN_ERR "HID: can't register hid bus\n");
1649                 goto err;
1650         }
1651
1652         ret = hidraw_init();
1653         if (ret)
1654                 goto err_bus;
1655
1656 #ifdef CONFIG_HID_COMPAT
1657         schedule_work(&hid_compat_work);
1658 #endif
1659
1660         return 0;
1661 err_bus:
1662         bus_unregister(&hid_bus_type);
1663 err:
1664         return ret;
1665 }
1666
1667 static void __exit hid_exit(void)
1668 {
1669         hidraw_exit();
1670         bus_unregister(&hid_bus_type);
1671 }
1672
1673 module_init(hid_init);
1674 module_exit(hid_exit);
1675
1676 MODULE_LICENSE(DRIVER_LICENSE);
1677