|
@@ -800,25 +800,26 @@ static int wacom_bpt_touch(struct wacom_wac *wacom)
|
|
|
int i;
|
|
|
|
|
|
for (i = 0; i < 2; i++) {
|
|
|
- int p = data[9 * i + 2];
|
|
|
- bool touch = p && !wacom->shared->stylus_in_proximity;
|
|
|
+ int offset = (data[1] & 0x80) ? (8 * i) : (9 * i);
|
|
|
+ bool touch = data[offset + 3] & 0x80;
|
|
|
|
|
|
- input_mt_slot(input, i);
|
|
|
- input_mt_report_slot_state(input, MT_TOOL_FINGER, touch);
|
|
|
/*
|
|
|
* Touch events need to be disabled while stylus is
|
|
|
* in proximity because user's hand is resting on touchpad
|
|
|
* and sending unwanted events. User expects tablet buttons
|
|
|
* to continue working though.
|
|
|
*/
|
|
|
+ touch = touch && !wacom->shared->stylus_in_proximity;
|
|
|
+
|
|
|
+ input_mt_slot(input, i);
|
|
|
+ input_mt_report_slot_state(input, MT_TOOL_FINGER, touch);
|
|
|
if (touch) {
|
|
|
- int x = get_unaligned_be16(&data[9 * i + 3]) & 0x7ff;
|
|
|
- int y = get_unaligned_be16(&data[9 * i + 5]) & 0x7ff;
|
|
|
+ int x = get_unaligned_be16(&data[offset + 3]) & 0x7ff;
|
|
|
+ int y = get_unaligned_be16(&data[offset + 5]) & 0x7ff;
|
|
|
if (features->quirks & WACOM_QUIRK_BBTOUCH_LOWRES) {
|
|
|
x <<= 5;
|
|
|
y <<= 5;
|
|
|
}
|
|
|
- input_report_abs(input, ABS_MT_PRESSURE, p);
|
|
|
input_report_abs(input, ABS_MT_POSITION_X, x);
|
|
|
input_report_abs(input, ABS_MT_POSITION_Y, y);
|
|
|
}
|
|
@@ -1056,10 +1057,11 @@ void wacom_setup_input_capabilities(struct input_dev *input_dev,
|
|
|
features->x_fuzz, 0);
|
|
|
input_set_abs_params(input_dev, ABS_Y, 0, features->y_max,
|
|
|
features->y_fuzz, 0);
|
|
|
- input_set_abs_params(input_dev, ABS_PRESSURE, 0, features->pressure_max,
|
|
|
- features->pressure_fuzz, 0);
|
|
|
|
|
|
if (features->device_type == BTN_TOOL_PEN) {
|
|
|
+ input_set_abs_params(input_dev, ABS_PRESSURE, 0, features->pressure_max,
|
|
|
+ features->pressure_fuzz, 0);
|
|
|
+
|
|
|
/* penabled devices have fixed resolution for each model */
|
|
|
input_abs_set_res(input_dev, ABS_X, features->x_resolution);
|
|
|
input_abs_set_res(input_dev, ABS_Y, features->y_resolution);
|
|
@@ -1098,6 +1100,8 @@ void wacom_setup_input_capabilities(struct input_dev *input_dev,
|
|
|
__set_bit(BTN_TOOL_MOUSE, input_dev->keybit);
|
|
|
__set_bit(BTN_STYLUS, input_dev->keybit);
|
|
|
__set_bit(BTN_STYLUS2, input_dev->keybit);
|
|
|
+
|
|
|
+ __set_bit(INPUT_PROP_POINTER, input_dev->propbit);
|
|
|
break;
|
|
|
|
|
|
case WACOM_21UX2:
|
|
@@ -1126,6 +1130,9 @@ void wacom_setup_input_capabilities(struct input_dev *input_dev,
|
|
|
}
|
|
|
|
|
|
input_set_abs_params(input_dev, ABS_Z, -900, 899, 0, 0);
|
|
|
+
|
|
|
+ __set_bit(INPUT_PROP_DIRECT, input_dev->propbit);
|
|
|
+
|
|
|
wacom_setup_cintiq(wacom_wac);
|
|
|
break;
|
|
|
|
|
@@ -1150,6 +1157,8 @@ void wacom_setup_input_capabilities(struct input_dev *input_dev,
|
|
|
/* fall through */
|
|
|
|
|
|
case INTUOS:
|
|
|
+ __set_bit(INPUT_PROP_POINTER, input_dev->propbit);
|
|
|
+
|
|
|
wacom_setup_intuos(wacom_wac);
|
|
|
break;
|
|
|
|
|
@@ -1165,6 +1174,8 @@ void wacom_setup_input_capabilities(struct input_dev *input_dev,
|
|
|
|
|
|
input_set_abs_params(input_dev, ABS_Z, -900, 899, 0, 0);
|
|
|
wacom_setup_intuos(wacom_wac);
|
|
|
+
|
|
|
+ __set_bit(INPUT_PROP_POINTER, input_dev->propbit);
|
|
|
break;
|
|
|
|
|
|
case TABLETPC2FG:
|
|
@@ -1183,26 +1194,40 @@ void wacom_setup_input_capabilities(struct input_dev *input_dev,
|
|
|
case TABLETPC:
|
|
|
__clear_bit(ABS_MISC, input_dev->absbit);
|
|
|
|
|
|
+ __set_bit(INPUT_PROP_DIRECT, input_dev->propbit);
|
|
|
+
|
|
|
if (features->device_type != BTN_TOOL_PEN)
|
|
|
break; /* no need to process stylus stuff */
|
|
|
|
|
|
/* fall through */
|
|
|
|
|
|
case PL:
|
|
|
- case PTU:
|
|
|
case DTU:
|
|
|
__set_bit(BTN_TOOL_PEN, input_dev->keybit);
|
|
|
+ __set_bit(BTN_TOOL_RUBBER, input_dev->keybit);
|
|
|
__set_bit(BTN_STYLUS, input_dev->keybit);
|
|
|
__set_bit(BTN_STYLUS2, input_dev->keybit);
|
|
|
+
|
|
|
+ __set_bit(INPUT_PROP_DIRECT, input_dev->propbit);
|
|
|
+ break;
|
|
|
+
|
|
|
+ case PTU:
|
|
|
+ __set_bit(BTN_STYLUS2, input_dev->keybit);
|
|
|
/* fall through */
|
|
|
|
|
|
case PENPARTNER:
|
|
|
+ __set_bit(BTN_TOOL_PEN, input_dev->keybit);
|
|
|
__set_bit(BTN_TOOL_RUBBER, input_dev->keybit);
|
|
|
+ __set_bit(BTN_STYLUS, input_dev->keybit);
|
|
|
+
|
|
|
+ __set_bit(INPUT_PROP_POINTER, input_dev->propbit);
|
|
|
break;
|
|
|
|
|
|
case BAMBOO_PT:
|
|
|
__clear_bit(ABS_MISC, input_dev->absbit);
|
|
|
|
|
|
+ __set_bit(INPUT_PROP_POINTER, input_dev->propbit);
|
|
|
+
|
|
|
if (features->device_type == BTN_TOOL_DOUBLETAP) {
|
|
|
__set_bit(BTN_LEFT, input_dev->keybit);
|
|
|
__set_bit(BTN_FORWARD, input_dev->keybit);
|