ct36x: add early suspend && resume
[firefly-linux-kernel-4.4.55.git] / drivers / input / touchscreen / ct36x / ct36x_priv.h
1 #ifndef __CT36X_PRIV__
2 #define __CT36X_PRIV__
3
4 //#include <linux/earlysuspend.h>
5 #include <linux/device.h>
6 #include <linux/kernel.h>
7 #include <linux/module.h>
8 #include <linux/init.h>
9 #include <linux/input.h>
10 #include <linux/i2c.h>
11 #include <linux/delay.h>
12 #include <linux/slab.h>
13 #include <linux/time.h>
14 #include <linux/err.h>
15 #include <linux/io.h>
16 #include <linux/mutex.h>
17 #include <linux/clk.h>
18 #include <linux/interrupt.h>
19 #include <linux/input/mt.h>
20 #include <linux/ct36x.h>
21
22 #include "../tp_suspend.h"
23
24 int flag_ct36x_model;
25
26 int ct36x_dbg_level = 0;
27 module_param_named(dbg_level, ct36x_dbg_level, int, 0644);
28 #if 1
29 #define ct36x_dbg(ts, format, arg...)            \
30         do { \
31                 if (ct36x_dbg_level) { \
32                         dev_printk(KERN_INFO , ts->dev , format , ## arg) ;\
33                 } \
34         } while (0)
35 #else 
36 #define DBG(x...)
37 #endif
38
39
40
41
42 #define CT36X_I2C_RATE  (200 * 1000)
43 struct ct36x_data;
44
45 struct ct36x_ops{
46         int (*init)(struct ct36x_data *);
47         void (*deinit)(struct ct36x_data *);
48         int (*suspend)(struct ct36x_data *);
49         int (*resume)(struct ct36x_data *);
50         void (*report)(struct ct36x_data *);
51 };
52 struct ct36x_data{
53         int irq;
54         int model;
55         int x_max;
56         int y_max;
57         int orientation[4];
58         int point_num;
59
60         struct ct36x_gpio rst_io;
61         struct ct36x_gpio irq_io;
62
63         struct device *dev;
64         struct i2c_client *client;
65
66         struct      input_dev *input;
67
68         struct  tp_device  tp;
69         struct ct36x_ops *ops;
70         void *priv;
71 };
72
73 static int i2c_master_normal_send(const struct i2c_client *client, const char *buf, int count, int scl_rate)
74 {
75         int ret;
76         struct i2c_adapter *adap=client->adapter;
77         struct i2c_msg msg;
78
79         msg.addr = client->addr;
80         msg.flags = client->flags;
81         msg.len = count;
82         msg.buf = (char *)buf;
83         msg.scl_rate = scl_rate;
84         //msg.udelay = client->udelay;
85
86         ret = i2c_transfer(adap, &msg, 1);
87         return (ret == 1) ? count : ret;
88 }
89
90 static int i2c_master_normal_recv(const struct i2c_client *client, char *buf, int count, int scl_rate)
91 {
92         struct i2c_adapter *adap=client->adapter;
93         struct i2c_msg msg;
94         int ret;
95
96         msg.addr = client->addr;
97         msg.flags = client->flags | I2C_M_RD;
98         msg.len = count;
99         msg.buf = (char *)buf;
100         msg.scl_rate = scl_rate;
101         //msg.udelay = client->udelay;
102
103         ret = i2c_transfer(adap, &msg, 1);
104
105         return (ret == 1) ? count : ret;
106 }
107 EXPORT_SYMBOL(i2c_master_normal_recv);
108
109 static inline int ct36x_read(struct ct36x_data *ts, char *buf, int len)
110 {
111         return i2c_master_normal_recv(ts->client, buf, len, CT36X_I2C_RATE);
112 }
113
114 static inline int ct36x_write(struct ct36x_data *ts, char *buf, int len)
115 {
116         return i2c_master_normal_send(ts->client, buf, len, CT36X_I2C_RATE);
117 }
118
119 static inline int ct36x_update_read(struct ct36x_data *ts, unsigned short addr, char *buf, int len)
120 {
121         int ret;
122         unsigned short bak = ts->client->addr;
123
124         ts->client->addr = addr;
125         ret = ct36x_read(ts, buf, len);
126         ts->client->addr = bak;
127
128         return ret;
129 }
130
131 static inline int ct36x_update_write(struct ct36x_data *ts, unsigned short addr, char *buf, int len)
132 {
133         int ret;
134         unsigned short bak = ts->client->addr;
135
136         ts->client->addr = addr;
137         ret = ct36x_write(ts, buf, len);
138         ts->client->addr = bak;
139
140         return ret;
141 }
142 int ct36x_chip_set_idle(struct ct36x_data *ts);
143 int ct36x_chip_go_sleep(struct ct36x_data *ts);
144 int ct36x_chip_get_binchksum(void);
145 int ct36x_chip_get_fwchksum(struct ct36x_data *ts);
146 int ct36x_chip_go_bootloader(struct ct36x_data *ts);
147 int ct36x_chip_get_fwchksum(struct ct36x_data *ts);
148 int ct36x_chip_get_ver(struct ct36x_data *ts);
149
150 #endif