Commit 60a22186 authored by Aaron Armstrong Skomra's avatar Aaron Armstrong Skomra Committed by Jiri Kosina

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: default avatarAaron Skomra <aaron.skomra@wacom.com>
Reviewed-by: default avatarPing Cheng <pingc@wacom.com>
Signed-off-by: default avatarJiri Kosina <jkosina@suse.cz>
parent 65ef4c1e
...@@ -1733,6 +1733,10 @@ static void wacom_wac_pad_usage_mapping(struct hid_device *hdev, ...@@ -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 ...@@ -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, ...@@ -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)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment