mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-25 05:04:09 +08:00
Merge branch 'for-5.1/wacom' into for-linus
Wacom driver cleanups from Gustavo A. R. Silva and Jason Gerecke Support for Pro Pen slim from Jason Gerecke
This commit is contained in:
commit
49374f0061
@ -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 &&
|
||||
|
@ -626,6 +626,7 @@ static int wacom_intuos_get_tool_type(int tool_id)
|
||||
case 0x8e2: /* IntuosHT2 pen */
|
||||
case 0x022:
|
||||
case 0x10804: /* Intuos4/5 13HD/24HD Art Pen */
|
||||
case 0x10842: /* MobileStudio Pro Pro Pen slim */
|
||||
case 0x14802: /* Intuos4/5 13HD/24HD Classic Pen */
|
||||
case 0x16802: /* Cintiq 13HD Pro Pen */
|
||||
case 0x18802: /* DTH2242 Pen */
|
||||
@ -667,6 +668,7 @@ static int wacom_intuos_get_tool_type(int tool_id)
|
||||
case 0x1480a: /* Intuos4/5 13HD/24HD Classic Pen Eraser */
|
||||
case 0x1090a: /* Intuos4/5 13HD/24HD Airbrush Eraser */
|
||||
case 0x1080c: /* Intuos4/5 13HD/24HD Art Pen Eraser */
|
||||
case 0x1084a: /* MobileStudio Pro Pro Pen slim Eraser */
|
||||
case 0x1680a: /* Cintiq 13HD Pro Pen Eraser */
|
||||
case 0x1880a: /* DTH2242 Eraser */
|
||||
case 0x1080a: /* Intuos4/5 13HD/24HD General Pen Eraser */
|
||||
@ -2159,27 +2161,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;
|
||||
@ -3525,6 +3506,7 @@ int wacom_setup_pen_input_capabilities(struct input_dev *input_dev,
|
||||
switch (features->type) {
|
||||
case GRAPHIRE_BT:
|
||||
__clear_bit(ABS_MISC, input_dev->absbit);
|
||||
/* fall through */
|
||||
|
||||
case WACOM_MO:
|
||||
case WACOM_G4:
|
||||
|
Loading…
Reference in New Issue
Block a user