root/drivers/hid/hid-ortek.c

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

DEFINITIONS

This source file includes following definitions.
  1. ortek_report_fixup

   1 // SPDX-License-Identifier: GPL-2.0-or-later
   2 /*
   3  *  HID driver for various devices which are apparently based on the same chipset
   4  *  from certain vendor which produces chips that contain wrong LogicalMaximum
   5  *  value in their HID report descriptor. Currently supported devices are:
   6  *
   7  *    Ortek PKB-1700
   8  *    Ortek WKB-2000
   9  *    iHome IMAC-A210S
  10  *    Skycable wireless presenter
  11  *
  12  *  Copyright (c) 2010 Johnathon Harris <jmharris@gmail.com>
  13  *  Copyright (c) 2011 Jiri Kosina
  14  */
  15 
  16 /*
  17  */
  18 
  19 #include <linux/device.h>
  20 #include <linux/hid.h>
  21 #include <linux/module.h>
  22 
  23 #include "hid-ids.h"
  24 
  25 static __u8 *ortek_report_fixup(struct hid_device *hdev, __u8 *rdesc,
  26                 unsigned int *rsize)
  27 {
  28         if (*rsize >= 56 && rdesc[54] == 0x25 && rdesc[55] == 0x01) {
  29                 hid_info(hdev, "Fixing up logical maximum in report descriptor (Ortek)\n");
  30                 rdesc[55] = 0x92;
  31         } else if (*rsize >= 54 && rdesc[52] == 0x25 && rdesc[53] == 0x01) {
  32                 hid_info(hdev, "Fixing up logical maximum in report descriptor (Skycable)\n");
  33                 rdesc[53] = 0x65;
  34         }
  35         return rdesc;
  36 }
  37 
  38 static const struct hid_device_id ortek_devices[] = {
  39         { HID_USB_DEVICE(USB_VENDOR_ID_ORTEK, USB_DEVICE_ID_ORTEK_PKB1700) },
  40         { HID_USB_DEVICE(USB_VENDOR_ID_ORTEK, USB_DEVICE_ID_ORTEK_WKB2000) },
  41         { HID_USB_DEVICE(USB_VENDOR_ID_ORTEK, USB_DEVICE_ID_ORTEK_IHOME_IMAC_A210S) },
  42         { HID_USB_DEVICE(USB_VENDOR_ID_SKYCABLE, USB_DEVICE_ID_SKYCABLE_WIRELESS_PRESENTER) },
  43         { }
  44 };
  45 MODULE_DEVICE_TABLE(hid, ortek_devices);
  46 
  47 static struct hid_driver ortek_driver = {
  48         .name = "ortek",
  49         .id_table = ortek_devices,
  50         .report_fixup = ortek_report_fixup
  51 };
  52 module_hid_driver(ortek_driver);
  53 
  54 MODULE_LICENSE("GPL");

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