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