Merge remote-tracking branch 'origin/upstream/linux-linaro-lsk-v3.10-android+android...
[firefly-linux-kernel-4.4.55.git] / include / linux / ts-auto.h
1 #ifndef __TS_AUTO_H\r
2 #define __TS_AUTO_H\r
3 #include <linux/miscdevice.h>\r
4 \r
5 #define TS_ENABLE       1\r
6 #define TS_DISABLE      0\r
7 #define TS_UNKNOW_DATA  -1\r
8 #define TS_MAX_POINT    20\r
9 #define TS_MAX_VER_LEN  64\r
10 \r
11 struct ts_private_data;\r
12 \r
13 enum ts_bus_type{\r
14         TS_BUS_TYPE_INVALID = 0,\r
15                 \r
16         TS_BUS_TYPE_I2C,\r
17         TS_BUS_TYPE_SPI,\r
18         TS_BUS_TYPE_SERIAL,\r
19         \r
20         TS_BUS_TYPE_NUM_ID,\r
21 };\r
22 \r
23 enum ts_id {\r
24         TS_ID_INVALID = 0,\r
25                 \r
26         TS_ID_FT5306,\r
27         TS_ID_CT360,\r
28         TS_ID_GT8110,\r
29         TS_ID_GT828,\r
30         TS_ID_GT8005,\r
31         \r
32         TS_NUM_ID,\r
33 };\r
34 \r
35 struct point_data {\r
36         int status;\r
37         int id;\r
38         int x;\r
39         int y;\r
40         int press;\r
41         int last_status;\r
42 };\r
43 \r
44 struct ts_event {\r
45   int  touch_point;\r
46   struct point_data point[TS_MAX_POINT];\r
47 };\r
48 \r
49 \r
50 /* Platform data for the auto touchscreen */\r
51 struct ts_platform_data {\r
52         unsigned char  slave_addr;\r
53         int irq;\r
54         int power_pin;\r
55         int reset_pin;\r
56 \r
57         int (*init_platform_hw)(void);  \r
58 };\r
59 \r
60 struct ts_max_pixel{\r
61         int max_x;\r
62         int max_y;\r
63 };\r
64 \r
65 struct ts_operate {\r
66         char *name;\r
67         char slave_addr;\r
68         int ts_id;\r
69         int bus_type;\r
70         struct ts_max_pixel pixel;\r
71         int reg_size;\r
72         int id_reg;\r
73         int id_data;\r
74         int version_reg;\r
75         char *version_data;\r
76         int version_len;        //<64\r
77         int read_reg;\r
78         int read_len;\r
79         int trig;       //intterupt trigger\r
80         int max_point;\r
81         int xy_swap;\r
82         int x_revert;\r
83         int y_revert;\r
84         int range[2];\r
85         int irq_enable;         //if irq_enable=1 then use irq else use polling  \r
86         int poll_delay_ms;      //polling\r
87         int gpio_level_no_int;\r
88         int (*active)(struct ts_private_data *ts, int enable);\r
89         int (*init)(struct ts_private_data *ts);        \r
90         int (*check_irq)(struct ts_private_data *ts);\r
91         int (*report)(struct ts_private_data *ts);\r
92         int (*firmware)(struct ts_private_data *ts);\r
93         int (*suspend)(struct ts_private_data *ts);\r
94         int (*resume)(struct ts_private_data *ts);      \r
95         struct miscdevice *misc_dev;\r
96 };\r
97 \r
98 \r
99 struct ts_private_data {\r
100         struct mutex io_lock;\r
101         struct device *dev;\r
102         int (*read_dev)(struct ts_private_data *ts, unsigned short reg,\r
103                         int bytes, void *dest, int reg_size);\r
104         int (*write_dev)(struct ts_private_data *ts, unsigned short reg,\r
105                          int bytes, void *src, int reg_size);\r
106         void *control_data;\r
107         int irq;\r
108         //struct i2c_client *client;    \r
109         struct input_dev *input_dev;\r
110         struct ts_event event;\r
111         struct work_struct work;\r
112         struct delayed_work delaywork;  /*report second event*/\r
113         struct delayed_work poll_work;  /*poll at last*/        \r
114         char ts_data[40];               //max support40 bytes data\r
115         struct mutex data_mutex;\r
116         struct mutex ts_lock;\r
117         int devid;\r
118         struct i2c_device_id *i2c_id;\r
119         struct ts_platform_data *pdata;\r
120         struct ts_operate *ops; \r
121         struct file_operations fops;\r
122         struct miscdevice miscdev;\r
123 #ifdef CONFIG_HAS_EARLYSUSPEND\r
124         struct  early_suspend early_suspend;\r
125 #endif\r
126 };\r
127 \r
128 extern int ts_device_init(struct ts_private_data *ts, int type, int irq);\r
129 extern void ts_device_exit(struct ts_private_data *ts);\r
130 extern int ts_register_slave(struct ts_private_data *ts,\r
131                         struct ts_platform_data *slave_pdata,\r
132                         struct ts_operate *(*get_ts_ops)(void));\r
133 extern int ts_unregister_slave(struct ts_private_data *ts,\r
134                         struct ts_platform_data *slave_pdata,\r
135                         struct ts_operate *(*get_ts_ops)(void));\r
136 extern int ts_reg_read(struct ts_private_data *ts, unsigned short reg);\r
137 extern int ts_reg_write(struct ts_private_data *ts, unsigned short reg,\r
138                      unsigned short val);\r
139 extern int ts_bulk_read(struct ts_private_data *ts, unsigned short reg,\r
140                      int count, unsigned char *buf);\r
141 extern int ts_bulk_read_normal(struct ts_private_data *ts, int count, unsigned char *buf, int rate);\r
142 extern int ts_bulk_write(struct ts_private_data *ts, unsigned short reg,\r
143                      int count, unsigned char *buf);\r
144 extern int ts_bulk_write_normal(struct ts_private_data *ts, int count, unsigned char *buf, int rate);\r
145 extern int ts_set_bits(struct ts_private_data *ts, unsigned short reg,\r
146                     unsigned short mask, unsigned short val);\r
147 extern int ts_device_suspend(struct ts_private_data *ts);\r
148 \r
149 extern int ts_device_resume(struct ts_private_data *ts);\r
150 \r
151 #endif\r