Commit 488abb5c authored by Jason Gerecke's avatar Jason Gerecke Committed by Jiri Kosina

HID: wacom: Report touch width/height/orientation for GENERIC devices

The HID_DG_WIDTH and HID_DG_HEIGHT usages report with width and height of
contacts. From this information, a crude determination of orientation is
also possible. This patch reports all three to userspace if a device
reports this usage.
Signed-off-by: default avatarJason Gerecke <jason.gerecke@wacom.com>
Signed-off-by: default avatarJiri Kosina <jkosina@suse.com>
parent 1b5d514a
...@@ -1497,6 +1497,13 @@ static void wacom_wac_finger_usage_mapping(struct hid_device *hdev, ...@@ -1497,6 +1497,13 @@ static void wacom_wac_finger_usage_mapping(struct hid_device *hdev,
wacom_map_usage(input, usage, field, EV_ABS, wacom_map_usage(input, usage, field, EV_ABS,
ABS_MT_POSITION_Y, 4); ABS_MT_POSITION_Y, 4);
break; break;
case HID_DG_WIDTH:
case HID_DG_HEIGHT:
features->last_slot_field = usage->hid;
wacom_map_usage(input, usage, field, EV_ABS, ABS_MT_TOUCH_MAJOR, 0);
wacom_map_usage(input, usage, field, EV_ABS, ABS_MT_TOUCH_MINOR, 0);
input_set_abs_params(input, ABS_MT_ORIENTATION, 0, 1, 0, 0);
break;
case HID_DG_CONTACTID: case HID_DG_CONTACTID:
features->last_slot_field = usage->hid; features->last_slot_field = usage->hid;
break; break;
...@@ -1545,6 +1552,13 @@ static void wacom_wac_finger_slot(struct wacom_wac *wacom_wac, ...@@ -1545,6 +1552,13 @@ static void wacom_wac_finger_slot(struct wacom_wac *wacom_wac,
hid_data->x); hid_data->x);
input_report_abs(input, mt ? ABS_MT_POSITION_Y : ABS_Y, input_report_abs(input, mt ? ABS_MT_POSITION_Y : ABS_Y,
hid_data->y); hid_data->y);
if (test_bit(ABS_MT_TOUCH_MAJOR, input->absbit)) {
input_report_abs(input, ABS_MT_TOUCH_MAJOR, max(hid_data->width, hid_data->height));
input_report_abs(input, ABS_MT_TOUCH_MINOR, min(hid_data->width, hid_data->height));
if (hid_data->width != hid_data->height)
input_report_abs(input, ABS_MT_ORIENTATION, hid_data->width <= hid_data->height ? 0 : 1);
}
} }
} }
...@@ -1561,6 +1575,12 @@ static int wacom_wac_finger_event(struct hid_device *hdev, ...@@ -1561,6 +1575,12 @@ static int wacom_wac_finger_event(struct hid_device *hdev,
case HID_GD_Y: case HID_GD_Y:
wacom_wac->hid_data.y = value; wacom_wac->hid_data.y = value;
break; break;
case HID_DG_WIDTH:
wacom_wac->hid_data.width = value;
break;
case HID_DG_HEIGHT:
wacom_wac->hid_data.height = value;
break;
case HID_DG_CONTACTID: case HID_DG_CONTACTID:
wacom_wac->hid_data.id = value; wacom_wac->hid_data.id = value;
break; break;
......
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