Back to home page

OSCL-LXR

 
 

    


0001 // SPDX-License-Identifier: GPL-2.0-or-later
0002 /*
0003  *  Jabra USB HID Driver
0004  *
0005  *  Copyright (c) 2017 Niels Skou Olsen <nolsen@jabra.com>
0006  */
0007 
0008 /*
0009  */
0010 
0011 #include <linux/hid.h>
0012 #include <linux/module.h>
0013 
0014 #include "hid-ids.h"
0015 
0016 #define HID_UP_VENDOR_DEFINED_MIN   0xff000000
0017 #define HID_UP_VENDOR_DEFINED_MAX   0xffff0000
0018 
0019 static int jabra_input_mapping(struct hid_device *hdev,
0020                    struct hid_input *hi,
0021                    struct hid_field *field,
0022                    struct hid_usage *usage,
0023                    unsigned long **bit, int *max)
0024 {
0025     int is_vendor_defined =
0026         ((usage->hid & HID_USAGE_PAGE) >= HID_UP_VENDOR_DEFINED_MIN &&
0027          (usage->hid & HID_USAGE_PAGE) <= HID_UP_VENDOR_DEFINED_MAX);
0028 
0029     dbg_hid("hid=0x%08x appl=0x%08x coll_idx=0x%02x usage_idx=0x%02x: %s\n",
0030         usage->hid,
0031         field->application,
0032         usage->collection_index,
0033         usage->usage_index,
0034         is_vendor_defined ? "ignored" : "defaulted");
0035 
0036     /* Ignore vendor defined usages, default map standard usages */
0037     return is_vendor_defined ? -1 : 0;
0038 }
0039 
0040 static const struct hid_device_id jabra_devices[] = {
0041     { HID_USB_DEVICE(USB_VENDOR_ID_JABRA, HID_ANY_ID) },
0042     { }
0043 };
0044 MODULE_DEVICE_TABLE(hid, jabra_devices);
0045 
0046 static struct hid_driver jabra_driver = {
0047     .name = "jabra",
0048     .id_table = jabra_devices,
0049     .input_mapping = jabra_input_mapping,
0050 };
0051 module_hid_driver(jabra_driver);
0052 
0053 MODULE_AUTHOR("Niels Skou Olsen <nolsen@jabra.com>");
0054 MODULE_DESCRIPTION("Jabra USB HID Driver");
0055 MODULE_LICENSE("GPL");