goodix linux驱动下载,gt9xx.h · anzye/goodix_linux-3.4.y - Gitee.com

本文档是Goodix GT9xx触摸屏驱动的源代码,包含了驱动的基本配置、I/O操作定义以及特殊配置信息。源码中详细定义了传感器配置信息、中断处理、GPIO使用、中断触发类型、设备结构体等,适用于系统集成时参考。此外,还涉及到中断处理、错误检查、设备挂起和恢复等功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/*

* Goodix GT9xx touchscreen driver

*

* Copyright (C) 2010 - 2014 Goodix. Ltd.

*

* This program is free software; you can redistribute it and/or modify

* it under the terms of the GNU General Public License as published by

* the Free Software Foundation; either version 2 of the License, or

* (at your option) any later version.

*

* This program is distributed in the hope that it will be a reference

* to you, when you are integrating the GOODiX's CTP IC into your system,

* but WITHOUT ANY WARRANTY; without even the implied warranty of

* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU

* General Public License for more details.

*

* Version: 2.4

* Release Date: 2014/11/28

*/

#ifndef _GOODIX_GT9XX_H_

#define _GOODIX_GT9XX_H_

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#ifdef CONFIG_OF

#include

#include

#endif

#ifdef CONFIG_FB

#include

#include

#endif

#ifdef CONFIG_HAS_EARLYSUSPEND

#include

#endif

#include

#include

//***************************PART1:ON/OFF define*******************************

#define GTP_CUSTOM_CFG 1

#define GTP_CHANGE_X2Y 0

#define GTP_DRIVER_SEND_CFG 1

#define GTP_HAVE_TOUCH_KEY 0

#define GTP_POWER_CTRL_SLEEP 0

#define GTP_ICS_SLOT_REPORT 0

#define GTP_TOUCH_SINGLE 1

#define GTP_AUTO_UPDATE 0 // auto update fw by .bin file as default

#define GTP_HEADER_FW_UPDATE 0 // auto update fw by gtp_default_FW in gt9xx_firmware.h, function together with GTP_AUTO_UPDATE

#define GTP_AUTO_UPDATE_CFG 0 // auto update config by .cfg file, function together with GTP_AUTO_UPDATE

#define GTP_COMPATIBLE_MODE 0 // compatible with GT9XXF

#define GTP_CREATE_WR_NODE 0

#define GTP_ESD_PROTECT 0 // esd protection with a cycle of 2 seconds

#define GTP_WITH_PEN 0

#define GTP_PEN_HAVE_BUTTON 0 // active pen has buttons, function together with GTP_WITH_PEN

#define GTP_GESTURE_WAKEUP 0 // gesture wakeup

#define HOTKNOT_ENABLE 0 // hotknot module

#define HOTKNOT_BLOCK_RW 0 // block rw operation in hotknot

#define FLASHLESS_FLASH_WORKROUND 0

#define GTP_DEBUG_ON 0

#define GTP_DEBUG_ARRAY_ON 0

#define GTP_DEBUG_FUNC_ON 0

#if HOTKNOT_BLOCK_RW

extern u8 wait_hotknot_state;

extern u8 got_hotknot_state;

extern u8 got_hotknot_extra_state;

extern u8 hotknot_paired_flag;

extern wait_queue_head_t bp_waiter;

#endif

#if HOTKNOT_ENABLE

extern u8 hotknot_enabled;

#endif

#if GTP_COMPATIBLE_MODE

typedef enum

{

CHIP_TYPE_GT9 = 0,

CHIP_TYPE_GT9F = 1,

} CHIP_TYPE_T;

#endif

struct goodix_ts_data {

spinlock_t irq_lock;

struct i2c_client *client;

struct input_dev *input_dev;

struct hrtimer timer;

struct work_struct work;

s32 irq_is_disable;

s32 use_irq;

u16 abs_x_max;

u16 abs_y_max;

u8 max_touch_num;

u8 int_trigger_type;

u8 green_wake_mode;

u8 enter_update;

u8 gtp_is_suspend;

u8 gtp_rawdiff_mode;

int gtp_cfg_len;

u8 fw_error;

u8 pnl_init_error;

#if defined(CONFIG_FB)

struct notifier_block notifier;

#elif defined(CONFIG_HAS_EARLYSUSPEND)

struct early_suspend early_suspend;

#endif

#if GTP_WITH_PEN

struct input_dev *pen_dev;

#endif

#if GTP_ESD_PROTECT

spinlock_t esd_lock;

u8 esd_running;

s32 clk_tick_cnt;

#endif

#if GTP_COMPATIBLE_MODE

u16 bak_ref_len;

s32 ref_chk_fs_times;

s32 clk_chk_fs_times;

CHIP_TYPE_T chip_type;

u8 rqst_processing;

u8 is_950;

#endif

};

extern u16 show_len;

extern u16 total_len;

extern int gtp_rst_gpio;

extern int gtp_int_gpio;

extern u8 gtp_resetting;

//*************************** PART2:TODO define **********************************

// STEP_1(REQUIRED): Define Configuration Information Group(s)

// Sensor_ID Map:

/* sensor_opt1 sensor_opt2 Sensor_ID

GND GND 0

VDDIO GND 1

NC GND 2

GND NC/300K 3

VDDIO NC/300K 4

NC NC/300K 5

*/

// TODO: define your own default or for Sensor_ID == 0 config here.

// The predefined one is just a sample config, which is not suitable for your tp in most cases.

#define CTP_CFG_GROUP0 {\

0x41,0x20,0x03,0xE0,0x01,0x0A,0x0D,0x00,0x01,0x08,\

0x28,0x05,0x50,0x32,0x03,0x05,0x00,0x00,0x00,0x00,\

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x8A,0x2A,0x0C,\

0x17,0x15,0x31,0x0D,0x00,0x00,0x00,0xBC,0x02,0x2D,\

0x00,0x00,0x00,0x00,0x00,0x03,0x64,0x32,0x00,0x00,\

0x00,0x0F,0x55,0x94,0xC5,0x02,0x07,0x00,0x00,0x04,\

0x94,0x12,0x00,0x6E,0x19,0x00,0x50,0x24,0x00,0x3D,\

0x33,0x00,0x30,0x48,0x00,0x30,0x00,0x00,0x00,0x00,\

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\

0x00,0x00,0x02,0x04,0x06,0x08,0x0A,0x0C,0x0E,0x10,\

0x12,0x14,0x16,0x18,0xFF,0xFF,0x00,0x00,0x00,0x00,\

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\

0x00,0x00,0x24,0x22,0x21,0x20,0x1F,0x1E,0x1D,0x1C,\

0x18,0x16,0x13,0x12,0x10,0x0F,0x0A,0x08,0x06,0x04,\

0x02,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,\

0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\

0xFF,0xFF,0xFF,0xFF,0x8B,0x01\

}

// TODO: define your config for Sensor_ID == 1 here, if needed

#define CTP_CFG_GROUP1 {\

}

// TODO: define your config for Sensor_ID == 1 here, if needed

#define CTP_CFG_GROUP2 {\

}

// TODO: define your config for Sensor_ID == 2 here, if needed

#define CTP_CFG_GROUP3 {\

}

// TODO: define your config for Sensor_ID == 3 here, if needed

#define CTP_CFG_GROUP4 {\

}

// TODO: define your config for Sensor_ID == 4 here, if needed

#define CTP_CFG_GROUP5 {\

}

#define GTP_MAX_CFG_GROUP6

// STEP_2(REQUIRED): Customize your I/O ports & I/O operations

#define GTP_RST_PORT (PAD_GPIO_D + 1)//gpioc8

#define GTP_INT_PORT CFG_IO_TOUCH_IRQ

#define GTP_INT_IRQ PB_PIO_IRQ(CFG_IO_TOUCH_IRQ)

#define GTP_GPIO_AS_INPUT(pin) do{\

gpio_direction_input(pin);\

nxp_soc_gpio_set_int_enable(pin,0);\

}while(0)

#define GTP_GPIO_AS_INT(pin) do{\

GTP_GPIO_AS_INPUT(pin);\

nxp_soc_gpio_set_int_enable(pin,1);\

}while(0)

#define GTP_GPIO_GET_VALUE(pin) gpio_get_value(pin)

#define GTP_GPIO_OUTPUT(pin,level) gpio_direction_output(pin,level)

#define GTP_GPIO_REQUEST(pin, label) gpio_request(pin, label)

#define GTP_GPIO_FREE(pin) gpio_free(pin)

#define GTP_IRQ_TAB {IRQ_TYPE_EDGE_RISING, IRQ_TYPE_EDGE_FALLING, IRQ_TYPE_LEVEL_LOW, IRQ_TYPE_LEVEL_HIGH}

// STEP_3(optional): Specify your special config info if needed

#if GTP_CUSTOM_CFG

#define GTP_MAX_HEIGHT 480

#define GTP_MAX_WIDTH 800

#define GTP_INT_TRIGGER 1 // 0: Rising 1: Falling

#else

#define GTP_MAX_HEIGHT 4096

#define GTP_MAX_WIDTH 4096

#define GTP_INT_TRIGGER 1

#endif

#define GTP_MAX_TOUCH 5

// STEP_4(optional): If keys are available and reported as keys, config your key info here

#if GTP_HAVE_TOUCH_KEY

#define GTP_KEY_TAB {KEY_MENU, KEY_HOME, KEY_BACK}

#endif

//***************************PART3:OTHER define*********************************

#define GTP_DRIVER_VERSION "V2.4<2014/11/28>"

#define GTP_I2C_NAME "Goodix-TS"

#define GT91XX_CONFIG_PROC_FILE "gt9xx_config"

#define GTP_POLL_TIME 10

#define GTP_ADDR_LENGTH 2

#define GTP_CONFIG_MIN_LENGTH 186

#define GTP_CONFIG_MAX_LENGTH 240

#define FAIL 0

#define SUCCESS 1

#define SWITCH_OFF 0

#define SWITCH_ON 1

//******************** For GT9XXF Start **********************//

#define GTP_REG_BAK_REF 0x99D0

#define GTP_REG_MAIN_CLK 0x8020

#define GTP_REG_CHIP_TYPE 0x8000

#define GTP_REG_HAVE_KEY 0x804E

#define GTP_REG_MATRIX_DRVNUM 0x8069

#define GTP_REG_MATRIX_SENNUM 0x806A

#define GTP_FL_FW_BURN 0x00

#define GTP_FL_ESD_RECOVERY 0x01

#define GTP_FL_READ_REPAIR 0x02

#define GTP_BAK_REF_SEND 0

#define GTP_BAK_REF_STORE 1

#define CFG_LOC_DRVA_NUM 29

#define CFG_LOC_DRVB_NUM 30

#define CFG_LOC_SENS_NUM 31

#define GTP_CHK_FW_MAX 40

#define GTP_CHK_FS_MNT_MAX 300

#define GTP_BAK_REF_PATH "/data/gtp_ref.bin"

#define GTP_MAIN_CLK_PATH "/data/gtp_clk.bin"

#define GTP_RQST_CONFIG 0x01

#define GTP_RQST_BAK_REF 0x02

#define GTP_RQST_RESET 0x03

#define GTP_RQST_MAIN_CLOCK 0x04

#define GTP_RQST_HOTKNOT_CODE 0x20

#define GTP_RQST_RESPONDED 0x00

#define GTP_RQST_IDLE 0xFF

#define HN_DEVICE_PAIRED 0x80

#define HN_MASTER_DEPARTED 0x40

#define HN_SLAVE_DEPARTED 0x20

#define HN_MASTER_SEND 0x10

#define HN_SLAVE_RECEIVED 0x08

//******************** For GT9XXF End **********************//

// Registers define

#define GTP_READ_COOR_ADDR 0x814E

#define GTP_REG_SLEEP 0x8040

#define GTP_REG_SENSOR_ID 0x814A

#define GTP_REG_CONFIG_DATA 0x8047

#define GTP_REG_VERSION 0x8140

#define GTP_REG_HN_STATE 0xAB10

#define RESOLUTION_LOC 3

#define TRIGGER_LOC 8

#define CFG_GROUP_LEN(p_cfg_grp) (sizeof(p_cfg_grp) / sizeof(p_cfg_grp[0]))

// Log define

#define GTP_INFO(fmt,arg...) printk("<> "fmt"\n",##arg)

#define GTP_ERROR(fmt,arg...) printk("<> "fmt"\n",##arg)

#define GTP_DEBUG(fmt,arg...) do{\

if(GTP_DEBUG_ON)\

printk("<> [%d]"fmt"\n",__LINE__, ##arg);\

}while(0)

#define GTP_DEBUG_ARRAY(array, num) do{\

s32 i;\

u8* a = array;\

if(GTP_DEBUG_ARRAY_ON)\

{\

printk("<>\n");\

for (i = 0; i < (num); i++)\

{\

printk("%02x ", (a)[i]);\

if ((i + 1 ) %10 == 0)\

{\

printk("\n");\

}\

}\

printk("\n");\

}\

}while(0)

#define GTP_DEBUG_FUNC() do{\

if(GTP_DEBUG_FUNC_ON)\

printk("<> Func:%s@Line:%d\n",__func__,__LINE__);\

}while(0)

#define GTP_SWAP(x, y) do{\

typeof(x) z = x;\

x = y;\

y = z;\

}while (0)

//*****************************End of Part III********************************

extern int gtp_parse_dt_cfg(struct device *dev, u8 *cfg, int *cfg_len, u8 sid);

#endif /* _GOODIX_GT9XX_H_ */

一键复制

编辑

Web IDE

原始数据

按行查看

历史

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值