Commit a7ac7c95 authored by Aleksei Mamlin's avatar Aleksei Mamlin Committed by Dmitry Torokhov

Input: goodix - use max touch number from device config

Use max number of touches from device config instead of hardcoding.
Signed-off-by: default avatarAleksei Mamlin <mamlinav@gmail.com>
Tested-by: default avatarBastien Nocera <hadess@hadess.net>
Acked-by: default avatarBastien Nocera <hadess@hadess.net>
Tested-by: default avatarAntonio Ospite <ao2@ao2.it>
Signed-off-by: default avatarDmitry Torokhov <dmitry.torokhov@gmail.com>
parent e92865ed
...@@ -48,6 +48,7 @@ struct goodix_ts_data { ...@@ -48,6 +48,7 @@ struct goodix_ts_data {
#define GOODIX_REG_VERSION 0x8140 #define GOODIX_REG_VERSION 0x8140
#define RESOLUTION_LOC 1 #define RESOLUTION_LOC 1
#define MAX_CONTACTS_LOC 5
#define TRIGGER_LOC 6 #define TRIGGER_LOC 6
static const unsigned long goodix_irq_flags[] = { static const unsigned long goodix_irq_flags[] = {
...@@ -99,7 +100,7 @@ static int goodix_ts_read_input_report(struct goodix_ts_data *ts, u8 *data) ...@@ -99,7 +100,7 @@ static int goodix_ts_read_input_report(struct goodix_ts_data *ts, u8 *data)
} }
touch_num = data[0] & 0x0f; touch_num = data[0] & 0x0f;
if (touch_num > GOODIX_MAX_CONTACTS) if (touch_num > ts->max_touch_num)
return -EPROTO; return -EPROTO;
if (touch_num > 1) { if (touch_num > 1) {
...@@ -141,7 +142,7 @@ static void goodix_ts_report_touch(struct goodix_ts_data *ts, u8 *coor_data) ...@@ -141,7 +142,7 @@ static void goodix_ts_report_touch(struct goodix_ts_data *ts, u8 *coor_data)
*/ */
static void goodix_process_events(struct goodix_ts_data *ts) static void goodix_process_events(struct goodix_ts_data *ts)
{ {
u8 point_data[1 + GOODIX_CONTACT_SIZE * GOODIX_MAX_CONTACTS]; u8 point_data[1 + GOODIX_CONTACT_SIZE * ts->max_touch_num];
int touch_num; int touch_num;
int i; int i;
...@@ -202,21 +203,23 @@ static void goodix_read_config(struct goodix_ts_data *ts) ...@@ -202,21 +203,23 @@ static void goodix_read_config(struct goodix_ts_data *ts)
ts->abs_x_max = GOODIX_MAX_WIDTH; ts->abs_x_max = GOODIX_MAX_WIDTH;
ts->abs_y_max = GOODIX_MAX_HEIGHT; ts->abs_y_max = GOODIX_MAX_HEIGHT;
ts->int_trigger_type = GOODIX_INT_TRIGGER; ts->int_trigger_type = GOODIX_INT_TRIGGER;
ts->max_touch_num = GOODIX_MAX_CONTACTS;
return; return;
} }
ts->abs_x_max = get_unaligned_le16(&config[RESOLUTION_LOC]); ts->abs_x_max = get_unaligned_le16(&config[RESOLUTION_LOC]);
ts->abs_y_max = get_unaligned_le16(&config[RESOLUTION_LOC + 2]); ts->abs_y_max = get_unaligned_le16(&config[RESOLUTION_LOC + 2]);
ts->int_trigger_type = (config[TRIGGER_LOC]) & 0x03; ts->int_trigger_type = config[TRIGGER_LOC] & 0x03;
if (!ts->abs_x_max || !ts->abs_y_max) { ts->max_touch_num = config[MAX_CONTACTS_LOC] & 0x0f;
if (!ts->abs_x_max || !ts->abs_y_max || !ts->max_touch_num) {
dev_err(&ts->client->dev, dev_err(&ts->client->dev,
"Invalid config, using defaults\n"); "Invalid config, using defaults\n");
ts->abs_x_max = GOODIX_MAX_WIDTH; ts->abs_x_max = GOODIX_MAX_WIDTH;
ts->abs_y_max = GOODIX_MAX_HEIGHT; ts->abs_y_max = GOODIX_MAX_HEIGHT;
ts->max_touch_num = GOODIX_MAX_CONTACTS;
} }
} }
/** /**
* goodix_read_version - Read goodix touchscreen version * goodix_read_version - Read goodix touchscreen version
* *
...@@ -295,7 +298,7 @@ static int goodix_request_input_dev(struct goodix_ts_data *ts) ...@@ -295,7 +298,7 @@ static int goodix_request_input_dev(struct goodix_ts_data *ts)
input_set_abs_params(ts->input_dev, ABS_MT_WIDTH_MAJOR, 0, 255, 0, 0); input_set_abs_params(ts->input_dev, ABS_MT_WIDTH_MAJOR, 0, 255, 0, 0);
input_set_abs_params(ts->input_dev, ABS_MT_TOUCH_MAJOR, 0, 255, 0, 0); input_set_abs_params(ts->input_dev, ABS_MT_TOUCH_MAJOR, 0, 255, 0, 0);
input_mt_init_slots(ts->input_dev, GOODIX_MAX_CONTACTS, input_mt_init_slots(ts->input_dev, ts->max_touch_num,
INPUT_MT_DIRECT | INPUT_MT_DROP_UNUSED); INPUT_MT_DIRECT | INPUT_MT_DROP_UNUSED);
ts->input_dev->name = "Goodix Capacitive TouchScreen"; ts->input_dev->name = "Goodix Capacitive TouchScreen";
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment