2021-09-21 07:08:18 +03:00
/* SPDX-License-Identifier: GPL-2.0-only */
# ifndef __GOODIX_H__
# define __GOODIX_H__
# include <linux/gpio/consumer.h>
# include <linux/i2c.h>
# include <linux/input.h>
# include <linux/input/mt.h>
# include <linux/input/touchscreen.h>
# include <linux/regulator/consumer.h>
/* Register defines */
2021-09-21 07:08:53 +03:00
# define GOODIX_REG_MISCTL_DSP_CTL 0x4010
# define GOODIX_REG_MISCTL_SRAM_BANK 0x4048
# define GOODIX_REG_MISCTL_MEM_CD_EN 0x4049
# define GOODIX_REG_MISCTL_CACHE_EN 0x404B
# define GOODIX_REG_MISCTL_TMR0_EN 0x40B0
# define GOODIX_REG_MISCTL_SWRST 0x4180
# define GOODIX_REG_MISCTL_CPU_SWRST_PULSE 0x4184
# define GOODIX_REG_MISCTL_BOOTCTL 0x4190
# define GOODIX_REG_MISCTL_BOOT_OPT 0x4218
# define GOODIX_REG_MISCTL_BOOT_CTL 0x5094
# define GOODIX_REG_FW_SIG 0x8000
# define GOODIX_FW_SIG_LEN 10
# define GOODIX_REG_MAIN_CLK 0x8020
# define GOODIX_MAIN_CLK_LEN 6
2021-09-21 07:08:18 +03:00
# define GOODIX_REG_COMMAND 0x8040
# define GOODIX_CMD_SCREEN_OFF 0x05
2021-09-21 07:08:53 +03:00
# define GOODIX_REG_SW_WDT 0x8041
# define GOODIX_REG_REQUEST 0x8043
# define GOODIX_RQST_RESPONDED 0x00
# define GOODIX_RQST_CONFIG 0x01
# define GOODIX_RQST_BAK_REF 0x02
# define GOODIX_RQST_RESET 0x03
# define GOODIX_RQST_MAIN_CLOCK 0x04
/*
* Unknown request which gets send by the controller aprox .
* every 34 seconds once it is up and running .
*/
# define GOODIX_RQST_UNKNOWN 0x06
# define GOODIX_RQST_IDLE 0xFF
# define GOODIX_REG_STATUS 0x8044
2021-09-21 07:08:18 +03:00
# define GOODIX_GT1X_REG_CONFIG_DATA 0x8050
# define GOODIX_GT9X_REG_CONFIG_DATA 0x8047
# define GOODIX_REG_ID 0x8140
# define GOODIX_READ_COOR_ADDR 0x814E
2021-09-21 07:08:53 +03:00
# define GOODIX_REG_BAK_REF 0x99D0
2021-09-21 07:08:18 +03:00
# define GOODIX_ID_MAX_LEN 4
# define GOODIX_CONFIG_MAX_LENGTH 240
# define GOODIX_MAX_KEYS 7
enum goodix_irq_pin_access_method {
IRQ_PIN_ACCESS_NONE ,
IRQ_PIN_ACCESS_GPIO ,
IRQ_PIN_ACCESS_ACPI_GPIO ,
IRQ_PIN_ACCESS_ACPI_METHOD ,
} ;
struct goodix_ts_data ;
struct goodix_chip_data {
u16 config_addr ;
int config_len ;
int ( * check_config ) ( struct goodix_ts_data * ts , const u8 * cfg , int len ) ;
void ( * calc_config_checksum ) ( struct goodix_ts_data * ts ) ;
} ;
struct goodix_ts_data {
struct i2c_client * client ;
struct input_dev * input_dev ;
2021-12-08 20:33:35 +03:00
struct input_dev * input_pen ;
2021-09-21 07:08:18 +03:00
const struct goodix_chip_data * chip ;
2021-09-21 07:08:53 +03:00
const char * firmware_name ;
2021-09-21 07:08:18 +03:00
struct touchscreen_properties prop ;
unsigned int max_touch_num ;
unsigned int int_trigger_type ;
struct regulator * avdd28 ;
struct regulator * vddio ;
struct gpio_desc * gpiod_int ;
struct gpio_desc * gpiod_rst ;
int gpio_count ;
int gpio_int_idx ;
2021-12-07 10:15:09 +03:00
enum gpiod_flags gpiod_rst_flags ;
2021-09-21 07:08:18 +03:00
char id [ GOODIX_ID_MAX_LEN + 1 ] ;
2021-09-21 07:08:44 +03:00
char cfg_name [ 64 ] ;
2021-09-21 07:08:18 +03:00
u16 version ;
bool reset_controller_at_probe ;
bool load_cfg_from_disk ;
2022-03-01 09:59:34 +03:00
int pen_input_registered ;
2021-09-21 07:08:18 +03:00
struct completion firmware_loading_complete ;
unsigned long irq_flags ;
enum goodix_irq_pin_access_method irq_pin_access_method ;
unsigned int contact_size ;
u8 config [ GOODIX_CONFIG_MAX_LENGTH ] ;
unsigned short keymap [ GOODIX_MAX_KEYS ] ;
2021-09-21 07:08:53 +03:00
u8 main_clk [ GOODIX_MAIN_CLK_LEN ] ;
int bak_ref_len ;
u8 * bak_ref ;
2021-09-21 07:08:18 +03:00
} ;
int goodix_i2c_read ( struct i2c_client * client , u16 reg , u8 * buf , int len ) ;
int goodix_i2c_write ( struct i2c_client * client , u16 reg , const u8 * buf , int len ) ;
int goodix_i2c_write_u8 ( struct i2c_client * client , u16 reg , u8 value ) ;
int goodix_send_cfg ( struct goodix_ts_data * ts , const u8 * cfg , int len ) ;
int goodix_int_sync ( struct goodix_ts_data * ts ) ;
2021-09-21 07:08:26 +03:00
int goodix_reset_no_int_sync ( struct goodix_ts_data * ts ) ;
2021-09-21 07:08:18 +03:00
2021-09-21 07:08:53 +03:00
int goodix_firmware_check ( struct goodix_ts_data * ts ) ;
bool goodix_handle_fw_request ( struct goodix_ts_data * ts ) ;
void goodix_save_bak_ref ( struct goodix_ts_data * ts ) ;
2021-09-21 07:08:18 +03:00
# endif