1*a2233cb7SHans de Goede /* SPDX-License-Identifier: GPL-2.0-only */
2*a2233cb7SHans de Goede #ifndef __GOODIX_H__
3*a2233cb7SHans de Goede #define __GOODIX_H__
4*a2233cb7SHans de Goede 
5*a2233cb7SHans de Goede #include <linux/gpio/consumer.h>
6*a2233cb7SHans de Goede #include <linux/i2c.h>
7*a2233cb7SHans de Goede #include <linux/input.h>
8*a2233cb7SHans de Goede #include <linux/input/mt.h>
9*a2233cb7SHans de Goede #include <linux/input/touchscreen.h>
10*a2233cb7SHans de Goede #include <linux/regulator/consumer.h>
11*a2233cb7SHans de Goede 
12*a2233cb7SHans de Goede /* Register defines */
13*a2233cb7SHans de Goede #define GOODIX_REG_COMMAND			0x8040
14*a2233cb7SHans de Goede #define GOODIX_CMD_SCREEN_OFF			0x05
15*a2233cb7SHans de Goede 
16*a2233cb7SHans de Goede #define GOODIX_GT1X_REG_CONFIG_DATA		0x8050
17*a2233cb7SHans de Goede #define GOODIX_GT9X_REG_CONFIG_DATA		0x8047
18*a2233cb7SHans de Goede #define GOODIX_REG_ID				0x8140
19*a2233cb7SHans de Goede #define GOODIX_READ_COOR_ADDR			0x814E
20*a2233cb7SHans de Goede 
21*a2233cb7SHans de Goede #define GOODIX_ID_MAX_LEN			4
22*a2233cb7SHans de Goede #define GOODIX_CONFIG_MAX_LENGTH		240
23*a2233cb7SHans de Goede #define GOODIX_MAX_KEYS				7
24*a2233cb7SHans de Goede 
25*a2233cb7SHans de Goede enum goodix_irq_pin_access_method {
26*a2233cb7SHans de Goede 	IRQ_PIN_ACCESS_NONE,
27*a2233cb7SHans de Goede 	IRQ_PIN_ACCESS_GPIO,
28*a2233cb7SHans de Goede 	IRQ_PIN_ACCESS_ACPI_GPIO,
29*a2233cb7SHans de Goede 	IRQ_PIN_ACCESS_ACPI_METHOD,
30*a2233cb7SHans de Goede };
31*a2233cb7SHans de Goede 
32*a2233cb7SHans de Goede struct goodix_ts_data;
33*a2233cb7SHans de Goede 
34*a2233cb7SHans de Goede struct goodix_chip_data {
35*a2233cb7SHans de Goede 	u16 config_addr;
36*a2233cb7SHans de Goede 	int config_len;
37*a2233cb7SHans de Goede 	int (*check_config)(struct goodix_ts_data *ts, const u8 *cfg, int len);
38*a2233cb7SHans de Goede 	void (*calc_config_checksum)(struct goodix_ts_data *ts);
39*a2233cb7SHans de Goede };
40*a2233cb7SHans de Goede 
41*a2233cb7SHans de Goede struct goodix_ts_data {
42*a2233cb7SHans de Goede 	struct i2c_client *client;
43*a2233cb7SHans de Goede 	struct input_dev *input_dev;
44*a2233cb7SHans de Goede 	const struct goodix_chip_data *chip;
45*a2233cb7SHans de Goede 	struct touchscreen_properties prop;
46*a2233cb7SHans de Goede 	unsigned int max_touch_num;
47*a2233cb7SHans de Goede 	unsigned int int_trigger_type;
48*a2233cb7SHans de Goede 	struct regulator *avdd28;
49*a2233cb7SHans de Goede 	struct regulator *vddio;
50*a2233cb7SHans de Goede 	struct gpio_desc *gpiod_int;
51*a2233cb7SHans de Goede 	struct gpio_desc *gpiod_rst;
52*a2233cb7SHans de Goede 	int gpio_count;
53*a2233cb7SHans de Goede 	int gpio_int_idx;
54*a2233cb7SHans de Goede 	char id[GOODIX_ID_MAX_LEN + 1];
55*a2233cb7SHans de Goede 	u16 version;
56*a2233cb7SHans de Goede 	const char *cfg_name;
57*a2233cb7SHans de Goede 	bool reset_controller_at_probe;
58*a2233cb7SHans de Goede 	bool load_cfg_from_disk;
59*a2233cb7SHans de Goede 	struct completion firmware_loading_complete;
60*a2233cb7SHans de Goede 	unsigned long irq_flags;
61*a2233cb7SHans de Goede 	enum goodix_irq_pin_access_method irq_pin_access_method;
62*a2233cb7SHans de Goede 	unsigned int contact_size;
63*a2233cb7SHans de Goede 	u8 config[GOODIX_CONFIG_MAX_LENGTH];
64*a2233cb7SHans de Goede 	unsigned short keymap[GOODIX_MAX_KEYS];
65*a2233cb7SHans de Goede };
66*a2233cb7SHans de Goede 
67*a2233cb7SHans de Goede int goodix_i2c_read(struct i2c_client *client, u16 reg, u8 *buf, int len);
68*a2233cb7SHans de Goede int goodix_i2c_write(struct i2c_client *client, u16 reg, const u8 *buf, int len);
69*a2233cb7SHans de Goede int goodix_i2c_write_u8(struct i2c_client *client, u16 reg, u8 value);
70*a2233cb7SHans de Goede int goodix_send_cfg(struct goodix_ts_data *ts, const u8 *cfg, int len);
71*a2233cb7SHans de Goede int goodix_int_sync(struct goodix_ts_data *ts);
72*a2233cb7SHans de Goede 
73*a2233cb7SHans de Goede #endif
74