|
@@ -36,6 +36,7 @@ struct goodix_ts_data {
|
|
unsigned int max_touch_num;
|
|
unsigned int max_touch_num;
|
|
unsigned int int_trigger_type;
|
|
unsigned int int_trigger_type;
|
|
bool rotated_screen;
|
|
bool rotated_screen;
|
|
|
|
+ int cfg_len;
|
|
};
|
|
};
|
|
|
|
|
|
#define GOODIX_MAX_HEIGHT 4096
|
|
#define GOODIX_MAX_HEIGHT 4096
|
|
@@ -45,6 +46,8 @@ struct goodix_ts_data {
|
|
#define GOODIX_MAX_CONTACTS 10
|
|
#define GOODIX_MAX_CONTACTS 10
|
|
|
|
|
|
#define GOODIX_CONFIG_MAX_LENGTH 240
|
|
#define GOODIX_CONFIG_MAX_LENGTH 240
|
|
|
|
+#define GOODIX_CONFIG_911_LENGTH 186
|
|
|
|
+#define GOODIX_CONFIG_967_LENGTH 228
|
|
|
|
|
|
/* Register defines */
|
|
/* Register defines */
|
|
#define GOODIX_READ_COOR_ADDR 0x814E
|
|
#define GOODIX_READ_COOR_ADDR 0x814E
|
|
@@ -115,6 +118,25 @@ static int goodix_i2c_read(struct i2c_client *client,
|
|
return ret < 0 ? ret : (ret != ARRAY_SIZE(msgs) ? -EIO : 0);
|
|
return ret < 0 ? ret : (ret != ARRAY_SIZE(msgs) ? -EIO : 0);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+static int goodix_get_cfg_len(u16 id)
|
|
|
|
+{
|
|
|
|
+ switch (id) {
|
|
|
|
+ case 911:
|
|
|
|
+ case 9271:
|
|
|
|
+ case 9110:
|
|
|
|
+ case 927:
|
|
|
|
+ case 928:
|
|
|
|
+ return GOODIX_CONFIG_911_LENGTH;
|
|
|
|
+
|
|
|
|
+ case 912:
|
|
|
|
+ case 967:
|
|
|
|
+ return GOODIX_CONFIG_967_LENGTH;
|
|
|
|
+
|
|
|
|
+ default:
|
|
|
|
+ return GOODIX_CONFIG_MAX_LENGTH;
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
static int goodix_ts_read_input_report(struct goodix_ts_data *ts, u8 *data)
|
|
static int goodix_ts_read_input_report(struct goodix_ts_data *ts, u8 *data)
|
|
{
|
|
{
|
|
int touch_num;
|
|
int touch_num;
|
|
@@ -230,8 +252,7 @@ static void goodix_read_config(struct goodix_ts_data *ts)
|
|
int error;
|
|
int error;
|
|
|
|
|
|
error = goodix_i2c_read(ts->client, GOODIX_REG_CONFIG_DATA,
|
|
error = goodix_i2c_read(ts->client, GOODIX_REG_CONFIG_DATA,
|
|
- config,
|
|
|
|
- GOODIX_CONFIG_MAX_LENGTH);
|
|
|
|
|
|
+ config, ts->cfg_len);
|
|
if (error) {
|
|
if (error) {
|
|
dev_warn(&ts->client->dev,
|
|
dev_warn(&ts->client->dev,
|
|
"Error reading config (%d), using defaults\n",
|
|
"Error reading config (%d), using defaults\n",
|
|
@@ -398,6 +419,8 @@ static int goodix_ts_probe(struct i2c_client *client,
|
|
return error;
|
|
return error;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ ts->cfg_len = goodix_get_cfg_len(id_info);
|
|
|
|
+
|
|
goodix_read_config(ts);
|
|
goodix_read_config(ts);
|
|
|
|
|
|
error = goodix_request_input_dev(ts, version_info, id_info);
|
|
error = goodix_request_input_dev(ts, version_info, id_info);
|