elantech: export pressure and width when supported
Subsystems (2)
PATCH 4/6 elantech: export pressure and width when supported
Using the info of the Dell/Ubuntu driver, described in the protocol document, report both width and pressure when pressing 1 and 3 fingers, for the versions of the touchpad which support it.
Signed-off-by Éric Piel <[email protected]>
--- drivers/input/mouse/elantech.c | 19 ++++++++++++++++++- drivers/input/mouse/elantech.h | 5 +++++ 2 files changed, 23 insertions(+), 1 deletions(-)
drivers/input/mouse/elantech.c +18 -1
@@ -248,9 +248,10 @@ static void elantech_report_absolute_v1(struct psmouse *psmouse)*/ static void elantech_report_absolute_v2 (struct psmouse *psmouse) { +struct elantech_data *etd = psmouse->private;struct input_dev *dev = psmouse->dev;unsigned char *packet = psmouse->packet; -int fingers, x1, y1, x2, y2; +int fingers, x1, y1, x2, y2, width =0 , pres =0 ;/* byte 0: n1 n0 . . . . R L */ fingers = (packet[0 ] &0xc0 ) >>6 ;
@@ -278,6 +279,8 @@ static void elantech_report_absolute_v2(struct psmouse *psmouse)*/ input_report_abs (dev,ABS_Y ,ETP_YMAX_V2 - (((packet[4 ] &0x03 ) <<8 ) | packet[5 ])); + pres = (packet[1 ] &0xf0 ) | ((packet[4 ] &0xf0 ) >>4 ); + width = ((packet[0 ] &0x30 ) >>2 ) | ((packet[3 ] &0x30 ) >>4 );break ;case 2 :
@@ -311,6 +314,10 @@ static void elantech_report_absolute_v2(struct psmouse *psmouse)input_report_abs (dev,ABS_HAT0Y , y1);input_report_abs (dev,ABS_HAT1X , x2);input_report_abs (dev,ABS_HAT1Y , y2); + +/* Unknown so just report sensible values */ + pres =127 ; + width =7 ;break ; }
@@ -320,6 +327,10 @@ static void elantech_report_absolute_v2(struct psmouse *psmouse)input_report_key (dev,BTN_TOOL_QUADTAP , fingers ==4 );input_report_key (dev,BTN_LEFT , packet[0 ] &0x01 );input_report_key (dev,BTN_RIGHT , packet[0 ] &0x02 ); +if (etd->reports_pres) { +input_report_abs (dev,ABS_PRESSURE , pres); +input_report_abs (dev,ABS_TOOL_WIDTH , width); + }input_sync (dev); }
@@ -531,6 +542,12 @@ static void elantech_set_input_params(struct psmouse *psmouse)__set_bit (BTN_TOOL_QUADTAP , dev->keybit);input_set_abs_params (dev,ABS_X ,ETP_XMIN_V2 ,ETP_XMAX_V2 ,0 ,0 );input_set_abs_params (dev,ABS_Y ,ETP_YMIN_V2 ,ETP_YMAX_V2 ,0 ,0 ); +if (etd->reports_pres) { +input_set_abs_params (dev,ABS_PRESSURE ,ETP_PMIN_V2 , +ETP_PMAX_V2 ,0 ,0 ); +input_set_abs_params (dev,ABS_TOOL_WIDTH ,ETP_WMIN_V2 , +ETP_WMAX_V2 ,0 ,0 ); + }input_set_abs_params (dev,ABS_HAT0X ,ETP_2FT_XMIN ,ETP_2FT_XMAX ,0 ,0 );input_set_abs_params (dev,ABS_HAT0Y ,ETP_2FT_YMIN ,ETP_2FT_YMAX ,0 ,0 );input_set_abs_params (dev,ABS_HAT1X ,ETP_2FT_XMIN ,ETP_2FT_XMAX ,0 ,0 );
drivers/input/mouse/elantech.h +5 -0
@@ -77,6 +77,11 @@#define ETP_YMIN_V2 ( 0 + ETP_EDGE_FUZZ_V2)#define ETP_YMAX_V2 ( 768 - ETP_EDGE_FUZZ_V2) +#define ETP_PMIN_V2 0 +#define ETP_PMAX_V2 255 +#define ETP_WMIN_V2 0 +#define ETP_WMAX_V2 15 +/* * For two finger touches the coordinate of each finger gets reported * separately but with reduced resolution.
Signature · 6 lines
1.7.5.1 -- To unsubscribe from this list: send the line "unsubscribe linux-input" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html