mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-22 17:01:14 +00:00
Input: wacom - prepare for syncing with input-mt changes
Henrik added new MT routines in release 3.7. This patch is to prepare for the use of new MT routines. In the newly added wacom_abs_set_axis() function, the first if-statement assigns ABS_X/Y for number of contacts less or equal to 2. So, it is single and 2 finger touch devices. Two finger touch devices are processed here since they will not use the updated input_mt_init_slots(), which does not offer benefit to those devices. input_mt_init_slots() will take care of ABS_X/Y assignment when flags are not zero. All touch devices with more than two contacts will use input_mt_init_slots() with non-zero flags. The second if-statement is for all MT devices, which include two finger touch devices. Signed-off-by: Ping Cheng <pingc@wacom.com> Reviewed-by: Henrik Rydberg <rydberg@euromail.se> Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
This commit is contained in:
parent
0e47e3dccf
commit
8c0e0a4fa8
1 changed files with 47 additions and 42 deletions
|
@ -1444,6 +1444,51 @@ static unsigned int wacom_calculate_touch_res(unsigned int logical_max,
|
||||||
return (logical_max * 100) / physical_max;
|
return (logical_max * 100) / physical_max;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void wacom_abs_set_axis(struct input_dev *input_dev,
|
||||||
|
struct wacom_wac *wacom_wac)
|
||||||
|
{
|
||||||
|
struct wacom_features *features = &wacom_wac->features;
|
||||||
|
|
||||||
|
if (features->device_type == BTN_TOOL_PEN) {
|
||||||
|
input_set_abs_params(input_dev, ABS_X, 0, features->x_max,
|
||||||
|
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);
|
||||||
|
|
||||||
|
/* 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);
|
||||||
|
} else {
|
||||||
|
if (features->touch_max <= 2) {
|
||||||
|
input_set_abs_params(input_dev, ABS_X, 0,
|
||||||
|
features->x_max, features->x_fuzz, 0);
|
||||||
|
input_set_abs_params(input_dev, ABS_Y, 0,
|
||||||
|
features->y_max, features->y_fuzz, 0);
|
||||||
|
input_abs_set_res(input_dev, ABS_X,
|
||||||
|
wacom_calculate_touch_res(features->x_max,
|
||||||
|
features->x_phy));
|
||||||
|
input_abs_set_res(input_dev, ABS_Y,
|
||||||
|
wacom_calculate_touch_res(features->y_max,
|
||||||
|
features->y_phy));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (features->touch_max > 1) {
|
||||||
|
input_set_abs_params(input_dev, ABS_MT_POSITION_X, 0,
|
||||||
|
features->x_max, features->x_fuzz, 0);
|
||||||
|
input_set_abs_params(input_dev, ABS_MT_POSITION_Y, 0,
|
||||||
|
features->y_max, features->y_fuzz, 0);
|
||||||
|
input_abs_set_res(input_dev, ABS_MT_POSITION_X,
|
||||||
|
wacom_calculate_touch_res(features->x_max,
|
||||||
|
features->x_phy));
|
||||||
|
input_abs_set_res(input_dev, ABS_MT_POSITION_Y,
|
||||||
|
wacom_calculate_touch_res(features->y_max,
|
||||||
|
features->y_phy));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
int wacom_setup_input_capabilities(struct input_dev *input_dev,
|
int wacom_setup_input_capabilities(struct input_dev *input_dev,
|
||||||
struct wacom_wac *wacom_wac)
|
struct wacom_wac *wacom_wac)
|
||||||
{
|
{
|
||||||
|
@ -1453,30 +1498,10 @@ int wacom_setup_input_capabilities(struct input_dev *input_dev,
|
||||||
input_dev->evbit[0] |= BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS);
|
input_dev->evbit[0] |= BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS);
|
||||||
|
|
||||||
__set_bit(BTN_TOUCH, input_dev->keybit);
|
__set_bit(BTN_TOUCH, input_dev->keybit);
|
||||||
|
|
||||||
input_set_abs_params(input_dev, ABS_X, 0, features->x_max,
|
|
||||||
features->x_fuzz, 0);
|
|
||||||
input_set_abs_params(input_dev, ABS_Y, 0, features->y_max,
|
|
||||||
features->y_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);
|
|
||||||
} else {
|
|
||||||
input_abs_set_res(input_dev, ABS_X,
|
|
||||||
wacom_calculate_touch_res(features->x_max,
|
|
||||||
features->x_phy));
|
|
||||||
input_abs_set_res(input_dev, ABS_Y,
|
|
||||||
wacom_calculate_touch_res(features->y_max,
|
|
||||||
features->y_phy));
|
|
||||||
}
|
|
||||||
|
|
||||||
__set_bit(ABS_MISC, input_dev->absbit);
|
__set_bit(ABS_MISC, input_dev->absbit);
|
||||||
|
|
||||||
|
wacom_abs_set_axis(input_dev, wacom_wac);
|
||||||
|
|
||||||
switch (wacom_wac->features.type) {
|
switch (wacom_wac->features.type) {
|
||||||
case WACOM_MO:
|
case WACOM_MO:
|
||||||
input_set_abs_params(input_dev, ABS_WHEEL, 0, 71, 0, 0);
|
input_set_abs_params(input_dev, ABS_WHEEL, 0, 71, 0, 0);
|
||||||
|
@ -1625,13 +1650,6 @@ int wacom_setup_input_capabilities(struct input_dev *input_dev,
|
||||||
0, features->x_max, 0, 0);
|
0, features->x_max, 0, 0);
|
||||||
input_set_abs_params(input_dev, ABS_MT_TOUCH_MINOR,
|
input_set_abs_params(input_dev, ABS_MT_TOUCH_MINOR,
|
||||||
0, features->y_max, 0, 0);
|
0, features->y_max, 0, 0);
|
||||||
|
|
||||||
input_set_abs_params(input_dev, ABS_MT_POSITION_X,
|
|
||||||
0, features->x_max,
|
|
||||||
features->x_fuzz, 0);
|
|
||||||
input_set_abs_params(input_dev, ABS_MT_POSITION_Y,
|
|
||||||
0, features->y_max,
|
|
||||||
features->y_fuzz, 0);
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -1677,12 +1695,6 @@ int wacom_setup_input_capabilities(struct input_dev *input_dev,
|
||||||
case TABLETPC2FG:
|
case TABLETPC2FG:
|
||||||
if (features->device_type == BTN_TOOL_FINGER) {
|
if (features->device_type == BTN_TOOL_FINGER) {
|
||||||
input_mt_init_slots(input_dev, features->touch_max, 0);
|
input_mt_init_slots(input_dev, features->touch_max, 0);
|
||||||
input_set_abs_params(input_dev, ABS_MT_TOOL_TYPE,
|
|
||||||
0, MT_TOOL_MAX, 0, 0);
|
|
||||||
input_set_abs_params(input_dev, ABS_MT_POSITION_X,
|
|
||||||
0, features->x_max, 0, 0);
|
|
||||||
input_set_abs_params(input_dev, ABS_MT_POSITION_Y,
|
|
||||||
0, features->y_max, 0, 0);
|
|
||||||
}
|
}
|
||||||
/* fall through */
|
/* fall through */
|
||||||
|
|
||||||
|
@ -1747,13 +1759,6 @@ int wacom_setup_input_capabilities(struct input_dev *input_dev,
|
||||||
ABS_MT_TOUCH_MINOR,
|
ABS_MT_TOUCH_MINOR,
|
||||||
0, features->y_max, 0, 0);
|
0, features->y_max, 0, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
input_set_abs_params(input_dev, ABS_MT_POSITION_X,
|
|
||||||
0, features->x_max,
|
|
||||||
features->x_fuzz, 0);
|
|
||||||
input_set_abs_params(input_dev, ABS_MT_POSITION_Y,
|
|
||||||
0, features->y_max,
|
|
||||||
features->y_fuzz, 0);
|
|
||||||
} else if (features->device_type == BTN_TOOL_PEN) {
|
} else if (features->device_type == BTN_TOOL_PEN) {
|
||||||
__set_bit(BTN_TOOL_RUBBER, input_dev->keybit);
|
__set_bit(BTN_TOOL_RUBBER, input_dev->keybit);
|
||||||
__set_bit(BTN_TOOL_PEN, input_dev->keybit);
|
__set_bit(BTN_TOOL_PEN, input_dev->keybit);
|
||||||
|
|
Loading…
Reference in a new issue