1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */ 2*4882a593Smuzhiyun #ifndef _TS_CORE_H_ 3*4882a593Smuzhiyun #define _TS_CORE_H_ 4*4882a593Smuzhiyun 5*4882a593Smuzhiyun #include <linux/gpio.h> 6*4882a593Smuzhiyun #ifdef CONFIG_HAS_EARLYSUSPEND 7*4882a593Smuzhiyun #include <linux/earlysuspend.h> 8*4882a593Smuzhiyun #endif 9*4882a593Smuzhiyun #include "../tp_suspend.h" 10*4882a593Smuzhiyun 11*4882a593Smuzhiyun 12*4882a593Smuzhiyun /*vtl touch IC define*/ 13*4882a593Smuzhiyun #define CT36X 0x01//(CT36X:ct362,ct363,ct365) 14*4882a593Smuzhiyun #define CT360 0x02//(CT360:ct360) 15*4882a593Smuzhiyun 16*4882a593Smuzhiyun /*xy data protocol*/ 17*4882a593Smuzhiyun #define OLD_PROTOCOL 0x01 18*4882a593Smuzhiyun #define NEW_PROTOCOL 0x02 19*4882a593Smuzhiyun 20*4882a593Smuzhiyun 21*4882a593Smuzhiyun /***********************vtl ts driver config ******************************************/ 22*4882a593Smuzhiyun 23*4882a593Smuzhiyun /*vtl chip ID*/ 24*4882a593Smuzhiyun #define CHIP_ID CT36X//CT360// 25*4882a593Smuzhiyun 26*4882a593Smuzhiyun #define XY_DATA_PROTOCOL NEW_PROTOCOL//OLD_PROTOCOL// 27*4882a593Smuzhiyun 28*4882a593Smuzhiyun #define TS_I2C_SPEED 400000 //for rockchip 29*4882a593Smuzhiyun /* 30*4882a593Smuzhiyun #if(TB1_USE_F402) 31*4882a593Smuzhiyun #define XY_SWAP_ENABLE 1 32*4882a593Smuzhiyun #else 33*4882a593Smuzhiyun #define XY_SWAP_ENABLE 0 34*4882a593Smuzhiyun #endif 35*4882a593Smuzhiyun 36*4882a593Smuzhiyun #define X_REVERSE_ENABLE 0 37*4882a593Smuzhiyun 38*4882a593Smuzhiyun #if(TB1_USE_F402) 39*4882a593Smuzhiyun #define Y_REVERSE_ENABLE 0 40*4882a593Smuzhiyun #else 41*4882a593Smuzhiyun #define Y_REVERSE_ENABLE 1 42*4882a593Smuzhiyun #endif 43*4882a593Smuzhiyun */ 44*4882a593Smuzhiyun 45*4882a593Smuzhiyun #define CHIP_UPDATE_ENABLE 1 46*4882a593Smuzhiyun 47*4882a593Smuzhiyun #define DEBUG_ENABLE 0 48*4882a593Smuzhiyun 49*4882a593Smuzhiyun 50*4882a593Smuzhiyun /***********************vtl ts driver config end******************************************/ 51*4882a593Smuzhiyun 52*4882a593Smuzhiyun 53*4882a593Smuzhiyun 54*4882a593Smuzhiyun 55*4882a593Smuzhiyun 56*4882a593Smuzhiyun 57*4882a593Smuzhiyun 58*4882a593Smuzhiyun 59*4882a593Smuzhiyun 60*4882a593Smuzhiyun 61*4882a593Smuzhiyun 62*4882a593Smuzhiyun 63*4882a593Smuzhiyun 64*4882a593Smuzhiyun 65*4882a593Smuzhiyun 66*4882a593Smuzhiyun 67*4882a593Smuzhiyun 68*4882a593Smuzhiyun 69*4882a593Smuzhiyun 70*4882a593Smuzhiyun 71*4882a593Smuzhiyun 72*4882a593Smuzhiyun 73*4882a593Smuzhiyun 74*4882a593Smuzhiyun 75*4882a593Smuzhiyun 76*4882a593Smuzhiyun 77*4882a593Smuzhiyun 78*4882a593Smuzhiyun 79*4882a593Smuzhiyun 80*4882a593Smuzhiyun 81*4882a593Smuzhiyun /*vtl ts driver name*/ 82*4882a593Smuzhiyun #define DRIVER_NAME "vtl_ts" 83*4882a593Smuzhiyun //#define DEBUG_ENABLE 1 84*4882a593Smuzhiyun #if(DEBUG_ENABLE) 85*4882a593Smuzhiyun #define DEBUG() printk("___%s___\n",__func__); 86*4882a593Smuzhiyun //#define XY_DEBUG(id,status,x,y) printk("id = %d,status = %d,X = %d,Y = %d\n",id,status,x,y); 87*4882a593Smuzhiyun #else 88*4882a593Smuzhiyun #define DEBUG() 89*4882a593Smuzhiyun //#define XY_DEBUG(id,status,x,y) 90*4882a593Smuzhiyun #endif 91*4882a593Smuzhiyun 92*4882a593Smuzhiyun /*TOUCH_POINT_NUM define*/ 93*4882a593Smuzhiyun #if(CHIP_ID == CT360) 94*4882a593Smuzhiyun #define TOUCH_POINT_NUM 5 95*4882a593Smuzhiyun #elif(CHIP_ID == CT36X) 96*4882a593Smuzhiyun #define TOUCH_POINT_NUM 10 97*4882a593Smuzhiyun #endif 98*4882a593Smuzhiyun 99*4882a593Smuzhiyun /*priate define and declare*/ 100*4882a593Smuzhiyun #if(CHIP_ID == CT360) 101*4882a593Smuzhiyun struct xy_data { 102*4882a593Smuzhiyun #if(XY_DATA_PROTOCOL == OLD_PROTOCOL) 103*4882a593Smuzhiyun unsigned char status : 4; // Action information, 1: Down; 2: Move; 3: Up 104*4882a593Smuzhiyun unsigned char id : 4; // ID information, from 1 to CFG_MAX_POINT_NUM 105*4882a593Smuzhiyun #endif 106*4882a593Smuzhiyun unsigned char xhi; // X coordinate Hi 107*4882a593Smuzhiyun unsigned char yhi; // Y coordinate Hi 108*4882a593Smuzhiyun unsigned char ylo : 4; // Y coordinate Lo 109*4882a593Smuzhiyun unsigned char xlo : 4; // X coordinate Lo 110*4882a593Smuzhiyun #if(XY_DATA_PROTOCOL == NEW_PROTOCOL) 111*4882a593Smuzhiyun unsigned char status : 4; // Action information, 1: Down; 2: Move; 3: Up 112*4882a593Smuzhiyun unsigned char id : 4; // ID information, from 1 to CFG_MAX_POINT_NUM 113*4882a593Smuzhiyun #endif 114*4882a593Smuzhiyun }; 115*4882a593Smuzhiyun #else 116*4882a593Smuzhiyun struct xy_data { 117*4882a593Smuzhiyun #if(XY_DATA_PROTOCOL == OLD_PROTOCOL) 118*4882a593Smuzhiyun unsigned char status : 3; // Action information, 1: Down; 2: Move; 3: Up 119*4882a593Smuzhiyun unsigned char id : 5; // ID information, from 1 to CFG_MAX_POINT_NUM 120*4882a593Smuzhiyun #endif 121*4882a593Smuzhiyun unsigned char xhi; // X coordinate Hi 122*4882a593Smuzhiyun unsigned char yhi; // Y coordinate Hi 123*4882a593Smuzhiyun unsigned char ylo : 4; // Y coordinate Lo 124*4882a593Smuzhiyun unsigned char xlo : 4; // X coordinate Lo 125*4882a593Smuzhiyun #if(XY_DATA_PROTOCOL == NEW_PROTOCOL) 126*4882a593Smuzhiyun unsigned char status : 3; // Action information, 1: Down; 2: Move; 3: Up 127*4882a593Smuzhiyun unsigned char id : 5; // ID information, from 1 to CFG_MAX_POINT_NUM 128*4882a593Smuzhiyun #endif 129*4882a593Smuzhiyun unsigned char area; // Touch area 130*4882a593Smuzhiyun unsigned char pressure; // Touch Pressure 131*4882a593Smuzhiyun }; 132*4882a593Smuzhiyun #endif 133*4882a593Smuzhiyun 134*4882a593Smuzhiyun 135*4882a593Smuzhiyun union ts_xy_data { 136*4882a593Smuzhiyun struct xy_data point[TOUCH_POINT_NUM]; 137*4882a593Smuzhiyun unsigned char buf[TOUCH_POINT_NUM * sizeof(struct xy_data)]; 138*4882a593Smuzhiyun }; 139*4882a593Smuzhiyun 140*4882a593Smuzhiyun 141*4882a593Smuzhiyun struct ts_driver{ 142*4882a593Smuzhiyun 143*4882a593Smuzhiyun struct i2c_client *client; 144*4882a593Smuzhiyun 145*4882a593Smuzhiyun /* input devices */ 146*4882a593Smuzhiyun struct input_dev *input_dev; 147*4882a593Smuzhiyun 148*4882a593Smuzhiyun struct proc_dir_entry *proc_entry; 149*4882a593Smuzhiyun 150*4882a593Smuzhiyun struct task_struct *ts_thread; 151*4882a593Smuzhiyun 152*4882a593Smuzhiyun //#ifdef CONFIG_HAS_EARLYSUSPEND 153*4882a593Smuzhiyun //struct early_suspend early_suspend; 154*4882a593Smuzhiyun //#endif 155*4882a593Smuzhiyun }; 156*4882a593Smuzhiyun 157*4882a593Smuzhiyun struct ts_config_info{ 158*4882a593Smuzhiyun 159*4882a593Smuzhiyun unsigned int screen_max_x; 160*4882a593Smuzhiyun unsigned int screen_max_y; 161*4882a593Smuzhiyun unsigned int xy_swap; 162*4882a593Smuzhiyun unsigned int x_reverse; 163*4882a593Smuzhiyun unsigned int y_reverse; 164*4882a593Smuzhiyun unsigned int x_mul; 165*4882a593Smuzhiyun unsigned int y_mul; 166*4882a593Smuzhiyun unsigned int bin_ver; 167*4882a593Smuzhiyun unsigned int irq_gpio_number; 168*4882a593Smuzhiyun unsigned int irq_number; 169*4882a593Smuzhiyun unsigned int rst_gpio_number; 170*4882a593Smuzhiyun unsigned char touch_point_number; 171*4882a593Smuzhiyun unsigned char ctp_used; 172*4882a593Smuzhiyun //unsigned char i2c_bus_number; 173*4882a593Smuzhiyun //unsigned char revert_x_flag; 174*4882a593Smuzhiyun //unsigned char revert_y_flag; 175*4882a593Smuzhiyun //unsigned char exchange_x_y_flag; 176*4882a593Smuzhiyun }; 177*4882a593Smuzhiyun 178*4882a593Smuzhiyun struct ts_info{ 179*4882a593Smuzhiyun 180*4882a593Smuzhiyun struct ts_driver *driver; 181*4882a593Smuzhiyun struct ts_config_info config_info; 182*4882a593Smuzhiyun union ts_xy_data xy_data; 183*4882a593Smuzhiyun unsigned char debug; 184*4882a593Smuzhiyun struct tp_device tp; 185*4882a593Smuzhiyun }; 186*4882a593Smuzhiyun 187*4882a593Smuzhiyun 188*4882a593Smuzhiyun //extern struct ts_info *pg_ts; 189*4882a593Smuzhiyun extern struct ts_info * vtl_ts_get_object(void); 190*4882a593Smuzhiyun extern void vtl_ts_hw_reset(void); 191*4882a593Smuzhiyun 192*4882a593Smuzhiyun #endif 193*4882a593Smuzhiyun 194