input: wacom - Pass touch resolution to clients through input_absinfo
Subsystems (2)
PATCH v3 1/1 input: wacom - Pass touch resolution to clients through input_absinfo
Fixed the workaround used for kernels older than 2.6.35.
This version added a funtion, wacom_touch_resolution, to calculate touch resolutions.
--- drivers/input/tablet/wacom_wac.c | 21 +++++++++++++++++++-- 1 files changed, 19 insertions(+), 2 deletions(-)
drivers/input/tablet/wacom_wac.c +19 -2
@@ -1101,6 +1101,15 @@ void wacom_setup_device_quirks(struct wacom_features *features) } } +static int wacom_touch_resolution (struct wacom_features *features,int axe) +{ +/* touch physical size is in hundredths of a mm */ +if (!axe) +return (100 * features->x_max / features->x_phy); +else +return (100 * features->y_max / features->y_phy); +} +void wacom_setup_input_capabilities (struct input_dev *input_dev,struct wacom_wac *wacom_wac) {
@@ -1228,8 +1237,11 @@ void wacom_setup_input_capabilities(struct input_dev *input_dev,case TABLETPC :if (features->device_type ==BTN_TOOL_DOUBLETAP || features->device_type ==BTN_TOOL_TRIPLETAP ) { -input_set_abs_params (input_dev,ABS_RX ,0 , features->x_phy,0 ,0 ); -input_set_abs_params (input_dev,ABS_RY ,0 , features->y_phy,0 ,0 ); +/* set touch resolution in points/mm */ +input_abs_set_res (input_dev,ABS_X , +wacom_touch_resolution (features,0 )); +input_abs_set_res (input_dev,ABS_Y , +wacom_touch_resolution (features,1 ));__set_bit (BTN_TOOL_DOUBLETAP , input_dev->keybit); }
@@ -1272,6 +1284,11 @@ void wacom_setup_input_capabilities(struct input_dev *input_dev,input_set_abs_params (input_dev,ABS_MT_PRESSURE ,0 , features->pressure_max, features->pressure_fuzz,0 ); +/* set touch resolution in points/mm */ +input_abs_set_res (input_dev,ABS_X , +wacom_touch_resolution (features,0 )); +input_abs_set_res (input_dev,ABS_Y , +wacom_touch_resolution (features,0 )); }else if (features->device_type ==BTN_TOOL_PEN ) {__set_bit (BTN_TOOL_RUBBER , input_dev->keybit);__set_bit (BTN_TOOL_PEN , input_dev->keybit);
Signature · 1 line
1.7.3.4
Dmitry Torokhov
maintainerQuoted 16 lines · Ping Cheng
Fixed the workaround used for kernels older than 2.6.35.
This version added a funtion,
wacom_touch_resolution, to calculate touch resolutions.Signed-off-by Ping Cheng <[email protected]>Reviewed-by Henrik Rydberg <[email protected]>--- drivers/input/tablet/wacom_wac.c | 21 +++++++++++++++++++-- 1 files changed, 19 insertions(+), 2 deletions(-)drivers/input/tablet/wacom_wac.c +0
-0@@ -1101,6 +1101,15 @@ void wacom_setup_device_quirks(struct wacom_features *features) }
drivers/input/tablet/wacom_wac.c void wacom_setup_device_quirks(struct wacom_features *features) · line 1111
Quoted 10 lines
drivers/input/tablet/wacom_wac.c +8
-0} +static int wacom_touch_resolution (struct wacom_features *features,int axe) +{ +/* touch physical size is in hundredths of a mm */ +if (!axe) +return (100 * features->x_max / features->x_phy); +else +return (100 * features->y_max / features->y_phy); +}
Meh...
static unsigned int wacom_calculate_resolution(unsigned int logical_max,
unsigned int physical_max)
{
/* Physical dimensions are in 100th of mm */
return (logical_max * 100) / physical_max;
}Quoted 19 lines
drivers/input/tablet/wacom_wac.c +6
-2+void wacom_setup_input_capabilities (struct input_dev *input_dev,struct wacom_wac *wacom_wac) {@@ -1228,8 +1237,11 @@ void wacom_setup_input_capabilities(struct input_dev *input_dev,case TABLETPC :if (features->device_type ==BTN_TOOL_DOUBLETAP || features->device_type ==BTN_TOOL_TRIPLETAP ) { -input_set_abs_params (input_dev,ABS_RX ,0 , features->x_phy,0 ,0 ); -input_set_abs_params (input_dev,ABS_RY ,0 , features->y_phy,0 ,0 ); +/* set touch resolution in points/mm */ +input_abs_set_res (input_dev,ABS_X , +wacom_touch_resolution (features,0 )); +input_abs_set_res (input_dev,ABS_Y , +wacom_touch_resolution (features,1 ));__set_bit (BTN_TOOL_DOUBLETAP , input_dev->keybit); }
drivers/input/tablet/wacom_wac.c void wacom_setup_input_capabilities(struct input_dev *input_dev, · line 1291
Quoted 8 lines
drivers/input/tablet/wacom_wac.c +5
-0@@ -1272,6 +1284,11 @@ void wacom_setup_input_capabilities(struct input_dev *input_dev,input_set_abs_params (input_dev,ABS_MT_PRESSURE ,0 , features->pressure_max, features->pressure_fuzz,0 ); +/* set touch resolution in points/mm */ +input_abs_set_res (input_dev,ABS_X , +wacom_touch_resolution (features,0 )); +input_abs_set_res (input_dev,ABS_Y , +wacom_touch_resolution (features,0 ));
Should be wacom_touch_resolution(features, 1). Or rather:
input_abs_set_res(input_dev, ABS_Y, wacom_calculate_resolution(features->y_max, features->y_phy));
Signature · 1 line
Dmitry