mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-22 20:23:57 +08:00
HID: wacom: generic: add support for touchring
Add support for the touchring to the generic code path in support of the second generation Intuos Pro. We also add checks for usage->type to ensure that we handle the usage before we report it, or change the inrange_state based on it. Signed-off-by: Aaron Skomra <aaron.skomra@wacom.com> Reviewed-by: Ping Cheng <pingc@wacom.com> Signed-off-by: Jiri Kosina <jkosina@suse.cz>
This commit is contained in:
parent
65ef4c1e98
commit
60a2218698
@ -1733,6 +1733,10 @@ static void wacom_wac_pad_usage_mapping(struct hid_device *hdev,
|
|||||||
wacom_map_usage(input, usage, field, EV_ABS, ABS_WHEEL, 0);
|
wacom_map_usage(input, usage, field, EV_ABS, ABS_WHEEL, 0);
|
||||||
features->device_type |= WACOM_DEVICETYPE_PAD;
|
features->device_type |= WACOM_DEVICETYPE_PAD;
|
||||||
break;
|
break;
|
||||||
|
case WACOM_HID_WD_TOUCHRINGSTATUS:
|
||||||
|
wacom_map_usage(input, usage, field, EV_ABS, ABS_WHEEL, 0);
|
||||||
|
features->device_type |= WACOM_DEVICETYPE_PAD;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (equivalent_usage & 0xfffffff0) {
|
switch (equivalent_usage & 0xfffffff0) {
|
||||||
@ -1775,12 +1779,22 @@ static void wacom_wac_pad_event(struct hid_device *hdev, struct hid_field *field
|
|||||||
struct input_dev *input = wacom_wac->pad_input;
|
struct input_dev *input = wacom_wac->pad_input;
|
||||||
unsigned equivalent_usage = wacom_equivalent_usage(usage->hid);
|
unsigned equivalent_usage = wacom_equivalent_usage(usage->hid);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Avoid reporting this event and setting inrange_state if this usage
|
||||||
|
* hasn't been mapped.
|
||||||
|
*/
|
||||||
|
if (!usage->type)
|
||||||
|
return;
|
||||||
|
|
||||||
if (wacom_equivalent_usage(field->physical) == HID_DG_TABLETFUNCTIONKEY) {
|
if (wacom_equivalent_usage(field->physical) == HID_DG_TABLETFUNCTIONKEY) {
|
||||||
wacom_wac->hid_data.inrange_state |= value;
|
if (usage->hid != WACOM_HID_WD_TOUCHRING)
|
||||||
|
wacom_wac->hid_data.inrange_state |= value;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (equivalent_usage) {
|
switch (equivalent_usage) {
|
||||||
case WACOM_HID_WD_TOUCHRINGSTATUS:
|
case WACOM_HID_WD_TOUCHRINGSTATUS:
|
||||||
|
if (!value)
|
||||||
|
input_event(input, usage->type, usage->code, 0);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
@ -2288,6 +2302,9 @@ void wacom_wac_event(struct hid_device *hdev, struct hid_field *field,
|
|||||||
if (wacom->wacom_wac.features.type != HID_GENERIC)
|
if (wacom->wacom_wac.features.type != HID_GENERIC)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
if (value > field->logical_maximum || value < field->logical_minimum)
|
||||||
|
return;
|
||||||
|
|
||||||
if (WACOM_PAD_FIELD(field)) {
|
if (WACOM_PAD_FIELD(field)) {
|
||||||
wacom_wac_pad_battery_event(hdev, field, usage, value);
|
wacom_wac_pad_battery_event(hdev, field, usage, value);
|
||||||
if (wacom->wacom_wac.pad_input)
|
if (wacom->wacom_wac.pad_input)
|
||||||
|
Loading…
Reference in New Issue
Block a user