2010-01-21 17:36:52 +03:00
/*
2011-03-21 15:54:22 +03:00
* HID driver for various devices which are apparently based on the same chipset
* from certain vendor which produces chips that contain wrong LogicalMaximum
* value in their HID report descriptor . Currently supported devices are :
*
* Ortek PKB - 1700
* Ortek WKB - 2000
2017-07-18 19:28:13 +03:00
* iHome IMAC - A210S
2011-03-21 15:54:22 +03:00
* Skycable wireless presenter
2010-01-21 17:36:52 +03:00
*
* Copyright ( c ) 2010 Johnathon Harris < jmharris @ gmail . com >
2011-03-21 15:54:22 +03:00
* Copyright ( c ) 2011 Jiri Kosina
2010-01-21 17:36:52 +03:00
*/
/*
* This program is free software ; you can redistribute it and / or modify it
* under the terms of the GNU General Public License as published by the Free
* Software Foundation ; either version 2 of the License , or ( at your option )
* any later version .
*/
# include <linux/device.h>
# include <linux/hid.h>
# include <linux/module.h>
# include "hid-ids.h"
2010-08-06 23:03:06 +04:00
static __u8 * ortek_report_fixup ( struct hid_device * hdev , __u8 * rdesc ,
unsigned int * rsize )
2010-01-21 17:36:52 +03:00
{
2010-08-06 23:03:06 +04:00
if ( * rsize > = 56 & & rdesc [ 54 ] = = 0x25 & & rdesc [ 55 ] = = 0x01 ) {
2017-07-18 19:28:13 +03:00
hid_info ( hdev , " Fixing up logical maximum in report descriptor (Ortek) \n " ) ;
2010-01-21 17:36:52 +03:00
rdesc [ 55 ] = 0x92 ;
2011-03-21 15:54:22 +03:00
} else if ( * rsize > = 54 & & rdesc [ 52 ] = = 0x25 & & rdesc [ 53 ] = = 0x01 ) {
2017-07-18 19:28:13 +03:00
hid_info ( hdev , " Fixing up logical maximum in report descriptor (Skycable) \n " ) ;
2011-03-21 15:54:22 +03:00
rdesc [ 53 ] = 0x65 ;
2010-01-21 17:36:52 +03:00
}
2010-08-06 23:03:06 +04:00
return rdesc ;
2010-01-21 17:36:52 +03:00
}
static const struct hid_device_id ortek_devices [ ] = {
2011-03-16 20:13:53 +03:00
{ HID_USB_DEVICE ( USB_VENDOR_ID_ORTEK , USB_DEVICE_ID_ORTEK_PKB1700 ) } ,
2010-01-21 17:36:52 +03:00
{ HID_USB_DEVICE ( USB_VENDOR_ID_ORTEK , USB_DEVICE_ID_ORTEK_WKB2000 ) } ,
2017-07-18 19:28:13 +03:00
{ HID_USB_DEVICE ( USB_VENDOR_ID_ORTEK , USB_DEVICE_ID_ORTEK_IHOME_IMAC_A210S ) } ,
2011-03-21 15:54:22 +03:00
{ HID_USB_DEVICE ( USB_VENDOR_ID_SKYCABLE , USB_DEVICE_ID_SKYCABLE_WIRELESS_PRESENTER ) } ,
2010-01-21 17:36:52 +03:00
{ }
} ;
MODULE_DEVICE_TABLE ( hid , ortek_devices ) ;
static struct hid_driver ortek_driver = {
. name = " ortek " ,
. id_table = ortek_devices ,
. report_fixup = ortek_report_fixup
} ;
2012-12-18 02:28:26 +04:00
module_hid_driver ( ortek_driver ) ;
2010-01-21 17:36:52 +03:00
MODULE_LICENSE ( " GPL " ) ;