input: touch: maxim_sti: Update to version 1.4.3, v29
[linux-2.6.git] / include / linux / maxim_sti.h
1 /* drivers/input/touchscreen/maxim_sti.c
2  *
3  * Maxim SmartTouch Imager Touchscreen Driver
4  *
5  * Copyright (c)2013 Maxim Integrated Products, Inc.
6  * Copyright (C) 2013, NVIDIA Corporation.  All Rights Reserved.
7  *
8  * This software is licensed under the terms of the GNU General Public
9  * License version 2, as published by the Free Software Foundation, and
10  * may be copied, distributed, and modified under those terms.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15  * GNU General Public License for more details.
16  *
17  */
18
19 #ifndef __MAXIM_STI_H__
20 #define __MAXIM_STI_H__
21
22 #ifdef __KERNEL__
23 #include <net/genetlink.h>
24 #include <net/sock.h>
25 #else
26 #include <stdlib.h>
27 #include "genetlink.h"
28 #endif
29
30 #define DRIVER_VERSION  "1.4.3"
31 #define DRIVER_RELEASE  "September 27, 2013"
32
33 /****************************************************************************\
34 * Netlink: common kernel/user space macros                                   *
35 \****************************************************************************/
36
37 #define NL_BUF_SIZE  8192
38
39 #define NL_ATTR_FIRST(nptr) \
40         ((struct nlattr *)((void *)nptr + NLMSG_HDRLEN + GENL_HDRLEN))
41 #define NL_ATTR_LAST(nptr) \
42         ((struct nlattr *)((void *)nptr + \
43                         NLMSG_ALIGN(((struct nlmsghdr *)nptr)->nlmsg_len)))
44 #define NL_SIZE(nptr)   NLMSG_ALIGN(((struct nlmsghdr *)nptr)->nlmsg_len)
45 #define NL_TYPE(nptr)              (((struct nlmsghdr *)nptr)->nlmsg_type)
46 #define NL_SEQ(nptr)               (((struct nlmsghdr *)nptr)->nlmsg_seq)
47 #define NL_OK(nptr)              (NL_TYPE(nptr) >= NLMSG_MIN_TYPE)
48 #define NL_ATTR_VAL(aptr, type)  ((type *)((void *)aptr + NLA_HDRLEN))
49 #define NL_ATTR_NEXT(aptr) \
50         ((struct nlattr *)((void *)aptr + \
51                         NLA_ALIGN(((struct nlattr *)aptr)->nla_len)))
52 #define GENL_CMP(name1, name2)  strncmp(name1, name2, GENL_NAMSIZ)
53 #define GENL_COPY(name1, name2) strncpy(name1, name2, GENL_NAMSIZ)
54 #define GENL_CHK(name)          (strlen(name) > (GENL_NAMSIZ - 1))
55 #define MSG_TYPE(nptr)          NL_ATTR_FIRST(nptr)->nla_type
56 #define MSG_PAYLOAD(nptr)       NL_ATTR_VAL(NL_ATTR_FIRST(nptr), void)
57
58 /****************************************************************************\
59 * Netlink: common kernel/user space inline functions                         *
60 \****************************************************************************/
61
62 static inline void
63 nl_msg_init(void *buf, __u16 family_id, __u32 sequence, __u8 dst)
64 {
65         struct nlmsghdr    *nlh = (struct nlmsghdr *)buf;
66         struct genlmsghdr  *genl = (struct genlmsghdr *)(buf + NLMSG_HDRLEN);
67
68         memset(buf, 0, NLMSG_HDRLEN + GENL_HDRLEN);
69         nlh->nlmsg_type = family_id;
70         nlh->nlmsg_flags = NLM_F_REQUEST;
71         nlh->nlmsg_seq = sequence;
72         nlh->nlmsg_len = NLMSG_HDRLEN + GENL_HDRLEN;
73         genl->cmd = dst;
74 }
75
76 static inline void
77 *nl_alloc_attr(void *buf, __u16 type, __u16 len)
78 {
79         struct nlmsghdr  *nlh = (struct nlmsghdr *)buf;
80         struct nlattr    *attr = NL_ATTR_LAST(nlh);
81
82         if ((NL_SIZE(buf) + NLMSG_ALIGN(NLA_HDRLEN + len)) > NL_BUF_SIZE)
83                 return NULL;
84
85         attr->nla_type = type;
86         attr->nla_len = NLA_HDRLEN + len;
87         nlh->nlmsg_len += NLMSG_ALIGN(attr->nla_len);
88         return NL_ATTR_VAL(attr, void);
89 }
90
91 static inline int
92 nl_add_attr(void *buf, __u16 type, void *ptr, __u16 len)
93 {
94         void  *a_ptr;
95
96         a_ptr = nl_alloc_attr(buf, type, len);
97         if (a_ptr == NULL)
98                 return -1;
99         memcpy(a_ptr, ptr, len);
100         return 0;
101 }
102
103 /****************************************************************************\
104 * Netlink: multicast groups enum and name strings                            *
105 \****************************************************************************/
106
107 enum {
108         MC_DRIVER,
109         MC_FUSION,
110         MC_REQUIRED_GROUPS,
111 };
112
113 #define MC_DRIVER_NAME     "driver"
114 #define MC_FUSION_NAME     "fusion"
115
116 #define NL_FAMILY_VERSION  1
117
118 #define TF_FAMILY_NAME     "touch_fusion"
119
120 /****************************************************************************\
121 * Netlink: common parameter and message definitions                          *
122 \****************************************************************************/
123
124 enum {
125         DR_STATE_BASIC,
126         DR_STATE_ACTIVE,
127         DR_STATE_SUSPEND,
128         DR_STATE_RESUME,
129         DR_STATE_FAULT,
130 };
131
132 enum {
133         DR_INPUT_FINGER,
134         DR_INPUT_STYLUS,
135         DR_INPUT_ERASER,
136 };
137
138 enum {
139         DR_IRQ_FALLING_EDGE,
140         DR_IRQ_RISING_EDGE,
141 };
142
143 enum {
144         DR_ADD_MC_GROUP,
145         DR_ECHO_REQUEST,
146         DR_CHIP_READ,
147         DR_CHIP_WRITE,
148         DR_CHIP_RESET,
149         DR_GET_IRQLINE,
150         DR_DELAY,
151         DR_CHIP_ACCESS_METHOD,
152         DR_CONFIG_IRQ,
153         DR_CONFIG_INPUT,
154         DR_CONFIG_WATCHDOG,
155         DR_DECONFIG,
156         DR_INPUT,
157         DR_RESUME_ACK,
158         DR_LEGACY_FWDL,
159         DR_LEGACY_ACCELERATION,
160 };
161
162 struct __attribute__ ((__packed__)) dr_add_mc_group {
163         __u8  number;
164         char  name[GENL_NAMSIZ];
165 };
166
167 struct __attribute__ ((__packed__)) dr_echo_request {
168         __u32  cookie;
169 };
170
171 struct __attribute__ ((__packed__)) dr_chip_read {
172         __u16  address;
173         __u16  length;
174 };
175
176 struct __attribute__ ((__packed__)) dr_chip_write {
177         __u16  address;
178         __u16  length;
179         __u8   data[0];
180 };
181
182 struct __attribute__ ((__packed__)) dr_chip_reset {
183         __u8  state;
184 };
185
186 struct __attribute__ ((__packed__)) dr_delay {
187         __u32  period;
188 };
189
190 struct __attribute__ ((__packed__)) dr_chip_access_method {
191         __u8  method;
192 };
193
194 #define MAX_IRQ_PARAMS  20
195 struct __attribute__ ((__packed__)) dr_config_irq {
196         __u16  irq_param[MAX_IRQ_PARAMS];
197         __u8   irq_params;
198         __u8   irq_method;
199         __u8   irq_edge;
200 };
201
202 struct __attribute__ ((__packed__)) dr_config_input {
203         __u16  x_range;
204         __u16  y_range;
205 };
206
207 struct __attribute__ ((__packed__)) dr_config_watchdog {
208         __u32  pid;
209 };
210
211 struct __attribute__ ((__packed__)) dr_input_event {
212         __u8   id;
213         __u8   tool_type;
214         __u16  x;
215         __u16  y;
216         __u8   z;
217 };
218
219 #define MAX_INPUT_EVENTS  10
220 struct __attribute__ ((__packed__)) dr_input {
221         struct dr_input_event  event[MAX_INPUT_EVENTS];
222         __u8                   events;
223 };
224
225 struct __attribute__ ((__packed__)) dr_legacy_acceleration {
226         __u8  enable;
227 };
228
229 enum {
230         FU_ECHO_RESPONSE,
231         FU_CHIP_READ_RESULT,
232         FU_IRQLINE_STATUS,
233         FU_ASYNC_DATA,
234         FU_RESUME,
235 };
236
237 struct __attribute__ ((__packed__)) fu_echo_response {
238         __u32  cookie;
239         __u8   driver_state;
240 };
241
242 struct __attribute__ ((__packed__)) fu_chip_read_result {
243         __u16  address;
244         __u16  length;
245         __u8   data[0];
246 };
247
248 struct __attribute__ ((__packed__)) fu_irqline_status {
249         __u8  status;
250 };
251
252 struct __attribute__ ((__packed__)) fu_async_data {
253         __u16  address;
254         __u16  length;
255         __u16  status;
256         __u8   data[0];
257 };
258
259 #ifdef __KERNEL__
260 /****************************************************************************\
261 * Kernel platform data structure                                             *
262 \****************************************************************************/
263
264 #define MAXIM_STI_NAME  "maxim_sti"
265
266 struct maxim_sti_pdata {
267         char      *touch_fusion;
268         char      *config_file;
269         char      *fw_name;
270         char      *nl_family;
271         u8        nl_mc_groups;
272         u8        chip_access_method;
273         u8        default_reset_state;
274         u16       tx_buf_size;
275         u16       rx_buf_size;
276         unsigned  gpio_reset;
277         unsigned  gpio_irq;
278         int       (*init)(struct maxim_sti_pdata *pdata, bool init);
279         void      (*reset)(struct maxim_sti_pdata *pdata, int value);
280         int       (*irq)(struct maxim_sti_pdata *pdata);
281 };
282 #endif
283
284 #endif
285