From 19bdb8e2d1b5cf11f7b3838ba6bc38f3930e081c Mon Sep 17 00:00:00 2001 From: Mohan Pallaka Date: Fri, 14 Jun 2013 17:12:24 +0530 Subject: [PATCH] input: ft5x06_ts: Add support for protocol B Focaltech touchscreen chips can use MT protocol B because they can assign unique id to ABS_MT_TRACKING_ID from finger id provided by hardware. This patch is propagated from 3.18 kernel 'commit 836a4745d978 ("input: ft5x06_ts: Add support for protocol B")' Change-Id: I7f236d819eb805934e12faedaf84407b9de95c0e Signed-off-by: Mohan Pallaka Signed-off-by: Shantanu Jain --- drivers/input/touchscreen/ft5x06_ts.c | 31 ++++++++++++++++----------- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/drivers/input/touchscreen/ft5x06_ts.c b/drivers/input/touchscreen/ft5x06_ts.c index 2d8933c113a9..2ab6b7da26b1 100644 --- a/drivers/input/touchscreen/ft5x06_ts.c +++ b/drivers/input/touchscreen/ft5x06_ts.c @@ -18,6 +18,7 @@ #include #include +#include #include #include #include @@ -298,17 +299,22 @@ static void ft5x06_report_value(struct ft5x06_ts_data *data) event->pressure = 0; } - input_report_abs(data->input_dev, ABS_MT_POSITION_X, - event->x[i]); - input_report_abs(data->input_dev, ABS_MT_POSITION_Y, - event->y[i]); - input_report_abs(data->input_dev, ABS_MT_PRESSURE, - event->pressure); - input_report_abs(data->input_dev, ABS_MT_TRACKING_ID, - event->finger_id[i]); - input_report_abs(data->input_dev, ABS_MT_TOUCH_MAJOR, - event->pressure); - input_mt_sync(data->input_dev); + input_mt_slot(data->input_dev, i); + input_mt_report_slot_state(data->input_dev, MT_TOOL_FINGER, + !!event->pressure); + + if (event->pressure == FT_PRESS) { + input_report_abs(data->input_dev, ABS_MT_POSITION_X, + event->x[i]); + input_report_abs(data->input_dev, ABS_MT_POSITION_Y, + event->y[i]); + input_report_abs(data->input_dev, ABS_MT_PRESSURE, + event->pressure); + input_report_abs(data->input_dev, ABS_MT_TRACKING_ID, + event->finger_id[i]); + input_report_abs(data->input_dev, ABS_MT_TOUCH_MAJOR, + event->pressure); + } } input_report_key(data->input_dev, BTN_TOUCH, !!fingerdown); @@ -1187,12 +1193,11 @@ static int ft5x06_ts_probe(struct i2c_client *client, __set_bit(BTN_TOUCH, input_dev->keybit); __set_bit(INPUT_PROP_DIRECT, input_dev->propbit); + input_mt_init_slots(input_dev, CFG_MAX_TOUCH_POINTS); input_set_abs_params(input_dev, ABS_MT_POSITION_X, pdata->x_min, pdata->x_max, 0, 0); input_set_abs_params(input_dev, ABS_MT_POSITION_Y, pdata->y_min, pdata->y_max, 0, 0); - input_set_abs_params(input_dev, ABS_MT_TRACKING_ID, 0, - CFG_MAX_TOUCH_POINTS, 0, 0); input_set_abs_params(input_dev, ABS_MT_TOUCH_MAJOR, 0, FT_PRESS, 0, 0); input_set_abs_params(input_dev, ABS_MT_PRESSURE, 0, FT_PRESS, 0, 0);