root/drivers/hid/hid-generic.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. __check_hid_generic
  2. hid_generic_match
  3. hid_generic_probe

   1 // SPDX-License-Identifier: GPL-2.0-or-later
   2 /*
   3  *  HID support for Linux
   4  *
   5  *  Copyright (c) 1999 Andreas Gal
   6  *  Copyright (c) 2000-2005 Vojtech Pavlik <vojtech@suse.cz>
   7  *  Copyright (c) 2005 Michael Haboustak <mike-@cinci.rr.com> for Concept2, Inc
   8  *  Copyright (c) 2007-2008 Oliver Neukum
   9  *  Copyright (c) 2006-2012 Jiri Kosina
  10  *  Copyright (c) 2012 Henrik Rydberg
  11  */
  12 
  13 /*
  14  */
  15 
  16 #include <linux/module.h>
  17 #include <linux/slab.h>
  18 #include <linux/kernel.h>
  19 #include <asm/unaligned.h>
  20 #include <asm/byteorder.h>
  21 
  22 #include <linux/hid.h>
  23 
  24 static struct hid_driver hid_generic;
  25 
  26 static int __check_hid_generic(struct device_driver *drv, void *data)
  27 {
  28         struct hid_driver *hdrv = to_hid_driver(drv);
  29         struct hid_device *hdev = data;
  30 
  31         if (hdrv == &hid_generic)
  32                 return 0;
  33 
  34         return hid_match_device(hdev, hdrv) != NULL;
  35 }
  36 
  37 static bool hid_generic_match(struct hid_device *hdev,
  38                               bool ignore_special_driver)
  39 {
  40         if (ignore_special_driver)
  41                 return true;
  42 
  43         if (hdev->quirks & HID_QUIRK_HAVE_SPECIAL_DRIVER)
  44                 return false;
  45 
  46         /*
  47          * If any other driver wants the device, leave the device to this other
  48          * driver.
  49          */
  50         if (bus_for_each_drv(&hid_bus_type, NULL, hdev, __check_hid_generic))
  51                 return false;
  52 
  53         return true;
  54 }
  55 
  56 static int hid_generic_probe(struct hid_device *hdev,
  57                              const struct hid_device_id *id)
  58 {
  59         int ret;
  60 
  61         hdev->quirks |= HID_QUIRK_INPUT_PER_APP;
  62 
  63         ret = hid_parse(hdev);
  64         if (ret)
  65                 return ret;
  66 
  67         return hid_hw_start(hdev, HID_CONNECT_DEFAULT);
  68 }
  69 
  70 static const struct hid_device_id hid_table[] = {
  71         { HID_DEVICE(HID_BUS_ANY, HID_GROUP_ANY, HID_ANY_ID, HID_ANY_ID) },
  72         { }
  73 };
  74 MODULE_DEVICE_TABLE(hid, hid_table);
  75 
  76 static struct hid_driver hid_generic = {
  77         .name = "hid-generic",
  78         .id_table = hid_table,
  79         .match = hid_generic_match,
  80         .probe = hid_generic_probe,
  81 };
  82 module_hid_driver(hid_generic);
  83 
  84 MODULE_AUTHOR("Henrik Rydberg");
  85 MODULE_DESCRIPTION("HID generic driver");
  86 MODULE_LICENSE("GPL");

/* [<][>][^][v][top][bottom][index][help] */