mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-25 21:24:08 +08:00
HID: wacom: Move HID fix for AES serial number into wacom_hid_usage_quirk
The 'wacom_hid_usage_quirk' function is the intended home for fixing
up descriptors that are buggy or that don't quite fit the mold. Commit
578325120e
was supposed to move all of these quirks but it missed the
code to handle fixup the serial number usages for AES pens. Lets move
this code out of 'wacom_wac_pen_usage_mapping' where it was previously
lurking and put it into the same place as the others.
Signed-off-by: Jason Gerecke <jason.gerecke@wacom.com>
Signed-off-by: Benjamin Tissoires <benjamin.tissoires@redhat.com>
This commit is contained in:
parent
787a3b4322
commit
e9fe0d4921
@ -252,6 +252,38 @@ static void wacom_hid_usage_quirk(struct hid_device *hdev,
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Wacom's AES devices use different vendor-defined usages to
|
||||
* report serial number information compared to their branded
|
||||
* hardware. The usages are also sometimes ill-defined and do
|
||||
* not have the correct logical min/max values set. Lets patch
|
||||
* the descriptor to use the branded usage convention and fix
|
||||
* the errors.
|
||||
*/
|
||||
if (usage->hid == WACOM_HID_WT_SERIALNUMBER &&
|
||||
field->report_size == 16 &&
|
||||
field->index + 2 < field->report->maxfield) {
|
||||
struct hid_field *a = field->report->field[field->index + 1];
|
||||
struct hid_field *b = field->report->field[field->index + 2];
|
||||
|
||||
if (a->maxusage > 0 &&
|
||||
a->usage[0].hid == HID_DG_TOOLSERIALNUMBER &&
|
||||
a->report_size == 32 &&
|
||||
b->maxusage > 0 &&
|
||||
b->usage[0].hid == 0xFF000000 &&
|
||||
b->report_size == 8) {
|
||||
features->quirks |= WACOM_QUIRK_AESPEN;
|
||||
usage->hid = WACOM_HID_WD_TOOLTYPE;
|
||||
field->logical_minimum = S16_MIN;
|
||||
field->logical_maximum = S16_MAX;
|
||||
a->logical_minimum = S32_MIN;
|
||||
a->logical_maximum = S32_MAX;
|
||||
b->usage[0].hid = WACOM_HID_WD_SERIALHI;
|
||||
b->logical_minimum = 0;
|
||||
b->logical_maximum = U8_MAX;
|
||||
}
|
||||
}
|
||||
|
||||
/* 2nd-generation Intuos Pro Large has incorrect Y maximum */
|
||||
if (hdev->vendor == USB_VENDOR_ID_WACOM &&
|
||||
hdev->product == 0x0358 &&
|
||||
|
@ -2159,27 +2159,6 @@ static void wacom_wac_pen_usage_mapping(struct hid_device *hdev,
|
||||
case HID_DG_TOOLSERIALNUMBER:
|
||||
features->quirks |= WACOM_QUIRK_TOOLSERIAL;
|
||||
wacom_map_usage(input, usage, field, EV_MSC, MSC_SERIAL, 0);
|
||||
|
||||
/* Adjust AES usages to match modern convention */
|
||||
if (usage->hid == WACOM_HID_WT_SERIALNUMBER && field->report_size == 16) {
|
||||
if (field->index + 2 < field->report->maxfield) {
|
||||
struct hid_field *a = field->report->field[field->index + 1];
|
||||
struct hid_field *b = field->report->field[field->index + 2];
|
||||
|
||||
if (a->maxusage > 0 && a->usage[0].hid == HID_DG_TOOLSERIALNUMBER && a->report_size == 32 &&
|
||||
b->maxusage > 0 && b->usage[0].hid == 0xFF000000 && b->report_size == 8) {
|
||||
features->quirks |= WACOM_QUIRK_AESPEN;
|
||||
usage->hid = WACOM_HID_WD_TOOLTYPE;
|
||||
field->logical_minimum = S16_MIN;
|
||||
field->logical_maximum = S16_MAX;
|
||||
a->logical_minimum = S32_MIN;
|
||||
a->logical_maximum = S32_MAX;
|
||||
b->usage[0].hid = WACOM_HID_WD_SERIALHI;
|
||||
b->logical_minimum = 0;
|
||||
b->logical_maximum = U8_MAX;
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
case WACOM_HID_WD_SENSE:
|
||||
features->quirks |= WACOM_QUIRK_SENSE;
|
||||
|
Loading…
Reference in New Issue
Block a user