mirror of https://gitee.com/openkylin/linux.git
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 */
|
/* 2nd-generation Intuos Pro Large has incorrect Y maximum */
|
||||||
if (hdev->vendor == USB_VENDOR_ID_WACOM &&
|
if (hdev->vendor == USB_VENDOR_ID_WACOM &&
|
||||||
hdev->product == 0x0358 &&
|
hdev->product == 0x0358 &&
|
||||||
|
|
|
@ -626,6 +626,7 @@ static int wacom_intuos_get_tool_type(int tool_id)
|
||||||
case 0x8e2: /* IntuosHT2 pen */
|
case 0x8e2: /* IntuosHT2 pen */
|
||||||
case 0x022:
|
case 0x022:
|
||||||
case 0x10804: /* Intuos4/5 13HD/24HD Art Pen */
|
case 0x10804: /* Intuos4/5 13HD/24HD Art Pen */
|
||||||
|
case 0x10842: /* MobileStudio Pro Pro Pen slim */
|
||||||
case 0x14802: /* Intuos4/5 13HD/24HD Classic Pen */
|
case 0x14802: /* Intuos4/5 13HD/24HD Classic Pen */
|
||||||
case 0x16802: /* Cintiq 13HD Pro Pen */
|
case 0x16802: /* Cintiq 13HD Pro Pen */
|
||||||
case 0x18802: /* DTH2242 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 0x1480a: /* Intuos4/5 13HD/24HD Classic Pen Eraser */
|
||||||
case 0x1090a: /* Intuos4/5 13HD/24HD Airbrush Eraser */
|
case 0x1090a: /* Intuos4/5 13HD/24HD Airbrush Eraser */
|
||||||
case 0x1080c: /* Intuos4/5 13HD/24HD Art Pen 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 0x1680a: /* Cintiq 13HD Pro Pen Eraser */
|
||||||
case 0x1880a: /* DTH2242 Eraser */
|
case 0x1880a: /* DTH2242 Eraser */
|
||||||
case 0x1080a: /* Intuos4/5 13HD/24HD General Pen 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:
|
case HID_DG_TOOLSERIALNUMBER:
|
||||||
features->quirks |= WACOM_QUIRK_TOOLSERIAL;
|
features->quirks |= WACOM_QUIRK_TOOLSERIAL;
|
||||||
wacom_map_usage(input, usage, field, EV_MSC, MSC_SERIAL, 0);
|
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;
|
break;
|
||||||
case WACOM_HID_WD_SENSE:
|
case WACOM_HID_WD_SENSE:
|
||||||
features->quirks |= WACOM_QUIRK_SENSE;
|
features->quirks |= WACOM_QUIRK_SENSE;
|
||||||
|
@ -3525,6 +3506,7 @@ int wacom_setup_pen_input_capabilities(struct input_dev *input_dev,
|
||||||
switch (features->type) {
|
switch (features->type) {
|
||||||
case GRAPHIRE_BT:
|
case GRAPHIRE_BT:
|
||||||
__clear_bit(ABS_MISC, input_dev->absbit);
|
__clear_bit(ABS_MISC, input_dev->absbit);
|
||||||
|
/* fall through */
|
||||||
|
|
||||||
case WACOM_MO:
|
case WACOM_MO:
|
||||||
case WACOM_G4:
|
case WACOM_G4:
|
||||||
|
|
Loading…
Reference in New Issue