mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-28 18:51:56 -04:00
HID: rmi: Scan the report descriptor to determine if the device is suitable for the hid-rmi driver
On composite HID devices there may be multiple HID devices on separate interfaces, but hid-rmi should only bind to the touchpad. The previous version simply checked that the interface protocol was set to mouse. Unfortuately, it is not always the case that the touchpad has the mouse interface protocol set. This patch takes a different approach and scans the report descriptor looking for the Generic Desktop Pointer usage and the Vendor Specific Top Level Collection needed by the hid-rmi driver to interface with the device. Signed-off-by: Andrew Duggan <[email protected]> Reviewed-by: Benjamin Tissoires <[email protected]> Signed-off-by: Jiri Kosina <[email protected]>
This commit is contained in:
parent
0349678ccd
commit
e39f2d5956
2 changed files with 20 additions and 6 deletions
|
|
@ -698,6 +698,7 @@ static void hid_scan_feature_usage(struct hid_parser *parser, u32 usage)
|
|||
static void hid_scan_collection(struct hid_parser *parser, unsigned type)
|
||||
{
|
||||
struct hid_device *hid = parser->device;
|
||||
int i;
|
||||
|
||||
if (((parser->global.usage_page << 16) == HID_UP_SENSOR) &&
|
||||
type == HID_COLLECTION_PHYSICAL)
|
||||
|
|
@ -707,6 +708,14 @@ static void hid_scan_collection(struct hid_parser *parser, unsigned type)
|
|||
hid->product == USB_DEVICE_ID_MS_TYPE_COVER_3 &&
|
||||
hid->group == HID_GROUP_MULTITOUCH)
|
||||
hid->group = HID_GROUP_GENERIC;
|
||||
|
||||
if ((parser->global.usage_page << 16) == HID_UP_GENDESK)
|
||||
for (i = 0; i < parser->local.usage_index; i++)
|
||||
if (parser->local.usage[i] == HID_GD_POINTER)
|
||||
parser->scan_flags |= HID_SCAN_FLAG_GD_POINTER;
|
||||
|
||||
if ((parser->global.usage_page << 16) >= HID_UP_MSVENDOR)
|
||||
parser->scan_flags |= HID_SCAN_FLAG_VENDOR_SPECIFIC;
|
||||
}
|
||||
|
||||
static int hid_scan_main(struct hid_parser *parser, struct hid_item *item)
|
||||
|
|
@ -792,11 +801,14 @@ static int hid_scan_report(struct hid_device *hid)
|
|||
hid->group = HID_GROUP_WACOM;
|
||||
break;
|
||||
case USB_VENDOR_ID_SYNAPTICS:
|
||||
if ((hid->group == HID_GROUP_GENERIC) &&
|
||||
(hid->bus != BUS_USB || hid->type == HID_TYPE_USBMOUSE))
|
||||
/* hid-rmi should only bind to the mouse interface of
|
||||
* composite USB devices */
|
||||
hid->group = HID_GROUP_RMI;
|
||||
if (hid->group == HID_GROUP_GENERIC)
|
||||
if ((parser->scan_flags & HID_SCAN_FLAG_VENDOR_SPECIFIC)
|
||||
&& (parser->scan_flags & HID_SCAN_FLAG_GD_POINTER))
|
||||
/*
|
||||
* hid-rmi should take care of them,
|
||||
* not hid-generic
|
||||
*/
|
||||
hid->group = HID_GROUP_RMI;
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue