diff options
Diffstat (limited to 'drivers/hid/hid-core.c')
| -rw-r--r-- | drivers/hid/hid-core.c | 10 | 
1 files changed, 6 insertions, 4 deletions
diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c index 9e8064205bc7..da52279de939 100644 --- a/drivers/hid/hid-core.c +++ b/drivers/hid/hid-core.c @@ -718,6 +718,9 @@ static int hid_scan_main(struct hid_parser *parser, struct hid_item *item)  	case HID_MAIN_ITEM_TAG_END_COLLECTION:  		break;  	case HID_MAIN_ITEM_TAG_INPUT: +		/* ignore constant inputs, they will be ignored by hid-input */ +		if (data & HID_MAIN_ITEM_CONSTANT) +			break;  		for (i = 0; i < parser->local.usage_index; i++)  			hid_scan_input_usage(parser, parser->local.usage[i]);  		break; @@ -1250,7 +1253,8 @@ EXPORT_SYMBOL_GPL(hid_output_report);  static int hid_report_len(struct hid_report *report)  { -	return ((report->size - 1) >> 3) + 1 + (report->id > 0) + 7; +	/* equivalent to DIV_ROUND_UP(report->size, 8) + !!(report->id > 0) */ +	return ((report->size - 1) >> 3) + 1 + (report->id > 0);  }  /* @@ -1263,7 +1267,7 @@ u8 *hid_alloc_report_buf(struct hid_report *report, gfp_t flags)  	 * of implement() working on 8 byte chunks  	 */ -	int len = hid_report_len(report); +	int len = hid_report_len(report) + 7;  	return kmalloc(len, flags);  } @@ -1821,8 +1825,6 @@ static const struct hid_device_id hid_have_special_driver[] = {  	{ HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_PRESENTER_8K_USB) },  	{ HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_DIGITAL_MEDIA_3K) },  	{ HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_WIRELESS_OPTICAL_DESKTOP_3_0) }, -	{ HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_TYPE_COVER_2) }, -	{ HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_TOUCH_COVER_2) },  	{ HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_OFFICE_KB) },  	{ HID_USB_DEVICE(USB_VENDOR_ID_MONTEREY, USB_DEVICE_ID_GENIUS_KB29E) },  	{ HID_USB_DEVICE(USB_VENDOR_ID_NTRIG, USB_DEVICE_ID_NTRIG_TOUCH_SCREEN) },  | 
