xref: /OK3568_Linux_fs/kernel/drivers/input/touchscreen/elan/elan_ts.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun // SPDX-License-Identifier: GPL-2.0
2*4882a593Smuzhiyun /*
3*4882a593Smuzhiyun  * ELAN HID-I2C TouchScreen driver.
4*4882a593Smuzhiyun  *
5*4882a593Smuzhiyun  * Copyright (C) 2014 Elan Microelectronics Corporation.
6*4882a593Smuzhiyun  *
7*4882a593Smuzhiyun  * Author: Chuming Zhang <chuming.zhang@elanic.com.cn>
8*4882a593Smuzhiyun  */
9*4882a593Smuzhiyun 
10*4882a593Smuzhiyun #ifndef _LINUX_ELAN_TS_H
11*4882a593Smuzhiyun #define _LINUX_ELAN_TS_H
12*4882a593Smuzhiyun 
13*4882a593Smuzhiyun #include <linux/i2c.h>
14*4882a593Smuzhiyun #include <linux/miscdevice.h>
15*4882a593Smuzhiyun #include <linux/regulator/consumer.h>
16*4882a593Smuzhiyun #include <linux/uaccess.h>
17*4882a593Smuzhiyun #include <linux/fs.h>
18*4882a593Smuzhiyun #include <linux/delay.h>
19*4882a593Smuzhiyun #include <linux/kernel.h>
20*4882a593Smuzhiyun #include <linux/errno.h>
21*4882a593Smuzhiyun #include <linux/slab.h>
22*4882a593Smuzhiyun #include <linux/firmware.h>
23*4882a593Smuzhiyun #ifdef CONFIG_HAS_EARLYSUSPEND
24*4882a593Smuzhiyun     #include <linux/pm.h>
25*4882a593Smuzhiyun     #include <linux/earlysuspend.h>
26*4882a593Smuzhiyun #endif
27*4882a593Smuzhiyun 
28*4882a593Smuzhiyun #if defined(CONFIG_FB)
29*4882a593Smuzhiyun #include <linux/notifier.h>
30*4882a593Smuzhiyun #include <linux/fb.h>
31*4882a593Smuzhiyun #endif
32*4882a593Smuzhiyun #include <linux/poll.h>
33*4882a593Smuzhiyun #include <linux/wait.h>
34*4882a593Smuzhiyun /*fw upgrade fuction switch*/
35*4882a593Smuzhiyun //#define IAP_PORTION
36*4882a593Smuzhiyun 
37*4882a593Smuzhiyun /*define elan device name*/
38*4882a593Smuzhiyun #define ELAN_TS_NAME "elan_ts"
39*4882a593Smuzhiyun 
40*4882a593Smuzhiyun #define MIN(x,y) ((((x) - (y)) < 0) ? (x) : (y))
41*4882a593Smuzhiyun #define FLASH_PAGE_PER_TIMES	(30)
42*4882a593Smuzhiyun #define FW_PAGE_SIZE			(132)
43*4882a593Smuzhiyun #define IAP_CMD_HEADER_LEN		(9)
44*4882a593Smuzhiyun #define IAP_FLASH_SIZE  (FLASH_PAGE_PER_TIMES * FW_PAGE_SIZE)
45*4882a593Smuzhiyun 
46*4882a593Smuzhiyun #define ELAN_VTG_MIN_UV		3300000//2850000
47*4882a593Smuzhiyun #define ELAN_VTG_MAX_UV		3300000//2850000
48*4882a593Smuzhiyun #define ELAN_I2C_VTG_MIN_UV	1800000
49*4882a593Smuzhiyun #define ELAN_I2C_VTG_MAX_UV	1800000
50*4882a593Smuzhiyun 
51*4882a593Smuzhiyun #define HID_REPORT_MAX_LEN		(67*2)
52*4882a593Smuzhiyun #define NORMAL_REPORT_MAX_LEN	(55)
53*4882a593Smuzhiyun #define HID_CMD_LEN				(37)
54*4882a593Smuzhiyun #define HID_RECV_LEN			(67)
55*4882a593Smuzhiyun 
56*4882a593Smuzhiyun 
57*4882a593Smuzhiyun #define RETRY_TIMES		(3)
58*4882a593Smuzhiyun 
59*4882a593Smuzhiyun #define FINGERS_NUM 10
60*4882a593Smuzhiyun 
61*4882a593Smuzhiyun struct ts_chip_hw_info {
62*4882a593Smuzhiyun 	int intr_gpio;
63*4882a593Smuzhiyun 	int rst_gpio;
64*4882a593Smuzhiyun 	int irq_num;
65*4882a593Smuzhiyun 	uint16_t screen_x;
66*4882a593Smuzhiyun 	uint16_t screen_y;
67*4882a593Smuzhiyun };
68*4882a593Smuzhiyun 
69*4882a593Smuzhiyun struct elan_fw_info {
70*4882a593Smuzhiyun 	int fw_ver;
71*4882a593Smuzhiyun 	int fw_id;
72*4882a593Smuzhiyun 	int fw_bcv;
73*4882a593Smuzhiyun 	int fw_bcl;
74*4882a593Smuzhiyun 	int tx; /*tp module y<->tx*/
75*4882a593Smuzhiyun 	int rx; /*tp module x<->rx*/
76*4882a593Smuzhiyun 	int finger_xres;
77*4882a593Smuzhiyun 	int finger_yres;
78*4882a593Smuzhiyun 	int pen_xres;
79*4882a593Smuzhiyun 	int pen_yres;
80*4882a593Smuzhiyun 	int finger_osr;
81*4882a593Smuzhiyun 	int testsolversion;
82*4882a593Smuzhiyun 	int testversion;
83*4882a593Smuzhiyun 	int solutionversion;
84*4882a593Smuzhiyun 	int whck_ver;
85*4882a593Smuzhiyun };
86*4882a593Smuzhiyun 
87*4882a593Smuzhiyun struct elan_update_fw_info {
88*4882a593Smuzhiyun 	char *FwName;
89*4882a593Smuzhiyun 	char fw_local_path[50];
90*4882a593Smuzhiyun 	const u8 *FwData;
91*4882a593Smuzhiyun 	const struct firmware *p_fw_entry;
92*4882a593Smuzhiyun 	int PageNum;
93*4882a593Smuzhiyun 	int FwSize;
94*4882a593Smuzhiyun 	int PageSize;
95*4882a593Smuzhiyun 	u16 remark_id;
96*4882a593Smuzhiyun };
97*4882a593Smuzhiyun 
98*4882a593Smuzhiyun struct elan_i2c_operation{
99*4882a593Smuzhiyun 	int (*send)(const uint8_t *, int len);
100*4882a593Smuzhiyun 	int (*recv)(uint8_t *, int len);
101*4882a593Smuzhiyun 	int (*poll)(void);
102*4882a593Smuzhiyun };
103*4882a593Smuzhiyun 
104*4882a593Smuzhiyun struct elan_packet_struct {
105*4882a593Smuzhiyun 	int finger_num;
106*4882a593Smuzhiyun 	int finger_id;
107*4882a593Smuzhiyun 	int pen_id;
108*4882a593Smuzhiyun 	int vaild_size;
109*4882a593Smuzhiyun };
110*4882a593Smuzhiyun 
111*4882a593Smuzhiyun 
112*4882a593Smuzhiyun struct elan_finger_struct {
113*4882a593Smuzhiyun 	int fid;				/*finger identify*/
114*4882a593Smuzhiyun 	int fsupport_num;		/*support finger num*/
115*4882a593Smuzhiyun 	int fbuf_valid_size;	/*hid: 67/67*2, normal:8/18/35/55*/
116*4882a593Smuzhiyun 	int fvalid_num;			/*current buf support finger num*/
117*4882a593Smuzhiyun 	int fbits;				/*current finger is contact or not*/
118*4882a593Smuzhiyun 	int fbutton_value;		/*mutual button*/
119*4882a593Smuzhiyun 	int freport_idx;		/*parse coordinate start byte*/
120*4882a593Smuzhiyun 	int fshift_byte;		/*parse shift byte*/
121*4882a593Smuzhiyun };
122*4882a593Smuzhiyun 
123*4882a593Smuzhiyun struct elan_stylus_struct {
124*4882a593Smuzhiyun 	int pid;				/*stylus identify*/
125*4882a593Smuzhiyun 	int pbuf_valid_size;	/*stylus buf size*/
126*4882a593Smuzhiyun 	int pbutton_value;		/*mutual button,may not use*/
127*4882a593Smuzhiyun 	int preport_idx;		/*parse coordinate start byte*/
128*4882a593Smuzhiyun 	int shitf_byte;			/*may not use*/
129*4882a593Smuzhiyun //	int tip_status;			/**/
130*4882a593Smuzhiyun 	int tip_status;			/*contact status*/
131*4882a593Smuzhiyun 	int inrange_status;		/*hover status*/
132*4882a593Smuzhiyun 	int key;					/*key status*/
133*4882a593Smuzhiyun 	int	eraser;				/*eraser*/
134*4882a593Smuzhiyun 	int inver;				/*inver*/
135*4882a593Smuzhiyun 	int	barrel;				/*barrel*/
136*4882a593Smuzhiyun 	int barrel_tip;			/*barrel+tip*/
137*4882a593Smuzhiyun };
138*4882a593Smuzhiyun 
139*4882a593Smuzhiyun struct elan_report_struct {
140*4882a593Smuzhiyun 	struct elan_finger_struct finger;
141*4882a593Smuzhiyun 	struct elan_stylus_struct stylus;
142*4882a593Smuzhiyun //	uint8_t *buf;			/*elan report recv buf*/
143*4882a593Smuzhiyun //	int finger_id;			/*finger identify*/
144*4882a593Smuzhiyun //	int pen_id;				/*stylu identify*/
145*4882a593Smuzhiyun //	int buf_valid_size;		/*hid: 67/67*2, normal:8/18/35/55*/
146*4882a593Smuzhiyun //	int finger_num;			/*support finger num*/
147*4882a593Smuzhiyun //	int valid_finger_num;	/*current buf support finger num*/
148*4882a593Smuzhiyun //	int button_byte;		/*muxtual button*/
149*4882a593Smuzhiyun //	int report_idx;			/*coordinate calculate start index*/
150*4882a593Smuzhiyun //	int shift_byte;			/*calculate shift*/
151*4882a593Smuzhiyun //	int fbits;				/*current finger/pen index is valid or not*/
152*4882a593Smuzhiyun 	int tool_type;			/**/
153*4882a593Smuzhiyun };
154*4882a593Smuzhiyun 
155*4882a593Smuzhiyun 
156*4882a593Smuzhiyun struct elan_ts_data {
157*4882a593Smuzhiyun 	struct ts_chip_hw_info hw_info; /*elan touch need gpio*/
158*4882a593Smuzhiyun 	struct i2c_client *client;
159*4882a593Smuzhiyun 	struct elan_fw_info fw_info;
160*4882a593Smuzhiyun 	struct elan_update_fw_info update_info;
161*4882a593Smuzhiyun 	struct elan_i2c_operation *ops;
162*4882a593Smuzhiyun 	struct elan_report_struct report;
163*4882a593Smuzhiyun #ifdef CONFIG_HAS_EARLYSUSPEND
164*4882a593Smuzhiyun 	struct early_suspend early_suspend;	/*for early suspend*/
165*4882a593Smuzhiyun #endif
166*4882a593Smuzhiyun 
167*4882a593Smuzhiyun 	struct regulator *vdd;			/*tp vdd*/
168*4882a593Smuzhiyun 	struct regulator *vcc_i2c;		/*tp vio*/
169*4882a593Smuzhiyun 	bool power_enabled;				/*power setting flag*/
170*4882a593Smuzhiyun 
171*4882a593Smuzhiyun 	int power_lock;					/*for i2ctransfer on power off flage*/
172*4882a593Smuzhiyun 	int recover;					/*fw incomplete flag*/
173*4882a593Smuzhiyun 	struct miscdevice firmware;		/*for misc dev*/
174*4882a593Smuzhiyun 	struct proc_dir_entry *p;		/*creat proc dev*/
175*4882a593Smuzhiyun 
176*4882a593Smuzhiyun 	struct input_dev *finger_idev;	/*for register finger input device*/
177*4882a593Smuzhiyun 	struct input_dev *pen_idev;		/*for register pen inpur device*/
178*4882a593Smuzhiyun 
179*4882a593Smuzhiyun #if defined(CONFIG_FB)
180*4882a593Smuzhiyun 	struct notifier_block fb_notif;	/*FB callback*/
181*4882a593Smuzhiyun #endif
182*4882a593Smuzhiyun 
183*4882a593Smuzhiyun 	int chip_type;					/*chip protocol */
184*4882a593Smuzhiyun 	int report_type;				/*report protocol*/
185*4882a593Smuzhiyun 	int fw_store_type;				/*fw stroe*/
186*4882a593Smuzhiyun 
187*4882a593Smuzhiyun 
188*4882a593Smuzhiyun 	struct workqueue_struct *init_elan_ic_wq; /*for ic initial*/
189*4882a593Smuzhiyun 	struct delayed_work init_work;
190*4882a593Smuzhiyun 
191*4882a593Smuzhiyun 	struct workqueue_struct *elan_wq;	/*for irq handler*/
192*4882a593Smuzhiyun 	struct work_struct ts_work;
193*4882a593Smuzhiyun 	uint8_t level;
194*4882a593Smuzhiyun 
195*4882a593Smuzhiyun 	int int_val;					/*for user space*/
196*4882a593Smuzhiyun 	int	user_handle_irq;			/*for switch user or kernel handle irq*/
197*4882a593Smuzhiyun 	wait_queue_head_t elan_userqueue; /*wait queue for user space read data*/
198*4882a593Smuzhiyun 	int irq_lock_flag;				/*irq enable/disable flage, 1=>irq has been disable, 0=>has been enable*/
199*4882a593Smuzhiyun 	struct mutex irq_mutex;			/* Guards against concurrent access to the irq_lock_flag*/
200*4882a593Smuzhiyun };
201*4882a593Smuzhiyun 
202*4882a593Smuzhiyun 
203*4882a593Smuzhiyun struct vendor_map
204*4882a593Smuzhiyun {
205*4882a593Smuzhiyun 	int vendor_id;		//lcm ID
206*4882a593Smuzhiyun 	char vendor_name[30]; //lcm vendor name
207*4882a593Smuzhiyun 	uint8_t* fw_array;  // lcm_vendor_fw
208*4882a593Smuzhiyun 	int fw_size;
209*4882a593Smuzhiyun 	int fw_id;
210*4882a593Smuzhiyun };
211*4882a593Smuzhiyun 
212*4882a593Smuzhiyun 
213*4882a593Smuzhiyun 
214*4882a593Smuzhiyun enum elan_get_vendor_fw_type {
215*4882a593Smuzhiyun 	FROM_SYS_ETC_FIRMWARE,
216*4882a593Smuzhiyun 	FROM_SDCARD_FIRMWARE,
217*4882a593Smuzhiyun 	FROM_DRIVER_FIRMWARE,
218*4882a593Smuzhiyun };
219*4882a593Smuzhiyun 
220*4882a593Smuzhiyun enum elan_report_protocol_type {
221*4882a593Smuzhiyun 	PROTOCOL_TYPE_A	= 0x00,
222*4882a593Smuzhiyun 	PROTOCOL_TYPE_B	= 0x01,
223*4882a593Smuzhiyun };
224*4882a593Smuzhiyun 
225*4882a593Smuzhiyun enum elan_chip_protocol_type {
226*4882a593Smuzhiyun 	HID_TYPE_PROTOCOL		= 0x01,
227*4882a593Smuzhiyun 	NORMAL_TYPE_PROTOCOL	= 0x00,
228*4882a593Smuzhiyun };
229*4882a593Smuzhiyun 
230*4882a593Smuzhiyun enum elan_fw_status {
231*4882a593Smuzhiyun 	HID_FW_NORMAL_MODE		= 0x20,
232*4882a593Smuzhiyun 	HID_FW_RECOVERY_MODE	= 0x56,
233*4882a593Smuzhiyun 	NORMAL_FW_NORMAL_MODE	= 0x55,
234*4882a593Smuzhiyun 	NORMAL_FW_RECOVERY_MODE	= 0x80,
235*4882a593Smuzhiyun };
236*4882a593Smuzhiyun 
237*4882a593Smuzhiyun enum fw_update_type {
238*4882a593Smuzhiyun 	FORCED_UPGRADE	= 0x01,
239*4882a593Smuzhiyun 	COMPARE_UPGRADE	= 0x02,
240*4882a593Smuzhiyun 	UNKNOW_TYPE		= -1,
241*4882a593Smuzhiyun };
242*4882a593Smuzhiyun 
243*4882a593Smuzhiyun enum packet_head_type {
244*4882a593Smuzhiyun 	CMD_S_PKT	= 0x52,
245*4882a593Smuzhiyun 	CMD_R_PKT	= 0x53,
246*4882a593Smuzhiyun 	CMD_W_PKT	= 0x54,
247*4882a593Smuzhiyun 	REG_R_PKT	= 0x5B,
248*4882a593Smuzhiyun 	REG_S_PKT	= 0x9B,
249*4882a593Smuzhiyun };
250*4882a593Smuzhiyun 
251*4882a593Smuzhiyun 
252*4882a593Smuzhiyun enum report_packet_size {
253*4882a593Smuzhiyun 	NOR2_SIZE	=	8,
254*4882a593Smuzhiyun 	NOR5_SIZE	=	18,
255*4882a593Smuzhiyun 	NOR10_SIZE	=	35,
256*4882a593Smuzhiyun 	HID5_SIZE	=	67,
257*4882a593Smuzhiyun 	HID10_SIZE	=	67*2,
258*4882a593Smuzhiyun };
259*4882a593Smuzhiyun 
260*4882a593Smuzhiyun enum report_packet_id {
261*4882a593Smuzhiyun 	NOR2_FID	=	0x5A,
262*4882a593Smuzhiyun 	NOR5_FID	=	0x5D,
263*4882a593Smuzhiyun 	NOR10_FID	=	0x62,
264*4882a593Smuzhiyun 	HID_FID		=	0x01,
265*4882a593Smuzhiyun 	HID_PID		=	0x07,
266*4882a593Smuzhiyun };
267*4882a593Smuzhiyun 
268*4882a593Smuzhiyun enum report_tool_type {
269*4882a593Smuzhiyun 	ELAN_FINGER	=	0x01,
270*4882a593Smuzhiyun 	ELAN_PEN	=	0x02,
271*4882a593Smuzhiyun };
272*4882a593Smuzhiyun 
273*4882a593Smuzhiyun enum elan_power_status {
274*4882a593Smuzhiyun 	PWR_STATE_DEEP_SLEEP = 0x00,
275*4882a593Smuzhiyun 	PWR_STATE_NORMAL	 = 0x01,
276*4882a593Smuzhiyun };
277*4882a593Smuzhiyun 
278*4882a593Smuzhiyun 
279*4882a593Smuzhiyun 
280*4882a593Smuzhiyun 
281*4882a593Smuzhiyun 
282*4882a593Smuzhiyun /*************************dev file macro switch********************/
283*4882a593Smuzhiyun #define ELAN_IAP_DEV
284*4882a593Smuzhiyun 
285*4882a593Smuzhiyun #ifdef ELAN_IAP_DEV
286*4882a593Smuzhiyun #define ELAN_IOCTLID	0xD0
287*4882a593Smuzhiyun #define IOCTL_I2C_SLAVE	_IOW(ELAN_IOCTLID,  1, int)
288*4882a593Smuzhiyun #define IOCTL_MAJOR_FW_VER  _IOR(ELAN_IOCTLID, 2, int)
289*4882a593Smuzhiyun #define IOCTL_MINOR_FW_VER  _IOR(ELAN_IOCTLID, 3, int)
290*4882a593Smuzhiyun #define IOCTL_RESET  _IOR(ELAN_IOCTLID, 4, int)
291*4882a593Smuzhiyun #define IOCTL_IAP_MODE_LOCK  _IOR(ELAN_IOCTLID, 5, int)
292*4882a593Smuzhiyun #define IOCTL_CHECK_RECOVERY_MODE  _IOR(ELAN_IOCTLID, 6, int)
293*4882a593Smuzhiyun #define IOCTL_FW_VER  _IOR(ELAN_IOCTLID, 7, int)
294*4882a593Smuzhiyun #define IOCTL_X_RESOLUTION  _IOR(ELAN_IOCTLID, 8, int)
295*4882a593Smuzhiyun #define IOCTL_Y_RESOLUTION  _IOR(ELAN_IOCTLID, 9, int)
296*4882a593Smuzhiyun #define IOCTL_FW_ID  _IOR(ELAN_IOCTLID, 10, int)
297*4882a593Smuzhiyun #define IOCTL_ROUGH_CALIBRATE  _IOR(ELAN_IOCTLID, 11, int)
298*4882a593Smuzhiyun #define IOCTL_IAP_MODE_UNLOCK  _IOR(ELAN_IOCTLID, 12, int)
299*4882a593Smuzhiyun #define IOCTL_I2C_INT  _IOR(ELAN_IOCTLID, 13, int)
300*4882a593Smuzhiyun #define IOCTL_RESUME  _IOR(ELAN_IOCTLID, 14, int)
301*4882a593Smuzhiyun #define IOCTL_POWER_LOCK  _IOR(ELAN_IOCTLID, 15, int)
302*4882a593Smuzhiyun #define IOCTL_POWER_UNLOCK  _IOR(ELAN_IOCTLID, 16, int)
303*4882a593Smuzhiyun #define IOCTL_FW_UPDATE  _IOR(ELAN_IOCTLID, 17, int)
304*4882a593Smuzhiyun #define IOCTL_BC_VER  _IOR(ELAN_IOCTLID, 18, int)
305*4882a593Smuzhiyun #define IOCTL_2WIREICE  _IOR(ELAN_IOCTLID, 19, int)
306*4882a593Smuzhiyun #define IOCTL_VIAROM	_IOR(ELAN_IOCTLID, 20, int)
307*4882a593Smuzhiyun #define IOCTL_VIAROM_CHECKSUM	_IOW(ELAN_IOCTLID, 21, unsigned long)
308*4882a593Smuzhiyun #define IOCTL_GET_UPDATE_PROGREE	_IOR(CUSTOMER_IOCTLID,  2, int)
309*4882a593Smuzhiyun #define IOCTL_USER_HANDLE_IRQ	_IOR(ELAN_IOCTLID, 22, int)
310*4882a593Smuzhiyun #define IOCTL_KERN_HANDLE_IRQ	_IOR(ELAN_IOCTLID, 23, int)
311*4882a593Smuzhiyun #endif
312*4882a593Smuzhiyun 
313*4882a593Smuzhiyun 
314*4882a593Smuzhiyun //define print log
315*4882a593Smuzhiyun //#define LOG_TAG(tag) "[tag]: %s() line: %d "
316*4882a593Smuzhiyun #define TP_DEBUG	0//"dbg"
317*4882a593Smuzhiyun #define TP_WARNING	1
318*4882a593Smuzhiyun #define TP_INFO		2//"info"
319*4882a593Smuzhiyun #define TP_ERR		4//"err"
320*4882a593Smuzhiyun 
321*4882a593Smuzhiyun #define print_log(level, fmt, args...) \
322*4882a593Smuzhiyun do { \
323*4882a593Smuzhiyun 		if (level > TP_WARNING) \
324*4882a593Smuzhiyun 			printk("[elan]:"fmt"\n",##args);\
325*4882a593Smuzhiyun } while(0)
326*4882a593Smuzhiyun 
327*4882a593Smuzhiyun 
328*4882a593Smuzhiyun //extern function
329*4882a593Smuzhiyun extern void elan_check_update_flage(struct elan_ts_data *ts);
330*4882a593Smuzhiyun extern int elan__fw_packet_handler(struct i2c_client *client);
331*4882a593Smuzhiyun extern int elan__hello_packet_handler(struct i2c_client *client, int chip_type);
332*4882a593Smuzhiyun extern void elan_ts_hw_reset(struct ts_chip_hw_info *hw_info);
333*4882a593Smuzhiyun extern void elan_switch_irq(struct elan_ts_data *ts, int on);
334*4882a593Smuzhiyun extern int elan_ts_calibrate(struct i2c_client *client);
335*4882a593Smuzhiyun extern int elan_FW_Update(struct i2c_client *client);
336*4882a593Smuzhiyun extern int elan_ic_status(struct i2c_client *client);
337*4882a593Smuzhiyun extern int elan_ts_check_calibrate(struct i2c_client *client);
338*4882a593Smuzhiyun extern int elan_sysfs_attri_file(struct elan_ts_data *ts);
339*4882a593Smuzhiyun extern void elan_sysfs_attri_file_remove(struct elan_ts_data *ts);
340*4882a593Smuzhiyun extern int elan_get_vendor_fw(struct elan_ts_data *ts, int type);
341*4882a593Smuzhiyun extern int elan_tp_module_test(struct elan_ts_data *ts);
342*4882a593Smuzhiyun #endif /* _LINUX_ELAN_KTF_H */
343