pmaports/device/linux-huawei-y530/08_fix_touchscreen.patch

75 lines
3.1 KiB
Diff
Raw Normal View History

diff --git a/drivers/input/touchscreen/synaptics_rmi_hw/rmi_f11.c b/drivers/input/touchscreen/synaptics_rmi_hw/rmi_f11.c
index fc20c596..bd4c77ba 100644
--- a/drivers/input/touchscreen/synaptics_rmi_hw/rmi_f11.c
+++ b/drivers/input/touchscreen/synaptics_rmi_hw/rmi_f11.c
@@ -574,6 +574,7 @@ static void rmi_f11_abs_pos_report(struct f11_2d_sensor *sensor,
if (prev_state && !finger_state) {
/* this is a release */
x = y = z = w_max = w_min = orient = 0;
+ input_report_abs(sensor->input, ABS_MT_TRACKING_ID, -1);
} else if (!prev_state && !finger_state) {
/* nothing to report */
return;
@@ -627,38 +628,38 @@ static void rmi_f11_abs_pos_report(struct f11_2d_sensor *sensor,
if (axis_align->clip_Y_high)
y = min(axis_align->clip_Y_high, y);
- }
- x = x * x_lcd / sensor->max_x;
- x = check_scope_x(x);
- y = y * y_lcd_all / sensor->max_y;
- pr_debug("%s: f_state[%d]:%d - x:%d y:%d z:%d w_max:%d w_min:%d max_x:%d max_y:%d \n",
- __func__, n_finger, finger_state, x, y, z, w_max, w_min,sensor->max_x,sensor->max_y);
+ x = x * x_lcd / sensor->max_x;
+ x = check_scope_x(x);
+ y = y * y_lcd_all / sensor->max_y;
+ pr_debug("%s: f_state[%d]:%d - x:%d y:%d z:%d w_max:%d w_min:%d max_x:%d max_y:%d \n",
+ __func__, n_finger, finger_state, x, y, z, w_max, w_min,sensor->max_x,sensor->max_y);
#ifndef CONFIG_RMI4_F11_PEN
- /* Some UIs ignore W of zero, so we fudge it to 1 for pens. */
- if (sensor->sens_query.query9.has_pen &&
- get_tool_type(sensor, finger_state) == MT_TOOL_PEN) {
- w_max = max(1, w_max);
- w_min = max(1, w_min);
- }
+ /* Some UIs ignore W of zero, so we fudge it to 1 for pens. */
+ if (sensor->sens_query.query9.has_pen &&
+ get_tool_type(sensor, finger_state) == MT_TOOL_PEN) {
+ w_max = max(1, w_max);
+ w_min = max(1, w_min);
+ }
#endif
#ifdef ABS_MT_PRESSURE
- input_report_abs(sensor->input, ABS_MT_PRESSURE, z);
+ input_report_abs(sensor->input, ABS_MT_PRESSURE, z);
#endif
- input_report_abs(sensor->input, ABS_MT_TOUCH_MAJOR, w_max);
- input_report_abs(sensor->input, ABS_MT_TOUCH_MINOR, w_min);
- input_report_abs(sensor->input, ABS_MT_ORIENTATION, orient);
- input_report_abs(sensor->input, ABS_MT_POSITION_X, x);
- input_report_abs(sensor->input, ABS_MT_POSITION_Y, y);
- input_report_abs(sensor->input, ABS_MT_TRACKING_ID, n_finger);
+ input_report_abs(sensor->input, ABS_MT_TOUCH_MAJOR, w_max);
+ input_report_abs(sensor->input, ABS_MT_TOUCH_MINOR, w_min);
+ input_report_abs(sensor->input, ABS_MT_ORIENTATION, orient);
+ input_report_abs(sensor->input, ABS_MT_POSITION_X, x);
+ input_report_abs(sensor->input, ABS_MT_POSITION_Y, y);
+ input_report_abs(sensor->input, ABS_MT_TRACKING_ID, n_finger);
#ifdef CONFIG_RMI4_F11_PEN
- if (sensor->sens_query.query9.has_pen) {
- input_report_abs(sensor->input, ABS_MT_TOOL_TYPE,
- get_tool_type(sensor, finger_state));
- }
+ if (sensor->sens_query.query9.has_pen) {
+ input_report_abs(sensor->input, ABS_MT_TOOL_TYPE,
+ get_tool_type(sensor, finger_state));
+ }
#endif
+ }
/* MT sync between fingers */
input_mt_sync(sensor->input);
sensor->finger_tracker[n_finger] = finger_state;