cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

goodix.c (40597B)


      1// SPDX-License-Identifier: GPL-2.0-only
      2/*
      3 *  Driver for Goodix Touchscreens
      4 *
      5 *  Copyright (c) 2014 Red Hat Inc.
      6 *  Copyright (c) 2015 K. Merker <merker@debian.org>
      7 *
      8 *  This code is based on gt9xx.c authored by andrew@goodix.com:
      9 *
     10 *  2010 - 2012 Goodix Technology.
     11 */
     12
     13
     14#include <linux/kernel.h>
     15#include <linux/dmi.h>
     16#include <linux/firmware.h>
     17#include <linux/module.h>
     18#include <linux/delay.h>
     19#include <linux/irq.h>
     20#include <linux/interrupt.h>
     21#include <linux/platform_data/x86/soc.h>
     22#include <linux/slab.h>
     23#include <linux/acpi.h>
     24#include <linux/of.h>
     25#include <asm/unaligned.h>
     26#include "goodix.h"
     27
     28#define GOODIX_GPIO_INT_NAME		"irq"
     29#define GOODIX_GPIO_RST_NAME		"reset"
     30
     31#define GOODIX_MAX_HEIGHT		4096
     32#define GOODIX_MAX_WIDTH		4096
     33#define GOODIX_INT_TRIGGER		1
     34#define GOODIX_CONTACT_SIZE		8
     35#define GOODIX_MAX_CONTACT_SIZE		9
     36#define GOODIX_MAX_CONTACTS		10
     37
     38#define GOODIX_CONFIG_MIN_LENGTH	186
     39#define GOODIX_CONFIG_911_LENGTH	186
     40#define GOODIX_CONFIG_967_LENGTH	228
     41#define GOODIX_CONFIG_GT9X_LENGTH	240
     42
     43#define GOODIX_BUFFER_STATUS_READY	BIT(7)
     44#define GOODIX_HAVE_KEY			BIT(4)
     45#define GOODIX_BUFFER_STATUS_TIMEOUT	20
     46
     47#define RESOLUTION_LOC		1
     48#define MAX_CONTACTS_LOC	5
     49#define TRIGGER_LOC		6
     50
     51/* Our special handling for GPIO accesses through ACPI is x86 specific */
     52#if defined CONFIG_X86 && defined CONFIG_ACPI
     53#define ACPI_GPIO_SUPPORT
     54#endif
     55
     56struct goodix_chip_id {
     57	const char *id;
     58	const struct goodix_chip_data *data;
     59};
     60
     61static int goodix_check_cfg_8(struct goodix_ts_data *ts,
     62			      const u8 *cfg, int len);
     63static int goodix_check_cfg_16(struct goodix_ts_data *ts,
     64			       const u8 *cfg, int len);
     65static void goodix_calc_cfg_checksum_8(struct goodix_ts_data *ts);
     66static void goodix_calc_cfg_checksum_16(struct goodix_ts_data *ts);
     67
     68static const struct goodix_chip_data gt1x_chip_data = {
     69	.config_addr		= GOODIX_GT1X_REG_CONFIG_DATA,
     70	.config_len		= GOODIX_CONFIG_GT9X_LENGTH,
     71	.check_config		= goodix_check_cfg_16,
     72	.calc_config_checksum	= goodix_calc_cfg_checksum_16,
     73};
     74
     75static const struct goodix_chip_data gt911_chip_data = {
     76	.config_addr		= GOODIX_GT9X_REG_CONFIG_DATA,
     77	.config_len		= GOODIX_CONFIG_911_LENGTH,
     78	.check_config		= goodix_check_cfg_8,
     79	.calc_config_checksum	= goodix_calc_cfg_checksum_8,
     80};
     81
     82static const struct goodix_chip_data gt967_chip_data = {
     83	.config_addr		= GOODIX_GT9X_REG_CONFIG_DATA,
     84	.config_len		= GOODIX_CONFIG_967_LENGTH,
     85	.check_config		= goodix_check_cfg_8,
     86	.calc_config_checksum	= goodix_calc_cfg_checksum_8,
     87};
     88
     89static const struct goodix_chip_data gt9x_chip_data = {
     90	.config_addr		= GOODIX_GT9X_REG_CONFIG_DATA,
     91	.config_len		= GOODIX_CONFIG_GT9X_LENGTH,
     92	.check_config		= goodix_check_cfg_8,
     93	.calc_config_checksum	= goodix_calc_cfg_checksum_8,
     94};
     95
     96static const struct goodix_chip_id goodix_chip_ids[] = {
     97	{ .id = "1151", .data = &gt1x_chip_data },
     98	{ .id = "5663", .data = &gt1x_chip_data },
     99	{ .id = "5688", .data = &gt1x_chip_data },
    100	{ .id = "917S", .data = &gt1x_chip_data },
    101	{ .id = "9286", .data = &gt1x_chip_data },
    102
    103	{ .id = "911", .data = &gt911_chip_data },
    104	{ .id = "9271", .data = &gt911_chip_data },
    105	{ .id = "9110", .data = &gt911_chip_data },
    106	{ .id = "9111", .data = &gt911_chip_data },
    107	{ .id = "927", .data = &gt911_chip_data },
    108	{ .id = "928", .data = &gt911_chip_data },
    109
    110	{ .id = "912", .data = &gt967_chip_data },
    111	{ .id = "9147", .data = &gt967_chip_data },
    112	{ .id = "967", .data = &gt967_chip_data },
    113	{ }
    114};
    115
    116static const unsigned long goodix_irq_flags[] = {
    117	IRQ_TYPE_EDGE_RISING,
    118	IRQ_TYPE_EDGE_FALLING,
    119	IRQ_TYPE_LEVEL_LOW,
    120	IRQ_TYPE_LEVEL_HIGH,
    121};
    122
    123static const struct dmi_system_id nine_bytes_report[] = {
    124#if defined(CONFIG_DMI) && defined(CONFIG_X86)
    125	{
    126		.ident = "Lenovo YogaBook",
    127		/* YB1-X91L/F and YB1-X90L/F */
    128		.matches = {
    129			DMI_MATCH(DMI_PRODUCT_NAME, "Lenovo YB1-X9")
    130		}
    131	},
    132#endif
    133	{}
    134};
    135
    136/*
    137 * Those tablets have their x coordinate inverted
    138 */
    139static const struct dmi_system_id inverted_x_screen[] = {
    140#if defined(CONFIG_DMI) && defined(CONFIG_X86)
    141	{
    142		.ident = "Cube I15-TC",
    143		.matches = {
    144			DMI_MATCH(DMI_SYS_VENDOR, "Cube"),
    145			DMI_MATCH(DMI_PRODUCT_NAME, "I15-TC")
    146		},
    147	},
    148#endif
    149	{}
    150};
    151
    152/**
    153 * goodix_i2c_read - read data from a register of the i2c slave device.
    154 *
    155 * @client: i2c device.
    156 * @reg: the register to read from.
    157 * @buf: raw write data buffer.
    158 * @len: length of the buffer to write
    159 */
    160int goodix_i2c_read(struct i2c_client *client, u16 reg, u8 *buf, int len)
    161{
    162	struct i2c_msg msgs[2];
    163	__be16 wbuf = cpu_to_be16(reg);
    164	int ret;
    165
    166	msgs[0].flags = 0;
    167	msgs[0].addr  = client->addr;
    168	msgs[0].len   = 2;
    169	msgs[0].buf   = (u8 *)&wbuf;
    170
    171	msgs[1].flags = I2C_M_RD;
    172	msgs[1].addr  = client->addr;
    173	msgs[1].len   = len;
    174	msgs[1].buf   = buf;
    175
    176	ret = i2c_transfer(client->adapter, msgs, 2);
    177	if (ret >= 0)
    178		ret = (ret == ARRAY_SIZE(msgs) ? 0 : -EIO);
    179
    180	if (ret)
    181		dev_err(&client->dev, "Error reading %d bytes from 0x%04x: %d\n",
    182			len, reg, ret);
    183	return ret;
    184}
    185
    186/**
    187 * goodix_i2c_write - write data to a register of the i2c slave device.
    188 *
    189 * @client: i2c device.
    190 * @reg: the register to write to.
    191 * @buf: raw data buffer to write.
    192 * @len: length of the buffer to write
    193 */
    194int goodix_i2c_write(struct i2c_client *client, u16 reg, const u8 *buf, int len)
    195{
    196	u8 *addr_buf;
    197	struct i2c_msg msg;
    198	int ret;
    199
    200	addr_buf = kmalloc(len + 2, GFP_KERNEL);
    201	if (!addr_buf)
    202		return -ENOMEM;
    203
    204	addr_buf[0] = reg >> 8;
    205	addr_buf[1] = reg & 0xFF;
    206	memcpy(&addr_buf[2], buf, len);
    207
    208	msg.flags = 0;
    209	msg.addr = client->addr;
    210	msg.buf = addr_buf;
    211	msg.len = len + 2;
    212
    213	ret = i2c_transfer(client->adapter, &msg, 1);
    214	if (ret >= 0)
    215		ret = (ret == 1 ? 0 : -EIO);
    216
    217	kfree(addr_buf);
    218
    219	if (ret)
    220		dev_err(&client->dev, "Error writing %d bytes to 0x%04x: %d\n",
    221			len, reg, ret);
    222	return ret;
    223}
    224
    225int goodix_i2c_write_u8(struct i2c_client *client, u16 reg, u8 value)
    226{
    227	return goodix_i2c_write(client, reg, &value, sizeof(value));
    228}
    229
    230static const struct goodix_chip_data *goodix_get_chip_data(const char *id)
    231{
    232	unsigned int i;
    233
    234	for (i = 0; goodix_chip_ids[i].id; i++) {
    235		if (!strcmp(goodix_chip_ids[i].id, id))
    236			return goodix_chip_ids[i].data;
    237	}
    238
    239	return &gt9x_chip_data;
    240}
    241
    242static int goodix_ts_read_input_report(struct goodix_ts_data *ts, u8 *data)
    243{
    244	unsigned long max_timeout;
    245	int touch_num;
    246	int error;
    247	u16 addr = GOODIX_READ_COOR_ADDR;
    248	/*
    249	 * We are going to read 1-byte header,
    250	 * ts->contact_size * max(1, touch_num) bytes of coordinates
    251	 * and 1-byte footer which contains the touch-key code.
    252	 */
    253	const int header_contact_keycode_size = 1 + ts->contact_size + 1;
    254
    255	/*
    256	 * The 'buffer status' bit, which indicates that the data is valid, is
    257	 * not set as soon as the interrupt is raised, but slightly after.
    258	 * This takes around 10 ms to happen, so we poll for 20 ms.
    259	 */
    260	max_timeout = jiffies + msecs_to_jiffies(GOODIX_BUFFER_STATUS_TIMEOUT);
    261	do {
    262		error = goodix_i2c_read(ts->client, addr, data,
    263					header_contact_keycode_size);
    264		if (error)
    265			return error;
    266
    267		if (data[0] & GOODIX_BUFFER_STATUS_READY) {
    268			touch_num = data[0] & 0x0f;
    269			if (touch_num > ts->max_touch_num)
    270				return -EPROTO;
    271
    272			if (touch_num > 1) {
    273				addr += header_contact_keycode_size;
    274				data += header_contact_keycode_size;
    275				error = goodix_i2c_read(ts->client,
    276						addr, data,
    277						ts->contact_size *
    278							(touch_num - 1));
    279				if (error)
    280					return error;
    281			}
    282
    283			return touch_num;
    284		}
    285
    286		if (data[0] == 0 && ts->firmware_name) {
    287			if (goodix_handle_fw_request(ts))
    288				return 0;
    289		}
    290
    291		usleep_range(1000, 2000); /* Poll every 1 - 2 ms */
    292	} while (time_before(jiffies, max_timeout));
    293
    294	/*
    295	 * The Goodix panel will send spurious interrupts after a
    296	 * 'finger up' event, which will always cause a timeout.
    297	 */
    298	return -ENOMSG;
    299}
    300
    301static int goodix_create_pen_input(struct goodix_ts_data *ts)
    302{
    303	struct device *dev = &ts->client->dev;
    304	struct input_dev *input;
    305
    306	input = devm_input_allocate_device(dev);
    307	if (!input)
    308		return -ENOMEM;
    309
    310	input_copy_abs(input, ABS_X, ts->input_dev, ABS_MT_POSITION_X);
    311	input_copy_abs(input, ABS_Y, ts->input_dev, ABS_MT_POSITION_Y);
    312	/*
    313	 * The resolution of these touchscreens is about 10 units/mm, the actual
    314	 * resolution does not matter much since we set INPUT_PROP_DIRECT.
    315	 * Userspace wants something here though, so just set it to 10 units/mm.
    316	 */
    317	input_abs_set_res(input, ABS_X, 10);
    318	input_abs_set_res(input, ABS_Y, 10);
    319	input_set_abs_params(input, ABS_PRESSURE, 0, 255, 0, 0);
    320
    321	input_set_capability(input, EV_KEY, BTN_TOUCH);
    322	input_set_capability(input, EV_KEY, BTN_TOOL_PEN);
    323	input_set_capability(input, EV_KEY, BTN_STYLUS);
    324	input_set_capability(input, EV_KEY, BTN_STYLUS2);
    325	__set_bit(INPUT_PROP_DIRECT, input->propbit);
    326
    327	input->name = "Goodix Active Pen";
    328	input->phys = "input/pen";
    329	input->id.bustype = BUS_I2C;
    330	input->id.vendor = 0x0416;
    331	if (kstrtou16(ts->id, 10, &input->id.product))
    332		input->id.product = 0x1001;
    333	input->id.version = ts->version;
    334
    335	ts->input_pen = input;
    336	return 0;
    337}
    338
    339static void goodix_ts_report_pen_down(struct goodix_ts_data *ts, u8 *data)
    340{
    341	int input_x, input_y, input_w, error;
    342	u8 key_value;
    343
    344	if (!ts->pen_input_registered) {
    345		error = input_register_device(ts->input_pen);
    346		ts->pen_input_registered = (error == 0) ? 1 : error;
    347	}
    348
    349	if (ts->pen_input_registered < 0)
    350		return;
    351
    352	if (ts->contact_size == 9) {
    353		input_x = get_unaligned_le16(&data[4]);
    354		input_y = get_unaligned_le16(&data[6]);
    355		input_w = get_unaligned_le16(&data[8]);
    356	} else {
    357		input_x = get_unaligned_le16(&data[2]);
    358		input_y = get_unaligned_le16(&data[4]);
    359		input_w = get_unaligned_le16(&data[6]);
    360	}
    361
    362	touchscreen_report_pos(ts->input_pen, &ts->prop, input_x, input_y, false);
    363	input_report_abs(ts->input_pen, ABS_PRESSURE, input_w);
    364
    365	input_report_key(ts->input_pen, BTN_TOUCH, 1);
    366	input_report_key(ts->input_pen, BTN_TOOL_PEN, 1);
    367
    368	if (data[0] & GOODIX_HAVE_KEY) {
    369		key_value = data[1 + ts->contact_size];
    370		input_report_key(ts->input_pen, BTN_STYLUS, key_value & 0x10);
    371		input_report_key(ts->input_pen, BTN_STYLUS2, key_value & 0x20);
    372	} else {
    373		input_report_key(ts->input_pen, BTN_STYLUS, 0);
    374		input_report_key(ts->input_pen, BTN_STYLUS2, 0);
    375	}
    376
    377	input_sync(ts->input_pen);
    378}
    379
    380static void goodix_ts_report_pen_up(struct goodix_ts_data *ts)
    381{
    382	if (!ts->input_pen)
    383		return;
    384
    385	input_report_key(ts->input_pen, BTN_TOUCH, 0);
    386	input_report_key(ts->input_pen, BTN_TOOL_PEN, 0);
    387	input_report_key(ts->input_pen, BTN_STYLUS, 0);
    388	input_report_key(ts->input_pen, BTN_STYLUS2, 0);
    389
    390	input_sync(ts->input_pen);
    391}
    392
    393static void goodix_ts_report_touch_8b(struct goodix_ts_data *ts, u8 *coor_data)
    394{
    395	int id = coor_data[0] & 0x0F;
    396	int input_x = get_unaligned_le16(&coor_data[1]);
    397	int input_y = get_unaligned_le16(&coor_data[3]);
    398	int input_w = get_unaligned_le16(&coor_data[5]);
    399
    400	input_mt_slot(ts->input_dev, id);
    401	input_mt_report_slot_state(ts->input_dev, MT_TOOL_FINGER, true);
    402	touchscreen_report_pos(ts->input_dev, &ts->prop,
    403			       input_x, input_y, true);
    404	input_report_abs(ts->input_dev, ABS_MT_TOUCH_MAJOR, input_w);
    405	input_report_abs(ts->input_dev, ABS_MT_WIDTH_MAJOR, input_w);
    406}
    407
    408static void goodix_ts_report_touch_9b(struct goodix_ts_data *ts, u8 *coor_data)
    409{
    410	int id = coor_data[1] & 0x0F;
    411	int input_x = get_unaligned_le16(&coor_data[3]);
    412	int input_y = get_unaligned_le16(&coor_data[5]);
    413	int input_w = get_unaligned_le16(&coor_data[7]);
    414
    415	input_mt_slot(ts->input_dev, id);
    416	input_mt_report_slot_state(ts->input_dev, MT_TOOL_FINGER, true);
    417	touchscreen_report_pos(ts->input_dev, &ts->prop,
    418			       input_x, input_y, true);
    419	input_report_abs(ts->input_dev, ABS_MT_TOUCH_MAJOR, input_w);
    420	input_report_abs(ts->input_dev, ABS_MT_WIDTH_MAJOR, input_w);
    421}
    422
    423static void goodix_ts_release_keys(struct goodix_ts_data *ts)
    424{
    425	int i;
    426
    427	for (i = 0; i < GOODIX_MAX_KEYS; i++)
    428		input_report_key(ts->input_dev, ts->keymap[i], 0);
    429}
    430
    431static void goodix_ts_report_key(struct goodix_ts_data *ts, u8 *data)
    432{
    433	int touch_num;
    434	u8 key_value;
    435	int i;
    436
    437	if (data[0] & GOODIX_HAVE_KEY) {
    438		touch_num = data[0] & 0x0f;
    439		key_value = data[1 + ts->contact_size * touch_num];
    440		for (i = 0; i < GOODIX_MAX_KEYS; i++)
    441			if (key_value & BIT(i))
    442				input_report_key(ts->input_dev,
    443						 ts->keymap[i], 1);
    444	} else {
    445		goodix_ts_release_keys(ts);
    446	}
    447}
    448
    449/**
    450 * goodix_process_events - Process incoming events
    451 *
    452 * @ts: our goodix_ts_data pointer
    453 *
    454 * Called when the IRQ is triggered. Read the current device state, and push
    455 * the input events to the user space.
    456 */
    457static void goodix_process_events(struct goodix_ts_data *ts)
    458{
    459	u8  point_data[2 + GOODIX_MAX_CONTACT_SIZE * GOODIX_MAX_CONTACTS];
    460	int touch_num;
    461	int i;
    462
    463	touch_num = goodix_ts_read_input_report(ts, point_data);
    464	if (touch_num < 0)
    465		return;
    466
    467	/* The pen being down is always reported as a single touch */
    468	if (touch_num == 1 && (point_data[1] & 0x80)) {
    469		goodix_ts_report_pen_down(ts, point_data);
    470		goodix_ts_release_keys(ts);
    471		goto sync; /* Release any previously registered touches */
    472	} else {
    473		goodix_ts_report_pen_up(ts);
    474	}
    475
    476	goodix_ts_report_key(ts, point_data);
    477
    478	for (i = 0; i < touch_num; i++)
    479		if (ts->contact_size == 9)
    480			goodix_ts_report_touch_9b(ts,
    481				&point_data[1 + ts->contact_size * i]);
    482		else
    483			goodix_ts_report_touch_8b(ts,
    484				&point_data[1 + ts->contact_size * i]);
    485
    486sync:
    487	input_mt_sync_frame(ts->input_dev);
    488	input_sync(ts->input_dev);
    489}
    490
    491/**
    492 * goodix_ts_irq_handler - The IRQ handler
    493 *
    494 * @irq: interrupt number.
    495 * @dev_id: private data pointer.
    496 */
    497static irqreturn_t goodix_ts_irq_handler(int irq, void *dev_id)
    498{
    499	struct goodix_ts_data *ts = dev_id;
    500
    501	goodix_process_events(ts);
    502	goodix_i2c_write_u8(ts->client, GOODIX_READ_COOR_ADDR, 0);
    503
    504	return IRQ_HANDLED;
    505}
    506
    507static void goodix_free_irq(struct goodix_ts_data *ts)
    508{
    509	devm_free_irq(&ts->client->dev, ts->client->irq, ts);
    510}
    511
    512static int goodix_request_irq(struct goodix_ts_data *ts)
    513{
    514	return devm_request_threaded_irq(&ts->client->dev, ts->client->irq,
    515					 NULL, goodix_ts_irq_handler,
    516					 ts->irq_flags, ts->client->name, ts);
    517}
    518
    519static int goodix_check_cfg_8(struct goodix_ts_data *ts, const u8 *cfg, int len)
    520{
    521	int i, raw_cfg_len = len - 2;
    522	u8 check_sum = 0;
    523
    524	for (i = 0; i < raw_cfg_len; i++)
    525		check_sum += cfg[i];
    526	check_sum = (~check_sum) + 1;
    527	if (check_sum != cfg[raw_cfg_len]) {
    528		dev_err(&ts->client->dev,
    529			"The checksum of the config fw is not correct");
    530		return -EINVAL;
    531	}
    532
    533	if (cfg[raw_cfg_len + 1] != 1) {
    534		dev_err(&ts->client->dev,
    535			"Config fw must have Config_Fresh register set");
    536		return -EINVAL;
    537	}
    538
    539	return 0;
    540}
    541
    542static void goodix_calc_cfg_checksum_8(struct goodix_ts_data *ts)
    543{
    544	int i, raw_cfg_len = ts->chip->config_len - 2;
    545	u8 check_sum = 0;
    546
    547	for (i = 0; i < raw_cfg_len; i++)
    548		check_sum += ts->config[i];
    549	check_sum = (~check_sum) + 1;
    550
    551	ts->config[raw_cfg_len] = check_sum;
    552	ts->config[raw_cfg_len + 1] = 1; /* Set "config_fresh" bit */
    553}
    554
    555static int goodix_check_cfg_16(struct goodix_ts_data *ts, const u8 *cfg,
    556			       int len)
    557{
    558	int i, raw_cfg_len = len - 3;
    559	u16 check_sum = 0;
    560
    561	for (i = 0; i < raw_cfg_len; i += 2)
    562		check_sum += get_unaligned_be16(&cfg[i]);
    563	check_sum = (~check_sum) + 1;
    564	if (check_sum != get_unaligned_be16(&cfg[raw_cfg_len])) {
    565		dev_err(&ts->client->dev,
    566			"The checksum of the config fw is not correct");
    567		return -EINVAL;
    568	}
    569
    570	if (cfg[raw_cfg_len + 2] != 1) {
    571		dev_err(&ts->client->dev,
    572			"Config fw must have Config_Fresh register set");
    573		return -EINVAL;
    574	}
    575
    576	return 0;
    577}
    578
    579static void goodix_calc_cfg_checksum_16(struct goodix_ts_data *ts)
    580{
    581	int i, raw_cfg_len = ts->chip->config_len - 3;
    582	u16 check_sum = 0;
    583
    584	for (i = 0; i < raw_cfg_len; i += 2)
    585		check_sum += get_unaligned_be16(&ts->config[i]);
    586	check_sum = (~check_sum) + 1;
    587
    588	put_unaligned_be16(check_sum, &ts->config[raw_cfg_len]);
    589	ts->config[raw_cfg_len + 2] = 1; /* Set "config_fresh" bit */
    590}
    591
    592/**
    593 * goodix_check_cfg - Checks if config fw is valid
    594 *
    595 * @ts: goodix_ts_data pointer
    596 * @cfg: firmware config data
    597 * @len: config data length
    598 */
    599static int goodix_check_cfg(struct goodix_ts_data *ts, const u8 *cfg, int len)
    600{
    601	if (len < GOODIX_CONFIG_MIN_LENGTH ||
    602	    len > GOODIX_CONFIG_MAX_LENGTH) {
    603		dev_err(&ts->client->dev,
    604			"The length of the config fw is not correct");
    605		return -EINVAL;
    606	}
    607
    608	return ts->chip->check_config(ts, cfg, len);
    609}
    610
    611/**
    612 * goodix_send_cfg - Write fw config to device
    613 *
    614 * @ts: goodix_ts_data pointer
    615 * @cfg: config firmware to write to device
    616 * @len: config data length
    617 */
    618int goodix_send_cfg(struct goodix_ts_data *ts, const u8 *cfg, int len)
    619{
    620	int error;
    621
    622	error = goodix_check_cfg(ts, cfg, len);
    623	if (error)
    624		return error;
    625
    626	error = goodix_i2c_write(ts->client, ts->chip->config_addr, cfg, len);
    627	if (error)
    628		return error;
    629
    630	dev_dbg(&ts->client->dev, "Config sent successfully.");
    631
    632	/* Let the firmware reconfigure itself, so sleep for 10ms */
    633	usleep_range(10000, 11000);
    634
    635	return 0;
    636}
    637
    638#ifdef ACPI_GPIO_SUPPORT
    639static int goodix_pin_acpi_direction_input(struct goodix_ts_data *ts)
    640{
    641	acpi_handle handle = ACPI_HANDLE(&ts->client->dev);
    642	acpi_status status;
    643
    644	status = acpi_evaluate_object(handle, "INTI", NULL, NULL);
    645	return ACPI_SUCCESS(status) ? 0 : -EIO;
    646}
    647
    648static int goodix_pin_acpi_output_method(struct goodix_ts_data *ts, int value)
    649{
    650	acpi_handle handle = ACPI_HANDLE(&ts->client->dev);
    651	acpi_status status;
    652
    653	status = acpi_execute_simple_method(handle, "INTO", value);
    654	return ACPI_SUCCESS(status) ? 0 : -EIO;
    655}
    656#else
    657static int goodix_pin_acpi_direction_input(struct goodix_ts_data *ts)
    658{
    659	dev_err(&ts->client->dev,
    660		"%s called on device without ACPI support\n", __func__);
    661	return -EINVAL;
    662}
    663
    664static int goodix_pin_acpi_output_method(struct goodix_ts_data *ts, int value)
    665{
    666	dev_err(&ts->client->dev,
    667		"%s called on device without ACPI support\n", __func__);
    668	return -EINVAL;
    669}
    670#endif
    671
    672static int goodix_irq_direction_output(struct goodix_ts_data *ts, int value)
    673{
    674	switch (ts->irq_pin_access_method) {
    675	case IRQ_PIN_ACCESS_NONE:
    676		dev_err(&ts->client->dev,
    677			"%s called without an irq_pin_access_method set\n",
    678			__func__);
    679		return -EINVAL;
    680	case IRQ_PIN_ACCESS_GPIO:
    681		return gpiod_direction_output(ts->gpiod_int, value);
    682	case IRQ_PIN_ACCESS_ACPI_GPIO:
    683		/*
    684		 * The IRQ pin triggers on a falling edge, so its gets marked
    685		 * as active-low, use output_raw to avoid the value inversion.
    686		 */
    687		return gpiod_direction_output_raw(ts->gpiod_int, value);
    688	case IRQ_PIN_ACCESS_ACPI_METHOD:
    689		return goodix_pin_acpi_output_method(ts, value);
    690	}
    691
    692	return -EINVAL; /* Never reached */
    693}
    694
    695static int goodix_irq_direction_input(struct goodix_ts_data *ts)
    696{
    697	switch (ts->irq_pin_access_method) {
    698	case IRQ_PIN_ACCESS_NONE:
    699		dev_err(&ts->client->dev,
    700			"%s called without an irq_pin_access_method set\n",
    701			__func__);
    702		return -EINVAL;
    703	case IRQ_PIN_ACCESS_GPIO:
    704		return gpiod_direction_input(ts->gpiod_int);
    705	case IRQ_PIN_ACCESS_ACPI_GPIO:
    706		return gpiod_direction_input(ts->gpiod_int);
    707	case IRQ_PIN_ACCESS_ACPI_METHOD:
    708		return goodix_pin_acpi_direction_input(ts);
    709	}
    710
    711	return -EINVAL; /* Never reached */
    712}
    713
    714int goodix_int_sync(struct goodix_ts_data *ts)
    715{
    716	int error;
    717
    718	error = goodix_irq_direction_output(ts, 0);
    719	if (error)
    720		goto error;
    721
    722	msleep(50);				/* T5: 50ms */
    723
    724	error = goodix_irq_direction_input(ts);
    725	if (error)
    726		goto error;
    727
    728	return 0;
    729
    730error:
    731	dev_err(&ts->client->dev, "Controller irq sync failed.\n");
    732	return error;
    733}
    734
    735/**
    736 * goodix_reset_no_int_sync - Reset device, leaving interrupt line in output mode
    737 *
    738 * @ts: goodix_ts_data pointer
    739 */
    740int goodix_reset_no_int_sync(struct goodix_ts_data *ts)
    741{
    742	int error;
    743
    744	/* begin select I2C slave addr */
    745	error = gpiod_direction_output(ts->gpiod_rst, 0);
    746	if (error)
    747		goto error;
    748
    749	msleep(20);				/* T2: > 10ms */
    750
    751	/* HIGH: 0x28/0x29, LOW: 0xBA/0xBB */
    752	error = goodix_irq_direction_output(ts, ts->client->addr == 0x14);
    753	if (error)
    754		goto error;
    755
    756	usleep_range(100, 2000);		/* T3: > 100us */
    757
    758	error = gpiod_direction_output(ts->gpiod_rst, 1);
    759	if (error)
    760		goto error;
    761
    762	usleep_range(6000, 10000);		/* T4: > 5ms */
    763
    764	/*
    765	 * Put the reset pin back in to input / high-impedance mode to save
    766	 * power. Only do this in the non ACPI case since some ACPI boards
    767	 * don't have a pull-up, so there the reset pin must stay active-high.
    768	 */
    769	if (ts->irq_pin_access_method == IRQ_PIN_ACCESS_GPIO) {
    770		error = gpiod_direction_input(ts->gpiod_rst);
    771		if (error)
    772			goto error;
    773	}
    774
    775	return 0;
    776
    777error:
    778	dev_err(&ts->client->dev, "Controller reset failed.\n");
    779	return error;
    780}
    781
    782/**
    783 * goodix_reset - Reset device during power on
    784 *
    785 * @ts: goodix_ts_data pointer
    786 */
    787static int goodix_reset(struct goodix_ts_data *ts)
    788{
    789	int error;
    790
    791	error = goodix_reset_no_int_sync(ts);
    792	if (error)
    793		return error;
    794
    795	return goodix_int_sync(ts);
    796}
    797
    798#ifdef ACPI_GPIO_SUPPORT
    799static const struct acpi_gpio_params first_gpio = { 0, 0, false };
    800static const struct acpi_gpio_params second_gpio = { 1, 0, false };
    801
    802static const struct acpi_gpio_mapping acpi_goodix_int_first_gpios[] = {
    803	{ GOODIX_GPIO_INT_NAME "-gpios", &first_gpio, 1 },
    804	{ GOODIX_GPIO_RST_NAME "-gpios", &second_gpio, 1 },
    805	{ },
    806};
    807
    808static const struct acpi_gpio_mapping acpi_goodix_int_last_gpios[] = {
    809	{ GOODIX_GPIO_RST_NAME "-gpios", &first_gpio, 1 },
    810	{ GOODIX_GPIO_INT_NAME "-gpios", &second_gpio, 1 },
    811	{ },
    812};
    813
    814static const struct acpi_gpio_mapping acpi_goodix_reset_only_gpios[] = {
    815	{ GOODIX_GPIO_RST_NAME "-gpios", &first_gpio, 1 },
    816	{ },
    817};
    818
    819static int goodix_resource(struct acpi_resource *ares, void *data)
    820{
    821	struct goodix_ts_data *ts = data;
    822	struct device *dev = &ts->client->dev;
    823	struct acpi_resource_gpio *gpio;
    824
    825	switch (ares->type) {
    826	case ACPI_RESOURCE_TYPE_GPIO:
    827		gpio = &ares->data.gpio;
    828		if (gpio->connection_type == ACPI_RESOURCE_GPIO_TYPE_INT) {
    829			if (ts->gpio_int_idx == -1) {
    830				ts->gpio_int_idx = ts->gpio_count;
    831			} else {
    832				dev_err(dev, "More then one GpioInt resource, ignoring ACPI GPIO resources\n");
    833				ts->gpio_int_idx = -2;
    834			}
    835		}
    836		ts->gpio_count++;
    837		break;
    838	default:
    839		break;
    840	}
    841
    842	return 0;
    843}
    844
    845/*
    846 * This function gets called in case we fail to get the irq GPIO directly
    847 * because the ACPI tables lack GPIO-name to APCI _CRS index mappings
    848 * (no _DSD UUID daffd814-6eba-4d8c-8a91-bc9bbf4aa301 data).
    849 * In that case we add our own mapping and then goodix_get_gpio_config()
    850 * retries to get the GPIOs based on the added mapping.
    851 */
    852static int goodix_add_acpi_gpio_mappings(struct goodix_ts_data *ts)
    853{
    854	const struct acpi_gpio_mapping *gpio_mapping = NULL;
    855	struct device *dev = &ts->client->dev;
    856	LIST_HEAD(resources);
    857	int irq, ret;
    858
    859	ts->gpio_count = 0;
    860	ts->gpio_int_idx = -1;
    861	ret = acpi_dev_get_resources(ACPI_COMPANION(dev), &resources,
    862				     goodix_resource, ts);
    863	if (ret < 0) {
    864		dev_err(dev, "Error getting ACPI resources: %d\n", ret);
    865		return ret;
    866	}
    867
    868	acpi_dev_free_resource_list(&resources);
    869
    870	/*
    871	 * CHT devices should have a GpioInt + a regular GPIO ACPI resource.
    872	 * Some CHT devices have a bug (where the also is bogus Interrupt
    873	 * resource copied from a previous BYT based generation). i2c-core-acpi
    874	 * will use the non-working Interrupt resource, fix this up.
    875	 */
    876	if (soc_intel_is_cht() && ts->gpio_count == 2 && ts->gpio_int_idx != -1) {
    877		irq = acpi_dev_gpio_irq_get(ACPI_COMPANION(dev), 0);
    878		if (irq > 0 && irq != ts->client->irq) {
    879			dev_warn(dev, "Overriding IRQ %d -> %d\n", ts->client->irq, irq);
    880			ts->client->irq = irq;
    881		}
    882	}
    883
    884	if (ts->gpio_count == 2 && ts->gpio_int_idx == 0) {
    885		ts->irq_pin_access_method = IRQ_PIN_ACCESS_ACPI_GPIO;
    886		gpio_mapping = acpi_goodix_int_first_gpios;
    887	} else if (ts->gpio_count == 2 && ts->gpio_int_idx == 1) {
    888		ts->irq_pin_access_method = IRQ_PIN_ACCESS_ACPI_GPIO;
    889		gpio_mapping = acpi_goodix_int_last_gpios;
    890	} else if (ts->gpio_count == 1 && ts->gpio_int_idx == -1 &&
    891		   acpi_has_method(ACPI_HANDLE(dev), "INTI") &&
    892		   acpi_has_method(ACPI_HANDLE(dev), "INTO")) {
    893		dev_info(dev, "Using ACPI INTI and INTO methods for IRQ pin access\n");
    894		ts->irq_pin_access_method = IRQ_PIN_ACCESS_ACPI_METHOD;
    895		gpio_mapping = acpi_goodix_reset_only_gpios;
    896	} else if (soc_intel_is_byt() && ts->gpio_count == 2 && ts->gpio_int_idx == -1) {
    897		dev_info(dev, "No ACPI GpioInt resource, assuming that the GPIO order is reset, int\n");
    898		ts->irq_pin_access_method = IRQ_PIN_ACCESS_ACPI_GPIO;
    899		gpio_mapping = acpi_goodix_int_last_gpios;
    900	} else {
    901		dev_warn(dev, "Unexpected ACPI resources: gpio_count %d, gpio_int_idx %d\n",
    902			 ts->gpio_count, ts->gpio_int_idx);
    903		return -EINVAL;
    904	}
    905
    906	/*
    907	 * Normally we put the reset pin in input / high-impedance mode to save
    908	 * power. But some x86/ACPI boards don't have a pull-up, so for the ACPI
    909	 * case, leave the pin as is. This results in the pin not being touched
    910	 * at all on x86/ACPI boards, except when needed for error-recover.
    911	 */
    912	ts->gpiod_rst_flags = GPIOD_ASIS;
    913
    914	return devm_acpi_dev_add_driver_gpios(dev, gpio_mapping);
    915}
    916#else
    917static int goodix_add_acpi_gpio_mappings(struct goodix_ts_data *ts)
    918{
    919	return -EINVAL;
    920}
    921#endif /* CONFIG_X86 && CONFIG_ACPI */
    922
    923/**
    924 * goodix_get_gpio_config - Get GPIO config from ACPI/DT
    925 *
    926 * @ts: goodix_ts_data pointer
    927 */
    928static int goodix_get_gpio_config(struct goodix_ts_data *ts)
    929{
    930	int error;
    931	struct device *dev;
    932	struct gpio_desc *gpiod;
    933	bool added_acpi_mappings = false;
    934
    935	if (!ts->client)
    936		return -EINVAL;
    937	dev = &ts->client->dev;
    938
    939	/*
    940	 * By default we request the reset pin as input, leaving it in
    941	 * high-impedance when not resetting the controller to save power.
    942	 */
    943	ts->gpiod_rst_flags = GPIOD_IN;
    944
    945	ts->avdd28 = devm_regulator_get(dev, "AVDD28");
    946	if (IS_ERR(ts->avdd28)) {
    947		error = PTR_ERR(ts->avdd28);
    948		if (error != -EPROBE_DEFER)
    949			dev_err(dev,
    950				"Failed to get AVDD28 regulator: %d\n", error);
    951		return error;
    952	}
    953
    954	ts->vddio = devm_regulator_get(dev, "VDDIO");
    955	if (IS_ERR(ts->vddio)) {
    956		error = PTR_ERR(ts->vddio);
    957		if (error != -EPROBE_DEFER)
    958			dev_err(dev,
    959				"Failed to get VDDIO regulator: %d\n", error);
    960		return error;
    961	}
    962
    963retry_get_irq_gpio:
    964	/* Get the interrupt GPIO pin number */
    965	gpiod = devm_gpiod_get_optional(dev, GOODIX_GPIO_INT_NAME, GPIOD_IN);
    966	if (IS_ERR(gpiod)) {
    967		error = PTR_ERR(gpiod);
    968		if (error != -EPROBE_DEFER)
    969			dev_err(dev, "Failed to get %s GPIO: %d\n",
    970				GOODIX_GPIO_INT_NAME, error);
    971		return error;
    972	}
    973	if (!gpiod && has_acpi_companion(dev) && !added_acpi_mappings) {
    974		added_acpi_mappings = true;
    975		if (goodix_add_acpi_gpio_mappings(ts) == 0)
    976			goto retry_get_irq_gpio;
    977	}
    978
    979	ts->gpiod_int = gpiod;
    980
    981	/* Get the reset line GPIO pin number */
    982	gpiod = devm_gpiod_get_optional(dev, GOODIX_GPIO_RST_NAME, ts->gpiod_rst_flags);
    983	if (IS_ERR(gpiod)) {
    984		error = PTR_ERR(gpiod);
    985		if (error != -EPROBE_DEFER)
    986			dev_err(dev, "Failed to get %s GPIO: %d\n",
    987				GOODIX_GPIO_RST_NAME, error);
    988		return error;
    989	}
    990
    991	ts->gpiod_rst = gpiod;
    992
    993	switch (ts->irq_pin_access_method) {
    994	case IRQ_PIN_ACCESS_ACPI_GPIO:
    995		/*
    996		 * We end up here if goodix_add_acpi_gpio_mappings() has
    997		 * called devm_acpi_dev_add_driver_gpios() because the ACPI
    998		 * tables did not contain name to index mappings.
    999		 * Check that we successfully got both GPIOs after we've
   1000		 * added our own acpi_gpio_mapping and if we did not get both
   1001		 * GPIOs reset irq_pin_access_method to IRQ_PIN_ACCESS_NONE.
   1002		 */
   1003		if (!ts->gpiod_int || !ts->gpiod_rst)
   1004			ts->irq_pin_access_method = IRQ_PIN_ACCESS_NONE;
   1005		break;
   1006	case IRQ_PIN_ACCESS_ACPI_METHOD:
   1007		if (!ts->gpiod_rst)
   1008			ts->irq_pin_access_method = IRQ_PIN_ACCESS_NONE;
   1009		break;
   1010	default:
   1011		if (ts->gpiod_int && ts->gpiod_rst) {
   1012			ts->reset_controller_at_probe = true;
   1013			ts->load_cfg_from_disk = true;
   1014			ts->irq_pin_access_method = IRQ_PIN_ACCESS_GPIO;
   1015		}
   1016	}
   1017
   1018	return 0;
   1019}
   1020
   1021/**
   1022 * goodix_read_config - Read the embedded configuration of the panel
   1023 *
   1024 * @ts: our goodix_ts_data pointer
   1025 *
   1026 * Must be called during probe
   1027 */
   1028static void goodix_read_config(struct goodix_ts_data *ts)
   1029{
   1030	int x_max, y_max;
   1031	int error;
   1032
   1033	/*
   1034	 * On controllers where we need to upload the firmware
   1035	 * (controllers without flash) ts->config already has the config
   1036	 * at this point and the controller itself does not have it yet!
   1037	 */
   1038	if (!ts->firmware_name) {
   1039		error = goodix_i2c_read(ts->client, ts->chip->config_addr,
   1040					ts->config, ts->chip->config_len);
   1041		if (error) {
   1042			ts->int_trigger_type = GOODIX_INT_TRIGGER;
   1043			ts->max_touch_num = GOODIX_MAX_CONTACTS;
   1044			return;
   1045		}
   1046	}
   1047
   1048	ts->int_trigger_type = ts->config[TRIGGER_LOC] & 0x03;
   1049	ts->max_touch_num = ts->config[MAX_CONTACTS_LOC] & 0x0f;
   1050
   1051	x_max = get_unaligned_le16(&ts->config[RESOLUTION_LOC]);
   1052	y_max = get_unaligned_le16(&ts->config[RESOLUTION_LOC + 2]);
   1053	if (x_max && y_max) {
   1054		input_abs_set_max(ts->input_dev, ABS_MT_POSITION_X, x_max - 1);
   1055		input_abs_set_max(ts->input_dev, ABS_MT_POSITION_Y, y_max - 1);
   1056	}
   1057
   1058	ts->chip->calc_config_checksum(ts);
   1059}
   1060
   1061/**
   1062 * goodix_read_version - Read goodix touchscreen version
   1063 *
   1064 * @ts: our goodix_ts_data pointer
   1065 */
   1066static int goodix_read_version(struct goodix_ts_data *ts)
   1067{
   1068	int error;
   1069	u8 buf[6];
   1070	char id_str[GOODIX_ID_MAX_LEN + 1];
   1071
   1072	error = goodix_i2c_read(ts->client, GOODIX_REG_ID, buf, sizeof(buf));
   1073	if (error)
   1074		return error;
   1075
   1076	memcpy(id_str, buf, GOODIX_ID_MAX_LEN);
   1077	id_str[GOODIX_ID_MAX_LEN] = 0;
   1078	strscpy(ts->id, id_str, GOODIX_ID_MAX_LEN + 1);
   1079
   1080	ts->version = get_unaligned_le16(&buf[4]);
   1081
   1082	dev_info(&ts->client->dev, "ID %s, version: %04x\n", ts->id,
   1083		 ts->version);
   1084
   1085	return 0;
   1086}
   1087
   1088/**
   1089 * goodix_i2c_test - I2C test function to check if the device answers.
   1090 *
   1091 * @client: the i2c client
   1092 */
   1093static int goodix_i2c_test(struct i2c_client *client)
   1094{
   1095	int retry = 0;
   1096	int error;
   1097	u8 test;
   1098
   1099	while (retry++ < 2) {
   1100		error = goodix_i2c_read(client, GOODIX_REG_ID, &test, 1);
   1101		if (!error)
   1102			return 0;
   1103
   1104		msleep(20);
   1105	}
   1106
   1107	return error;
   1108}
   1109
   1110/**
   1111 * goodix_configure_dev - Finish device initialization
   1112 *
   1113 * @ts: our goodix_ts_data pointer
   1114 *
   1115 * Must be called from probe to finish initialization of the device.
   1116 * Contains the common initialization code for both devices that
   1117 * declare gpio pins and devices that do not. It is either called
   1118 * directly from probe or from request_firmware_wait callback.
   1119 */
   1120static int goodix_configure_dev(struct goodix_ts_data *ts)
   1121{
   1122	int error;
   1123	int i;
   1124
   1125	ts->int_trigger_type = GOODIX_INT_TRIGGER;
   1126	ts->max_touch_num = GOODIX_MAX_CONTACTS;
   1127
   1128	ts->input_dev = devm_input_allocate_device(&ts->client->dev);
   1129	if (!ts->input_dev) {
   1130		dev_err(&ts->client->dev, "Failed to allocate input device.");
   1131		return -ENOMEM;
   1132	}
   1133
   1134	ts->input_dev->name = "Goodix Capacitive TouchScreen";
   1135	ts->input_dev->phys = "input/ts";
   1136	ts->input_dev->id.bustype = BUS_I2C;
   1137	ts->input_dev->id.vendor = 0x0416;
   1138	if (kstrtou16(ts->id, 10, &ts->input_dev->id.product))
   1139		ts->input_dev->id.product = 0x1001;
   1140	ts->input_dev->id.version = ts->version;
   1141
   1142	ts->input_dev->keycode = ts->keymap;
   1143	ts->input_dev->keycodesize = sizeof(ts->keymap[0]);
   1144	ts->input_dev->keycodemax = GOODIX_MAX_KEYS;
   1145
   1146	/* Capacitive Windows/Home button on some devices */
   1147	for (i = 0; i < GOODIX_MAX_KEYS; ++i) {
   1148		if (i == 0)
   1149			ts->keymap[i] = KEY_LEFTMETA;
   1150		else
   1151			ts->keymap[i] = KEY_F1 + (i - 1);
   1152
   1153		input_set_capability(ts->input_dev, EV_KEY, ts->keymap[i]);
   1154	}
   1155
   1156	input_set_capability(ts->input_dev, EV_ABS, ABS_MT_POSITION_X);
   1157	input_set_capability(ts->input_dev, EV_ABS, ABS_MT_POSITION_Y);
   1158	input_set_abs_params(ts->input_dev, ABS_MT_WIDTH_MAJOR, 0, 255, 0, 0);
   1159	input_set_abs_params(ts->input_dev, ABS_MT_TOUCH_MAJOR, 0, 255, 0, 0);
   1160
   1161	/* Read configuration and apply touchscreen parameters */
   1162	goodix_read_config(ts);
   1163
   1164	/* Try overriding touchscreen parameters via device properties */
   1165	touchscreen_parse_properties(ts->input_dev, true, &ts->prop);
   1166
   1167	if (!ts->prop.max_x || !ts->prop.max_y || !ts->max_touch_num) {
   1168		dev_err(&ts->client->dev,
   1169			"Invalid config (%d, %d, %d), using defaults\n",
   1170			ts->prop.max_x, ts->prop.max_y, ts->max_touch_num);
   1171		ts->prop.max_x = GOODIX_MAX_WIDTH - 1;
   1172		ts->prop.max_y = GOODIX_MAX_HEIGHT - 1;
   1173		ts->max_touch_num = GOODIX_MAX_CONTACTS;
   1174		input_abs_set_max(ts->input_dev,
   1175				  ABS_MT_POSITION_X, ts->prop.max_x);
   1176		input_abs_set_max(ts->input_dev,
   1177				  ABS_MT_POSITION_Y, ts->prop.max_y);
   1178	}
   1179
   1180	if (dmi_check_system(nine_bytes_report)) {
   1181		ts->contact_size = 9;
   1182
   1183		dev_dbg(&ts->client->dev,
   1184			"Non-standard 9-bytes report format quirk\n");
   1185	}
   1186
   1187	if (dmi_check_system(inverted_x_screen)) {
   1188		ts->prop.invert_x = true;
   1189		dev_dbg(&ts->client->dev,
   1190			"Applying 'inverted x screen' quirk\n");
   1191	}
   1192
   1193	error = input_mt_init_slots(ts->input_dev, ts->max_touch_num,
   1194				    INPUT_MT_DIRECT | INPUT_MT_DROP_UNUSED);
   1195	if (error) {
   1196		dev_err(&ts->client->dev,
   1197			"Failed to initialize MT slots: %d", error);
   1198		return error;
   1199	}
   1200
   1201	error = input_register_device(ts->input_dev);
   1202	if (error) {
   1203		dev_err(&ts->client->dev,
   1204			"Failed to register input device: %d", error);
   1205		return error;
   1206	}
   1207
   1208	/*
   1209	 * Create the input_pen device before goodix_request_irq() calls
   1210	 * devm_request_threaded_irq() so that the devm framework frees
   1211	 * it after disabling the irq.
   1212	 * Unfortunately there is no way to detect if the touchscreen has pen
   1213	 * support, so registering the dev is delayed till the first pen event.
   1214	 */
   1215	error = goodix_create_pen_input(ts);
   1216	if (error)
   1217		return error;
   1218
   1219	ts->irq_flags = goodix_irq_flags[ts->int_trigger_type] | IRQF_ONESHOT;
   1220	error = goodix_request_irq(ts);
   1221	if (error) {
   1222		dev_err(&ts->client->dev, "request IRQ failed: %d\n", error);
   1223		return error;
   1224	}
   1225
   1226	return 0;
   1227}
   1228
   1229/**
   1230 * goodix_config_cb - Callback to finish device init
   1231 *
   1232 * @cfg: firmware config
   1233 * @ctx: our goodix_ts_data pointer
   1234 *
   1235 * request_firmware_wait callback that finishes
   1236 * initialization of the device.
   1237 */
   1238static void goodix_config_cb(const struct firmware *cfg, void *ctx)
   1239{
   1240	struct goodix_ts_data *ts = ctx;
   1241	int error;
   1242
   1243	if (ts->firmware_name) {
   1244		if (!cfg)
   1245			goto err_release_cfg;
   1246
   1247		error = goodix_check_cfg(ts, cfg->data, cfg->size);
   1248		if (error)
   1249			goto err_release_cfg;
   1250
   1251		memcpy(ts->config, cfg->data, cfg->size);
   1252	} else if (cfg) {
   1253		/* send device configuration to the firmware */
   1254		error = goodix_send_cfg(ts, cfg->data, cfg->size);
   1255		if (error)
   1256			goto err_release_cfg;
   1257	}
   1258
   1259	goodix_configure_dev(ts);
   1260
   1261err_release_cfg:
   1262	release_firmware(cfg);
   1263	complete_all(&ts->firmware_loading_complete);
   1264}
   1265
   1266static void goodix_disable_regulators(void *arg)
   1267{
   1268	struct goodix_ts_data *ts = arg;
   1269
   1270	regulator_disable(ts->vddio);
   1271	regulator_disable(ts->avdd28);
   1272}
   1273
   1274static int goodix_ts_probe(struct i2c_client *client,
   1275			   const struct i2c_device_id *id)
   1276{
   1277	struct goodix_ts_data *ts;
   1278	const char *cfg_name;
   1279	int error;
   1280
   1281	dev_dbg(&client->dev, "I2C Address: 0x%02x\n", client->addr);
   1282
   1283	if (!i2c_check_functionality(client->adapter, I2C_FUNC_I2C)) {
   1284		dev_err(&client->dev, "I2C check functionality failed.\n");
   1285		return -ENXIO;
   1286	}
   1287
   1288	ts = devm_kzalloc(&client->dev, sizeof(*ts), GFP_KERNEL);
   1289	if (!ts)
   1290		return -ENOMEM;
   1291
   1292	ts->client = client;
   1293	i2c_set_clientdata(client, ts);
   1294	init_completion(&ts->firmware_loading_complete);
   1295	ts->contact_size = GOODIX_CONTACT_SIZE;
   1296
   1297	error = goodix_get_gpio_config(ts);
   1298	if (error)
   1299		return error;
   1300
   1301	/* power up the controller */
   1302	error = regulator_enable(ts->avdd28);
   1303	if (error) {
   1304		dev_err(&client->dev,
   1305			"Failed to enable AVDD28 regulator: %d\n",
   1306			error);
   1307		return error;
   1308	}
   1309
   1310	error = regulator_enable(ts->vddio);
   1311	if (error) {
   1312		dev_err(&client->dev,
   1313			"Failed to enable VDDIO regulator: %d\n",
   1314			error);
   1315		regulator_disable(ts->avdd28);
   1316		return error;
   1317	}
   1318
   1319	error = devm_add_action_or_reset(&client->dev,
   1320					 goodix_disable_regulators, ts);
   1321	if (error)
   1322		return error;
   1323
   1324reset:
   1325	if (ts->reset_controller_at_probe) {
   1326		/* reset the controller */
   1327		error = goodix_reset(ts);
   1328		if (error)
   1329			return error;
   1330	}
   1331
   1332	error = goodix_i2c_test(client);
   1333	if (error) {
   1334		if (!ts->reset_controller_at_probe &&
   1335		    ts->irq_pin_access_method != IRQ_PIN_ACCESS_NONE) {
   1336			/* Retry after a controller reset */
   1337			ts->reset_controller_at_probe = true;
   1338			goto reset;
   1339		}
   1340		dev_err(&client->dev, "I2C communication failure: %d\n", error);
   1341		return error;
   1342	}
   1343
   1344	error = goodix_firmware_check(ts);
   1345	if (error)
   1346		return error;
   1347
   1348	error = goodix_read_version(ts);
   1349	if (error)
   1350		return error;
   1351
   1352	ts->chip = goodix_get_chip_data(ts->id);
   1353
   1354	if (ts->load_cfg_from_disk) {
   1355		/* update device config */
   1356		error = device_property_read_string(&client->dev,
   1357						    "goodix,config-name",
   1358						    &cfg_name);
   1359		if (!error)
   1360			snprintf(ts->cfg_name, sizeof(ts->cfg_name),
   1361				 "goodix/%s", cfg_name);
   1362		else
   1363			snprintf(ts->cfg_name, sizeof(ts->cfg_name),
   1364				 "goodix_%s_cfg.bin", ts->id);
   1365
   1366		error = request_firmware_nowait(THIS_MODULE, true, ts->cfg_name,
   1367						&client->dev, GFP_KERNEL, ts,
   1368						goodix_config_cb);
   1369		if (error) {
   1370			dev_err(&client->dev,
   1371				"Failed to invoke firmware loader: %d\n",
   1372				error);
   1373			return error;
   1374		}
   1375
   1376		return 0;
   1377	} else {
   1378		error = goodix_configure_dev(ts);
   1379		if (error)
   1380			return error;
   1381	}
   1382
   1383	return 0;
   1384}
   1385
   1386static int goodix_ts_remove(struct i2c_client *client)
   1387{
   1388	struct goodix_ts_data *ts = i2c_get_clientdata(client);
   1389
   1390	if (ts->load_cfg_from_disk)
   1391		wait_for_completion(&ts->firmware_loading_complete);
   1392
   1393	return 0;
   1394}
   1395
   1396static int __maybe_unused goodix_suspend(struct device *dev)
   1397{
   1398	struct i2c_client *client = to_i2c_client(dev);
   1399	struct goodix_ts_data *ts = i2c_get_clientdata(client);
   1400	int error;
   1401
   1402	if (ts->load_cfg_from_disk)
   1403		wait_for_completion(&ts->firmware_loading_complete);
   1404
   1405	/* We need gpio pins to suspend/resume */
   1406	if (ts->irq_pin_access_method == IRQ_PIN_ACCESS_NONE) {
   1407		disable_irq(client->irq);
   1408		return 0;
   1409	}
   1410
   1411	/* Free IRQ as IRQ pin is used as output in the suspend sequence */
   1412	goodix_free_irq(ts);
   1413
   1414	/* Save reference (calibration) info if necessary */
   1415	goodix_save_bak_ref(ts);
   1416
   1417	/* Output LOW on the INT pin for 5 ms */
   1418	error = goodix_irq_direction_output(ts, 0);
   1419	if (error) {
   1420		goodix_request_irq(ts);
   1421		return error;
   1422	}
   1423
   1424	usleep_range(5000, 6000);
   1425
   1426	error = goodix_i2c_write_u8(ts->client, GOODIX_REG_COMMAND,
   1427				    GOODIX_CMD_SCREEN_OFF);
   1428	if (error) {
   1429		goodix_irq_direction_input(ts);
   1430		goodix_request_irq(ts);
   1431		return -EAGAIN;
   1432	}
   1433
   1434	/*
   1435	 * The datasheet specifies that the interval between sending screen-off
   1436	 * command and wake-up should be longer than 58 ms. To avoid waking up
   1437	 * sooner, delay 58ms here.
   1438	 */
   1439	msleep(58);
   1440	return 0;
   1441}
   1442
   1443static int __maybe_unused goodix_resume(struct device *dev)
   1444{
   1445	struct i2c_client *client = to_i2c_client(dev);
   1446	struct goodix_ts_data *ts = i2c_get_clientdata(client);
   1447	u8 config_ver;
   1448	int error;
   1449
   1450	if (ts->irq_pin_access_method == IRQ_PIN_ACCESS_NONE) {
   1451		enable_irq(client->irq);
   1452		return 0;
   1453	}
   1454
   1455	/*
   1456	 * Exit sleep mode by outputting HIGH level to INT pin
   1457	 * for 2ms~5ms.
   1458	 */
   1459	error = goodix_irq_direction_output(ts, 1);
   1460	if (error)
   1461		return error;
   1462
   1463	usleep_range(2000, 5000);
   1464
   1465	error = goodix_int_sync(ts);
   1466	if (error)
   1467		return error;
   1468
   1469	error = goodix_i2c_read(ts->client, ts->chip->config_addr,
   1470				&config_ver, 1);
   1471	if (!error && config_ver != ts->config[0])
   1472		dev_info(dev, "Config version mismatch %d != %d, resetting controller\n",
   1473			 config_ver, ts->config[0]);
   1474
   1475	if (error != 0 || config_ver != ts->config[0]) {
   1476		error = goodix_reset(ts);
   1477		if (error)
   1478			return error;
   1479
   1480		error = goodix_send_cfg(ts, ts->config, ts->chip->config_len);
   1481		if (error)
   1482			return error;
   1483	}
   1484
   1485	error = goodix_request_irq(ts);
   1486	if (error)
   1487		return error;
   1488
   1489	return 0;
   1490}
   1491
   1492static SIMPLE_DEV_PM_OPS(goodix_pm_ops, goodix_suspend, goodix_resume);
   1493
   1494static const struct i2c_device_id goodix_ts_id[] = {
   1495	{ "GDIX1001:00", 0 },
   1496	{ }
   1497};
   1498MODULE_DEVICE_TABLE(i2c, goodix_ts_id);
   1499
   1500#ifdef CONFIG_ACPI
   1501static const struct acpi_device_id goodix_acpi_match[] = {
   1502	{ "GDIX1001", 0 },
   1503	{ "GDIX1002", 0 },
   1504	{ }
   1505};
   1506MODULE_DEVICE_TABLE(acpi, goodix_acpi_match);
   1507#endif
   1508
   1509#ifdef CONFIG_OF
   1510static const struct of_device_id goodix_of_match[] = {
   1511	{ .compatible = "goodix,gt1151" },
   1512	{ .compatible = "goodix,gt5663" },
   1513	{ .compatible = "goodix,gt5688" },
   1514	{ .compatible = "goodix,gt911" },
   1515	{ .compatible = "goodix,gt9110" },
   1516	{ .compatible = "goodix,gt912" },
   1517	{ .compatible = "goodix,gt9147" },
   1518	{ .compatible = "goodix,gt917s" },
   1519	{ .compatible = "goodix,gt927" },
   1520	{ .compatible = "goodix,gt9271" },
   1521	{ .compatible = "goodix,gt928" },
   1522	{ .compatible = "goodix,gt9286" },
   1523	{ .compatible = "goodix,gt967" },
   1524	{ }
   1525};
   1526MODULE_DEVICE_TABLE(of, goodix_of_match);
   1527#endif
   1528
   1529static struct i2c_driver goodix_ts_driver = {
   1530	.probe = goodix_ts_probe,
   1531	.remove = goodix_ts_remove,
   1532	.id_table = goodix_ts_id,
   1533	.driver = {
   1534		.name = "Goodix-TS",
   1535		.acpi_match_table = ACPI_PTR(goodix_acpi_match),
   1536		.of_match_table = of_match_ptr(goodix_of_match),
   1537		.pm = &goodix_pm_ops,
   1538	},
   1539};
   1540module_i2c_driver(goodix_ts_driver);
   1541
   1542MODULE_AUTHOR("Benjamin Tissoires <benjamin.tissoires@gmail.com>");
   1543MODULE_AUTHOR("Bastien Nocera <hadess@hadess.net>");
   1544MODULE_DESCRIPTION("Goodix touchscreen driver");
   1545MODULE_LICENSE("GPL v2");