On Thu, Jan 24, 2019 at 8:10 PM Jason Gerecke <killertofu@xxxxxxxxx> wrote: > > 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@xxxxxxxxx> > --- Thanks, applied to for-5.1/wacom. I realized one thing today: your "From" address (gmail) doesn't match your SoB address (wacom). I still applied the patch because we used to not care about that for your patches, but this raises a useless checkpatch.pl warning (and I am scrutinizing any incoming patches with checkpatch.pl starting from now). Can you fix your pipeline? Cheers, Benjamin > drivers/hid/wacom_sys.c | 32 ++++++++++++++++++++++++++++++++ > drivers/hid/wacom_wac.c | 21 --------------------- > 2 files changed, 32 insertions(+), 21 deletions(-) > > diff --git a/drivers/hid/wacom_sys.c b/drivers/hid/wacom_sys.c > index 0bdd85d486fe..a8633b1437b2 100644 > --- a/drivers/hid/wacom_sys.c > +++ b/drivers/hid/wacom_sys.c > @@ -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 && > diff --git a/drivers/hid/wacom_wac.c b/drivers/hid/wacom_wac.c > index 5dd3a8245f0f..72477e872324 100644 > --- a/drivers/hid/wacom_wac.c > +++ b/drivers/hid/wacom_wac.c > @@ -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; > -- > 2.20.1 >