Skip to content

Commit e9fe0d4

Browse files
jigpubentiss
authored andcommitted
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 5783251 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 <[email protected]> Signed-off-by: Benjamin Tissoires <[email protected]>
1 parent 787a3b4 commit e9fe0d4

File tree

2 files changed

+32
-21
lines changed

2 files changed

+32
-21
lines changed

drivers/hid/wacom_sys.c

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -252,6 +252,38 @@ static void wacom_hid_usage_quirk(struct hid_device *hdev,
252252
}
253253
}
254254

255+
/*
256+
* Wacom's AES devices use different vendor-defined usages to
257+
* report serial number information compared to their branded
258+
* hardware. The usages are also sometimes ill-defined and do
259+
* not have the correct logical min/max values set. Lets patch
260+
* the descriptor to use the branded usage convention and fix
261+
* the errors.
262+
*/
263+
if (usage->hid == WACOM_HID_WT_SERIALNUMBER &&
264+
field->report_size == 16 &&
265+
field->index + 2 < field->report->maxfield) {
266+
struct hid_field *a = field->report->field[field->index + 1];
267+
struct hid_field *b = field->report->field[field->index + 2];
268+
269+
if (a->maxusage > 0 &&
270+
a->usage[0].hid == HID_DG_TOOLSERIALNUMBER &&
271+
a->report_size == 32 &&
272+
b->maxusage > 0 &&
273+
b->usage[0].hid == 0xFF000000 &&
274+
b->report_size == 8) {
275+
features->quirks |= WACOM_QUIRK_AESPEN;
276+
usage->hid = WACOM_HID_WD_TOOLTYPE;
277+
field->logical_minimum = S16_MIN;
278+
field->logical_maximum = S16_MAX;
279+
a->logical_minimum = S32_MIN;
280+
a->logical_maximum = S32_MAX;
281+
b->usage[0].hid = WACOM_HID_WD_SERIALHI;
282+
b->logical_minimum = 0;
283+
b->logical_maximum = U8_MAX;
284+
}
285+
}
286+
255287
/* 2nd-generation Intuos Pro Large has incorrect Y maximum */
256288
if (hdev->vendor == USB_VENDOR_ID_WACOM &&
257289
hdev->product == 0x0358 &&

drivers/hid/wacom_wac.c

Lines changed: 0 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -2159,27 +2159,6 @@ static void wacom_wac_pen_usage_mapping(struct hid_device *hdev,
21592159
case HID_DG_TOOLSERIALNUMBER:
21602160
features->quirks |= WACOM_QUIRK_TOOLSERIAL;
21612161
wacom_map_usage(input, usage, field, EV_MSC, MSC_SERIAL, 0);
2162-
2163-
/* Adjust AES usages to match modern convention */
2164-
if (usage->hid == WACOM_HID_WT_SERIALNUMBER && field->report_size == 16) {
2165-
if (field->index + 2 < field->report->maxfield) {
2166-
struct hid_field *a = field->report->field[field->index + 1];
2167-
struct hid_field *b = field->report->field[field->index + 2];
2168-
2169-
if (a->maxusage > 0 && a->usage[0].hid == HID_DG_TOOLSERIALNUMBER && a->report_size == 32 &&
2170-
b->maxusage > 0 && b->usage[0].hid == 0xFF000000 && b->report_size == 8) {
2171-
features->quirks |= WACOM_QUIRK_AESPEN;
2172-
usage->hid = WACOM_HID_WD_TOOLTYPE;
2173-
field->logical_minimum = S16_MIN;
2174-
field->logical_maximum = S16_MAX;
2175-
a->logical_minimum = S32_MIN;
2176-
a->logical_maximum = S32_MAX;
2177-
b->usage[0].hid = WACOM_HID_WD_SERIALHI;
2178-
b->logical_minimum = 0;
2179-
b->logical_maximum = U8_MAX;
2180-
}
2181-
}
2182-
}
21832162
break;
21842163
case WACOM_HID_WD_SENSE:
21852164
features->quirks |= WACOM_QUIRK_SENSE;

0 commit comments

Comments
 (0)