diff options
-rw-r--r-- | drivers/input/Kconfig | 2 | ||||
-rw-r--r-- | drivers/input/Makefile | 2 | ||||
-rw-r--r-- | drivers/input/rmi4/Kconfig | 10 | ||||
-rw-r--r-- | drivers/input/rmi4/Makefile | 2 | ||||
-rw-r--r-- | drivers/input/rmi4/rmi_bus.c | 375 | ||||
-rw-r--r-- | drivers/input/rmi4/rmi_bus.h | 186 | ||||
-rw-r--r-- | drivers/input/rmi4/rmi_driver.c | 1027 | ||||
-rw-r--r-- | drivers/input/rmi4/rmi_driver.h | 103 | ||||
-rw-r--r-- | drivers/input/rmi4/rmi_f01.c | 574 | ||||
-rw-r--r-- | include/linux/rmi.h | 209 | ||||
-rw-r--r-- | include/uapi/linux/input.h | 1 |
11 files changed, 2491 insertions, 0 deletions
diff --git a/drivers/input/Kconfig b/drivers/input/Kconfig index a35532ec00e4..6261874c07c9 100644 --- a/drivers/input/Kconfig +++ b/drivers/input/Kconfig | |||
@@ -201,6 +201,8 @@ source "drivers/input/touchscreen/Kconfig" | |||
201 | 201 | ||
202 | source "drivers/input/misc/Kconfig" | 202 | source "drivers/input/misc/Kconfig" |
203 | 203 | ||
204 | source "drivers/input/rmi4/Kconfig" | ||
205 | |||
204 | endif | 206 | endif |
205 | 207 | ||
206 | menu "Hardware I/O ports" | 208 | menu "Hardware I/O ports" |
diff --git a/drivers/input/Makefile b/drivers/input/Makefile index 0c9302ca9954..595820bbabe9 100644 --- a/drivers/input/Makefile +++ b/drivers/input/Makefile | |||
@@ -26,3 +26,5 @@ obj-$(CONFIG_INPUT_TOUCHSCREEN) += touchscreen/ | |||
26 | obj-$(CONFIG_INPUT_MISC) += misc/ | 26 | obj-$(CONFIG_INPUT_MISC) += misc/ |
27 | 27 | ||
28 | obj-$(CONFIG_INPUT_APMPOWER) += apm-power.o | 28 | obj-$(CONFIG_INPUT_APMPOWER) += apm-power.o |
29 | |||
30 | obj-$(CONFIG_RMI4_CORE) += rmi4/ | ||
diff --git a/drivers/input/rmi4/Kconfig b/drivers/input/rmi4/Kconfig new file mode 100644 index 000000000000..5ea60e338093 --- /dev/null +++ b/drivers/input/rmi4/Kconfig | |||
@@ -0,0 +1,10 @@ | |||
1 | # | ||
2 | # RMI4 configuration | ||
3 | # | ||
4 | config RMI4_CORE | ||
5 | tristate "Synaptics RMI4 bus support" | ||
6 | help | ||
7 | Say Y here if you want to support the Synaptics RMI4 bus. This is | ||
8 | required for all RMI4 device support. | ||
9 | |||
10 | If unsure, say Y. | ||
diff --git a/drivers/input/rmi4/Makefile b/drivers/input/rmi4/Makefile new file mode 100644 index 000000000000..12f219779b74 --- /dev/null +++ b/drivers/input/rmi4/Makefile | |||
@@ -0,0 +1,2 @@ | |||
1 | obj-$(CONFIG_RMI4_CORE) += rmi_core.o | ||
2 | rmi_core-y := rmi_bus.o rmi_driver.o rmi_f01.o | ||
diff --git a/drivers/input/rmi4/rmi_bus.c b/drivers/input/rmi4/rmi_bus.c new file mode 100644 index 000000000000..0a2bd5a0f2b7 --- /dev/null +++ b/drivers/input/rmi4/rmi_bus.c | |||
@@ -0,0 +1,375 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2011-2016 Synaptics Incorporated | ||
3 | * Copyright (c) 2011 Unixphere | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or modify it | ||
6 | * under the terms of the GNU General Public License version 2 as published by | ||
7 | * the Free Software Foundation. | ||
8 | */ | ||
9 | |||
10 | #include <linux/kernel.h> | ||
11 | #include <linux/device.h> | ||
12 | #include <linux/kconfig.h> | ||
13 | #include <linux/list.h> | ||
14 | #include <linux/pm.h> | ||
15 | #include <linux/rmi.h> | ||
16 | #include <linux/slab.h> | ||
17 | #include <linux/types.h> | ||
18 | #include <linux/of.h> | ||
19 | #include "rmi_bus.h" | ||
20 | #include "rmi_driver.h" | ||
21 | |||
22 | static int debug_flags; | ||
23 | module_param(debug_flags, int, 0644); | ||
24 | MODULE_PARM_DESC(debug_flags, "control debugging information"); | ||
25 | |||
26 | void rmi_dbg(int flags, struct device *dev, const char *fmt, ...) | ||
27 | { | ||
28 | struct va_format vaf; | ||
29 | va_list args; | ||
30 | |||
31 | if (flags & debug_flags) { | ||
32 | va_start(args, fmt); | ||
33 | |||
34 | vaf.fmt = fmt; | ||
35 | vaf.va = &args; | ||
36 | |||
37 | dev_printk(KERN_DEBUG, dev, "%pV", &vaf); | ||
38 | |||
39 | va_end(args); | ||
40 | } | ||
41 | } | ||
42 | EXPORT_SYMBOL_GPL(rmi_dbg); | ||
43 | |||
44 | /* | ||
45 | * RMI Physical devices | ||
46 | * | ||
47 | * Physical RMI device consists of several functions serving particular | ||
48 | * purpose. For example F11 is a 2D touch sensor while F01 is a generic | ||
49 | * function present in every RMI device. | ||
50 | */ | ||
51 | |||
52 | static void rmi_release_device(struct device *dev) | ||
53 | { | ||
54 | struct rmi_device *rmi_dev = to_rmi_device(dev); | ||
55 | |||
56 | kfree(rmi_dev); | ||
57 | } | ||
58 | |||
59 | static struct device_type rmi_device_type = { | ||
60 | .name = "rmi4_sensor", | ||
61 | .release = rmi_release_device, | ||
62 | }; | ||
63 | |||
64 | bool rmi_is_physical_device(struct device *dev) | ||
65 | { | ||
66 | return dev->type == &rmi_device_type; | ||
67 | } | ||
68 | |||
69 | /** | ||
70 | * rmi_register_transport_device - register a transport device connection | ||
71 | * on the RMI bus. Transport drivers provide communication from the devices | ||
72 | * on a bus (such as SPI, I2C, and so on) to the RMI4 sensor. | ||
73 | * | ||
74 | * @xport: the transport device to register | ||
75 | */ | ||
76 | int rmi_register_transport_device(struct rmi_transport_dev *xport) | ||
77 | { | ||
78 | static atomic_t transport_device_count = ATOMIC_INIT(0); | ||
79 | struct rmi_device *rmi_dev; | ||
80 | int error; | ||
81 | |||
82 | rmi_dev = kzalloc(sizeof(struct rmi_device), GFP_KERNEL); | ||
83 | if (!rmi_dev) | ||
84 | return -ENOMEM; | ||
85 | |||
86 | device_initialize(&rmi_dev->dev); | ||
87 | |||
88 | rmi_dev->xport = xport; | ||
89 | rmi_dev->number = atomic_inc_return(&transport_device_count) - 1; | ||
90 | |||
91 | dev_set_name(&rmi_dev->dev, "rmi4-%02d", rmi_dev->number); | ||
92 | |||
93 | rmi_dev->dev.bus = &rmi_bus_type; | ||
94 | rmi_dev->dev.type = &rmi_device_type; | ||
95 | |||
96 | xport->rmi_dev = rmi_dev; | ||
97 | |||
98 | error = device_add(&rmi_dev->dev); | ||
99 | if (error) | ||
100 | goto err_put_device; | ||
101 | |||
102 | rmi_dbg(RMI_DEBUG_CORE, xport->dev, | ||
103 | "%s: Registered %s as %s.\n", __func__, | ||
104 | dev_name(rmi_dev->xport->dev), dev_name(&rmi_dev->dev)); | ||
105 | |||
106 | return 0; | ||
107 | |||
108 | err_put_device: | ||
109 | put_device(&rmi_dev->dev); | ||
110 | return error; | ||
111 | } | ||
112 | EXPORT_SYMBOL_GPL(rmi_register_transport_device); | ||
113 | |||
114 | /** | ||
115 | * rmi_unregister_transport_device - unregister a transport device connection | ||
116 | * @xport: the transport driver to unregister | ||
117 | * | ||
118 | */ | ||
119 | void rmi_unregister_transport_device(struct rmi_transport_dev *xport) | ||
120 | { | ||
121 | struct rmi_device *rmi_dev = xport->rmi_dev; | ||
122 | |||
123 | device_del(&rmi_dev->dev); | ||
124 | put_device(&rmi_dev->dev); | ||
125 | } | ||
126 | EXPORT_SYMBOL(rmi_unregister_transport_device); | ||
127 | |||
128 | |||
129 | /* Function specific stuff */ | ||
130 | |||
131 | static void rmi_release_function(struct device *dev) | ||
132 | { | ||
133 | struct rmi_function *fn = to_rmi_function(dev); | ||
134 | |||
135 | kfree(fn); | ||
136 | } | ||
137 | |||
138 | static struct device_type rmi_function_type = { | ||
139 | .name = "rmi4_function", | ||
140 | .release = rmi_release_function, | ||
141 | }; | ||
142 | |||
143 | bool rmi_is_function_device(struct device *dev) | ||
144 | { | ||
145 | return dev->type == &rmi_function_type; | ||
146 | } | ||
147 | |||
148 | static int rmi_function_match(struct device *dev, struct device_driver *drv) | ||
149 | { | ||
150 | struct rmi_function_handler *handler = to_rmi_function_handler(drv); | ||
151 | struct rmi_function *fn = to_rmi_function(dev); | ||
152 | |||
153 | return fn->fd.function_number == handler->func; | ||
154 | } | ||
155 | |||
156 | static int rmi_function_probe(struct device *dev) | ||
157 | { | ||
158 | struct rmi_function *fn = to_rmi_function(dev); | ||
159 | struct rmi_function_handler *handler = | ||
160 | to_rmi_function_handler(dev->driver); | ||
161 | int error; | ||
162 | |||
163 | if (handler->probe) { | ||
164 | error = handler->probe(fn); | ||
165 | return error; | ||
166 | } | ||
167 | |||
168 | return 0; | ||
169 | } | ||
170 | |||
171 | static int rmi_function_remove(struct device *dev) | ||
172 | { | ||
173 | struct rmi_function *fn = to_rmi_function(dev); | ||
174 | struct rmi_function_handler *handler = | ||
175 | to_rmi_function_handler(dev->driver); | ||
176 | |||
177 | if (handler->remove) | ||
178 | handler->remove(fn); | ||
179 | |||
180 | return 0; | ||
181 | } | ||
182 | |||
183 | int rmi_register_function(struct rmi_function *fn) | ||
184 | { | ||
185 | struct rmi_device *rmi_dev = fn->rmi_dev; | ||
186 | int error; | ||
187 | |||
188 | device_initialize(&fn->dev); | ||
189 | |||
190 | dev_set_name(&fn->dev, "%s.fn%02x", | ||
191 | dev_name(&rmi_dev->dev), fn->fd.function_number); | ||
192 | |||
193 | fn->dev.parent = &rmi_dev->dev; | ||
194 | fn->dev.type = &rmi_function_type; | ||
195 | fn->dev.bus = &rmi_bus_type; | ||
196 | |||
197 | error = device_add(&fn->dev); | ||
198 | if (error) { | ||
199 | dev_err(&rmi_dev->dev, | ||
200 | "Failed device_register function device %s\n", | ||
201 | dev_name(&fn->dev)); | ||
202 | goto err_put_device; | ||
203 | } | ||
204 | |||
205 | rmi_dbg(RMI_DEBUG_CORE, &rmi_dev->dev, "Registered F%02X.\n", | ||
206 | fn->fd.function_number); | ||
207 | |||
208 | return 0; | ||
209 | |||
210 | err_put_device: | ||
211 | put_device(&fn->dev); | ||
212 | return error; | ||
213 | } | ||
214 | |||
215 | void rmi_unregister_function(struct rmi_function *fn) | ||
216 | { | ||
217 | device_del(&fn->dev); | ||
218 | |||
219 | if (fn->dev.of_node) | ||
220 | of_node_put(fn->dev.of_node); | ||
221 | |||
222 | put_device(&fn->dev); | ||
223 | } | ||
224 | |||
225 | /** | ||
226 | * rmi_register_function_handler - register a handler for an RMI function | ||
227 | * @handler: RMI handler that should be registered. | ||
228 | * @module: pointer to module that implements the handler | ||
229 | * @mod_name: name of the module implementing the handler | ||
230 | * | ||
231 | * This function performs additional setup of RMI function handler and | ||
232 | * registers it with the RMI core so that it can be bound to | ||
233 | * RMI function devices. | ||
234 | */ | ||
235 | int __rmi_register_function_handler(struct rmi_function_handler *handler, | ||
236 | struct module *owner, | ||
237 | const char *mod_name) | ||
238 | { | ||
239 | struct device_driver *driver = &handler->driver; | ||
240 | int error; | ||
241 | |||
242 | driver->bus = &rmi_bus_type; | ||
243 | driver->owner = owner; | ||
244 | driver->mod_name = mod_name; | ||
245 | driver->probe = rmi_function_probe; | ||
246 | driver->remove = rmi_function_remove; | ||
247 | |||
248 | error = driver_register(&handler->driver); | ||
249 | if (error) { | ||
250 | pr_err("driver_register() failed for %s, error: %d\n", | ||
251 | handler->driver.name, error); | ||
252 | return error; | ||
253 | } | ||
254 | |||
255 | return 0; | ||
256 | } | ||
257 | EXPORT_SYMBOL_GPL(__rmi_register_function_handler); | ||
258 | |||
259 | /** | ||
260 | * rmi_unregister_function_handler - unregister given RMI function handler | ||
261 | * @handler: RMI handler that should be unregistered. | ||
262 | * | ||
263 | * This function unregisters given function handler from RMI core which | ||
264 | * causes it to be unbound from the function devices. | ||
265 | */ | ||
266 | void rmi_unregister_function_handler(struct rmi_function_handler *handler) | ||
267 | { | ||
268 | driver_unregister(&handler->driver); | ||
269 | } | ||
270 | EXPORT_SYMBOL_GPL(rmi_unregister_function_handler); | ||
271 | |||
272 | /* Bus specific stuff */ | ||
273 | |||
274 | static int rmi_bus_match(struct device *dev, struct device_driver *drv) | ||
275 | { | ||
276 | bool physical = rmi_is_physical_device(dev); | ||
277 | |||
278 | /* First see if types are not compatible */ | ||
279 | if (physical != rmi_is_physical_driver(drv)) | ||
280 | return 0; | ||
281 | |||
282 | return physical || rmi_function_match(dev, drv); | ||
283 | } | ||
284 | |||
285 | struct bus_type rmi_bus_type = { | ||
286 | .match = rmi_bus_match, | ||
287 | .name = "rmi4", | ||
288 | }; | ||
289 | |||
290 | static struct rmi_function_handler *fn_handlers[] = { | ||
291 | &rmi_f01_handler, | ||
292 | }; | ||
293 | |||
294 | static void __rmi_unregister_function_handlers(int start_idx) | ||
295 | { | ||
296 | int i; | ||
297 | |||
298 | for (i = start_idx; i >= 0; i--) | ||
299 | rmi_unregister_function_handler(fn_handlers[i]); | ||
300 | } | ||
301 | |||
302 | static void rmi_unregister_function_handlers(void) | ||
303 | { | ||
304 | __rmi_unregister_function_handlers(ARRAY_SIZE(fn_handlers) - 1); | ||
305 | } | ||
306 | |||
307 | static int rmi_register_function_handlers(void) | ||
308 | { | ||
309 | int ret; | ||
310 | int i; | ||
311 | |||
312 | for (i = 0; i < ARRAY_SIZE(fn_handlers); i++) { | ||
313 | ret = rmi_register_function_handler(fn_handlers[i]); | ||
314 | if (ret) { | ||
315 | pr_err("%s: error registering the RMI F%02x handler: %d\n", | ||
316 | __func__, fn_handlers[i]->func, ret); | ||
317 | goto err_unregister_function_handlers; | ||
318 | } | ||
319 | } | ||
320 | |||
321 | return 0; | ||
322 | |||
323 | err_unregister_function_handlers: | ||
324 | __rmi_unregister_function_handlers(i - 1); | ||
325 | return ret; | ||
326 | } | ||
327 | |||
328 | static int __init rmi_bus_init(void) | ||
329 | { | ||
330 | int error; | ||
331 | |||
332 | error = bus_register(&rmi_bus_type); | ||
333 | if (error) { | ||
334 | pr_err("%s: error registering the RMI bus: %d\n", | ||
335 | __func__, error); | ||
336 | return error; | ||
337 | } | ||
338 | |||
339 | error = rmi_register_function_handlers(); | ||
340 | if (error) | ||
341 | goto err_unregister_bus; | ||
342 | |||
343 | error = rmi_register_physical_driver(); | ||
344 | if (error) { | ||
345 | pr_err("%s: error registering the RMI physical driver: %d\n", | ||
346 | __func__, error); | ||
347 | goto err_unregister_bus; | ||
348 | } | ||
349 | |||
350 | return 0; | ||
351 | |||
352 | err_unregister_bus: | ||
353 | bus_unregister(&rmi_bus_type); | ||
354 | return error; | ||
355 | } | ||
356 | module_init(rmi_bus_init); | ||
357 | |||
358 | static void __exit rmi_bus_exit(void) | ||
359 | { | ||
360 | /* | ||
361 | * We should only ever get here if all drivers are unloaded, so | ||
362 | * all we have to do at this point is unregister ourselves. | ||
363 | */ | ||
364 | |||
365 | rmi_unregister_physical_driver(); | ||
366 | rmi_unregister_function_handlers(); | ||
367 | bus_unregister(&rmi_bus_type); | ||
368 | } | ||
369 | module_exit(rmi_bus_exit); | ||
370 | |||
371 | MODULE_AUTHOR("Christopher Heiny <cheiny@synaptics.com"); | ||
372 | MODULE_AUTHOR("Andrew Duggan <aduggan@synaptics.com"); | ||
373 | MODULE_DESCRIPTION("RMI bus"); | ||
374 | MODULE_LICENSE("GPL"); | ||
375 | MODULE_VERSION(RMI_DRIVER_VERSION); | ||
diff --git a/drivers/input/rmi4/rmi_bus.h b/drivers/input/rmi4/rmi_bus.h new file mode 100644 index 000000000000..13b148d44b37 --- /dev/null +++ b/drivers/input/rmi4/rmi_bus.h | |||
@@ -0,0 +1,186 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2011-2016 Synaptics Incorporated | ||
3 | * Copyright (c) 2011 Unixphere | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or modify it | ||
6 | * under the terms of the GNU General Public License version 2 as published by | ||
7 | * the Free Software Foundation. | ||
8 | */ | ||
9 | |||
10 | #ifndef _RMI_BUS_H | ||
11 | #define _RMI_BUS_H | ||
12 | |||
13 | #include <linux/rmi.h> | ||
14 | |||
15 | struct rmi_device; | ||
16 | |||
17 | /** | ||
18 | * struct rmi_function - represents the implementation of an RMI4 | ||
19 | * function for a particular device (basically, a driver for that RMI4 function) | ||
20 | * | ||
21 | * @fd: The function descriptor of the RMI function | ||
22 | * @rmi_dev: Pointer to the RMI device associated with this function container | ||
23 | * @dev: The device associated with this particular function. | ||
24 | * | ||
25 | * @num_of_irqs: The number of irqs needed by this function | ||
26 | * @irq_pos: The position in the irq bitfield this function holds | ||
27 | * @irq_mask: For convenience, can be used to mask IRQ bits off during ATTN | ||
28 | * interrupt handling. | ||
29 | * | ||
30 | * @node: entry in device's list of functions | ||
31 | */ | ||
32 | struct rmi_function { | ||
33 | struct rmi_function_descriptor fd; | ||
34 | struct rmi_device *rmi_dev; | ||
35 | struct device dev; | ||
36 | struct list_head node; | ||
37 | |||
38 | unsigned int num_of_irqs; | ||
39 | unsigned int irq_pos; | ||
40 | unsigned long irq_mask[]; | ||
41 | }; | ||
42 | |||
43 | #define to_rmi_function(d) container_of(d, struct rmi_function, dev) | ||
44 | |||
45 | bool rmi_is_function_device(struct device *dev); | ||
46 | |||
47 | int __must_check rmi_register_function(struct rmi_function *); | ||
48 | void rmi_unregister_function(struct rmi_function *); | ||
49 | |||
50 | /** | ||
51 | * struct rmi_function_handler - driver routines for a particular RMI function. | ||
52 | * | ||
53 | * @func: The RMI function number | ||
54 | * @reset: Called when a reset of the touch sensor is detected. The routine | ||
55 | * should perform any out-of-the-ordinary reset handling that might be | ||
56 | * necessary. Restoring of touch sensor configuration registers should be | ||
57 | * handled in the config() callback, below. | ||
58 | * @config: Called when the function container is first initialized, and | ||
59 | * after a reset is detected. This routine should write any necessary | ||
60 | * configuration settings to the device. | ||
61 | * @attention: Called when the IRQ(s) for the function are set by the touch | ||
62 | * sensor. | ||
63 | * @suspend: Should perform any required operations to suspend the particular | ||
64 | * function. | ||
65 | * @resume: Should perform any required operations to resume the particular | ||
66 | * function. | ||
67 | * | ||
68 | * All callbacks are expected to return 0 on success, error code on failure. | ||
69 | */ | ||
70 | struct rmi_function_handler { | ||
71 | struct device_driver driver; | ||
72 | |||
73 | u8 func; | ||
74 | |||
75 | int (*probe)(struct rmi_function *fn); | ||
76 | void (*remove)(struct rmi_function *fn); | ||
77 | int (*config)(struct rmi_function *fn); | ||
78 | int (*reset)(struct rmi_function *fn); | ||
79 | int (*attention)(struct rmi_function *fn, unsigned long *irq_bits); | ||
80 | int (*suspend)(struct rmi_function *fn); | ||
81 | int (*resume)(struct rmi_function *fn); | ||
82 | }; | ||
83 | |||
84 | #define to_rmi_function_handler(d) \ | ||
85 | container_of(d, struct rmi_function_handler, driver) | ||
86 | |||
87 | int __must_check __rmi_register_function_handler(struct rmi_function_handler *, | ||
88 | struct module *, const char *); | ||
89 | #define rmi_register_function_handler(handler) \ | ||
90 | __rmi_register_function_handler(handler, THIS_MODULE, KBUILD_MODNAME) | ||
91 | |||
92 | void rmi_unregister_function_handler(struct rmi_function_handler *); | ||
93 | |||
94 | #define to_rmi_driver(d) \ | ||
95 | container_of(d, struct rmi_driver, driver) | ||
96 | |||
97 | #define to_rmi_device(d) container_of(d, struct rmi_device, dev) | ||
98 | |||
99 | static inline struct rmi_device_platform_data * | ||
100 | rmi_get_platform_data(struct rmi_device *d) | ||
101 | { | ||
102 | return &d->xport->pdata; | ||
103 | } | ||
104 | |||
105 | bool rmi_is_physical_device(struct device *dev); | ||
106 | |||
107 | /** | ||
108 | * rmi_read - read a single byte | ||
109 | * @d: Pointer to an RMI device | ||
110 | * @addr: The address to read from | ||
111 | * @buf: The read buffer | ||
112 | * | ||
113 | * Reads a single byte of data using the underlying transport protocol | ||
114 | * into memory pointed by @buf. It returns 0 on success or a negative | ||
115 | * error code. | ||
116 | */ | ||
117 | static inline int rmi_read(struct rmi_device *d, u16 addr, u8 *buf) | ||
118 | { | ||
119 | return d->xport->ops->read_block(d->xport, addr, buf, 1); | ||
120 | } | ||
121 | |||
122 | /** | ||
123 | * rmi_read_block - read a block of bytes | ||
124 | * @d: Pointer to an RMI device | ||
125 | * @addr: The start address to read from | ||
126 | * @buf: The read buffer | ||
127 | * @len: Length of the read buffer | ||
128 | * | ||
129 | * Reads a block of byte data using the underlying transport protocol | ||
130 | * into memory pointed by @buf. It returns 0 on success or a negative | ||
131 | * error code. | ||
132 | */ | ||
133 | static inline int rmi_read_block(struct rmi_device *d, u16 addr, | ||
134 | void *buf, size_t len) | ||
135 | { | ||
136 | return d->xport->ops->read_block(d->xport, addr, buf, len); | ||
137 | } | ||
138 | |||
139 | /** | ||
140 | * rmi_write - write a single byte | ||
141 | * @d: Pointer to an RMI device | ||
142 | * @addr: The address to write to | ||
143 | * @data: The data to write | ||
144 | * | ||
145 | * Writes a single byte using the underlying transport protocol. It | ||
146 | * returns zero on success or a negative error code. | ||
147 | */ | ||
148 | static inline int rmi_write(struct rmi_device *d, u16 addr, u8 data) | ||
149 | { | ||
150 | return d->xport->ops->write_block(d->xport, addr, &data, 1); | ||
151 | } | ||
152 | |||
153 | /** | ||
154 | * rmi_write_block - write a block of bytes | ||
155 | * @d: Pointer to an RMI device | ||
156 | * @addr: The start address to write to | ||
157 | * @buf: The write buffer | ||
158 | * @len: Length of the write buffer | ||
159 | * | ||
160 | * Writes a block of byte data from buf using the underlaying transport | ||
161 | * protocol. It returns the amount of bytes written or a negative error code. | ||
162 | */ | ||
163 | static inline int rmi_write_block(struct rmi_device *d, u16 addr, | ||
164 | const void *buf, size_t len) | ||
165 | { | ||
166 | return d->xport->ops->write_block(d->xport, addr, buf, len); | ||
167 | } | ||
168 | |||
169 | int rmi_for_each_dev(void *data, int (*func)(struct device *dev, void *data)); | ||
170 | |||
171 | extern struct bus_type rmi_bus_type; | ||
172 | |||
173 | int rmi_of_property_read_u32(struct device *dev, u32 *result, | ||
174 | const char *prop, bool optional); | ||
175 | int rmi_of_property_read_u16(struct device *dev, u16 *result, | ||
176 | const char *prop, bool optional); | ||
177 | int rmi_of_property_read_u8(struct device *dev, u8 *result, | ||
178 | const char *prop, bool optional); | ||
179 | |||
180 | #define RMI_DEBUG_CORE BIT(0) | ||
181 | #define RMI_DEBUG_XPORT BIT(1) | ||
182 | #define RMI_DEBUG_FN BIT(2) | ||
183 | #define RMI_DEBUG_2D_SENSOR BIT(3) | ||
184 | |||
185 | void rmi_dbg(int flags, struct device *dev, const char *fmt, ...); | ||
186 | #endif | ||
diff --git a/drivers/input/rmi4/rmi_driver.c b/drivers/input/rmi4/rmi_driver.c new file mode 100644 index 000000000000..b0f34b57a126 --- /dev/null +++ b/drivers/input/rmi4/rmi_driver.c | |||
@@ -0,0 +1,1027 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2011-2016 Synaptics Incorporated | ||
3 | * Copyright (c) 2011 Unixphere | ||
4 | * | ||
5 | * This driver provides the core support for a single RMI4-based device. | ||
6 | * | ||
7 | * The RMI4 specification can be found here (URL split for line length): | ||
8 | * | ||
9 | * http://www.synaptics.com/sites/default/files/ | ||
10 | * 511-000136-01-Rev-E-RMI4-Interfacing-Guide.pdf | ||
11 | * | ||
12 | * This program is free software; you can redistribute it and/or modify it | ||
13 | * under the terms of the GNU General Public License version 2 as published by | ||
14 | * the Free Software Foundation. | ||
15 | */ | ||
16 | |||
17 | #include <linux/bitmap.h> | ||
18 | #include <linux/delay.h> | ||
19 | #include <linux/fs.h> | ||
20 | #include <linux/kconfig.h> | ||
21 | #include <linux/pm.h> | ||
22 | #include <linux/slab.h> | ||
23 | #include <uapi/linux/input.h> | ||
24 | #include <linux/rmi.h> | ||
25 | #include "rmi_bus.h" | ||
26 | #include "rmi_driver.h" | ||
27 | |||
28 | #define HAS_NONSTANDARD_PDT_MASK 0x40 | ||
29 | #define RMI4_MAX_PAGE 0xff | ||
30 | #define RMI4_PAGE_SIZE 0x100 | ||
31 | #define RMI4_PAGE_MASK 0xFF00 | ||
32 | |||
33 | #define RMI_DEVICE_RESET_CMD 0x01 | ||
34 | #define DEFAULT_RESET_DELAY_MS 100 | ||
35 | |||
36 | static void rmi_free_function_list(struct rmi_device *rmi_dev) | ||
37 | { | ||
38 | struct rmi_function *fn, *tmp; | ||
39 | struct rmi_driver_data *data = dev_get_drvdata(&rmi_dev->dev); | ||
40 | |||
41 | data->f01_container = NULL; | ||
42 | |||
43 | /* Doing it in the reverse order so F01 will be removed last */ | ||
44 | list_for_each_entry_safe_reverse(fn, tmp, | ||
45 | &data->function_list, node) { | ||
46 | list_del(&fn->node); | ||
47 | rmi_unregister_function(fn); | ||
48 | } | ||
49 | } | ||
50 | |||
51 | static int reset_one_function(struct rmi_function *fn) | ||
52 | { | ||
53 | struct rmi_function_handler *fh; | ||
54 | int retval = 0; | ||
55 | |||
56 | if (!fn || !fn->dev.driver) | ||
57 | return 0; | ||
58 | |||
59 | fh = to_rmi_function_handler(fn->dev.driver); | ||
60 | if (fh->reset) { | ||
61 | retval = fh->reset(fn); | ||
62 | if (retval < 0) | ||
63 | dev_err(&fn->dev, "Reset failed with code %d.\n", | ||
64 | retval); | ||
65 | } | ||
66 | |||
67 | return retval; | ||
68 | } | ||
69 | |||
70 | static int configure_one_function(struct rmi_function *fn) | ||
71 | { | ||
72 | struct rmi_function_handler *fh; | ||
73 | int retval = 0; | ||
74 | |||
75 | if (!fn || !fn->dev.driver) | ||
76 | return 0; | ||
77 | |||
78 | fh = to_rmi_function_handler(fn->dev.driver); | ||
79 | if (fh->config) { | ||
80 | retval = fh->config(fn); | ||
81 | if (retval < 0) | ||
82 | dev_err(&fn->dev, "Config failed with code %d.\n", | ||
83 | retval); | ||
84 | } | ||
85 | |||
86 | return retval; | ||
87 | } | ||
88 | |||
89 | static int rmi_driver_process_reset_requests(struct rmi_device *rmi_dev) | ||
90 | { | ||
91 | struct rmi_driver_data *data = dev_get_drvdata(&rmi_dev->dev); | ||
92 | struct rmi_function *entry; | ||
93 | int retval; | ||
94 | |||
95 | list_for_each_entry(entry, &data->function_list, node) { | ||
96 | retval = reset_one_function(entry); | ||
97 | if (retval < 0) | ||
98 | return retval; | ||
99 | } | ||
100 | |||
101 | return 0; | ||
102 | } | ||
103 | |||
104 | static int rmi_driver_process_config_requests(struct rmi_device *rmi_dev) | ||
105 | { | ||
106 | struct rmi_driver_data *data = dev_get_drvdata(&rmi_dev->dev); | ||
107 | struct rmi_function *entry; | ||
108 | int retval; | ||
109 | |||
110 | list_for_each_entry(entry, &data->function_list, node) { | ||
111 | retval = configure_one_function(entry); | ||
112 | if (retval < 0) | ||
113 | return retval; | ||
114 | } | ||
115 | |||
116 | return 0; | ||
117 | } | ||
118 | |||
119 | static void process_one_interrupt(struct rmi_driver_data *data, | ||
120 | struct rmi_function *fn) | ||
121 | { | ||
122 | struct rmi_function_handler *fh; | ||
123 | |||
124 | if (!fn || !fn->dev.driver) | ||
125 | return; | ||
126 | |||
127 | fh = to_rmi_function_handler(fn->dev.driver); | ||
128 | if (fn->irq_mask && fh->attention) { | ||
129 | bitmap_and(data->fn_irq_bits, data->irq_status, fn->irq_mask, | ||
130 | data->irq_count); | ||
131 | if (!bitmap_empty(data->fn_irq_bits, data->irq_count)) | ||
132 | fh->attention(fn, data->fn_irq_bits); | ||
133 | } | ||
134 | } | ||
135 | |||
136 | int rmi_process_interrupt_requests(struct rmi_device *rmi_dev) | ||
137 | { | ||
138 | struct rmi_driver_data *data = dev_get_drvdata(&rmi_dev->dev); | ||
139 | struct device *dev = &rmi_dev->dev; | ||
140 | struct rmi_function *entry; | ||
141 | int error; | ||
142 | |||
143 | if (!data) | ||
144 | return 0; | ||
145 | |||
146 | if (!rmi_dev->xport->attn_data) { | ||
147 | error = rmi_read_block(rmi_dev, | ||
148 | data->f01_container->fd.data_base_addr + 1, | ||
149 | data->irq_status, data->num_of_irq_regs); | ||
150 | if (error < 0) { | ||
151 | dev_err(dev, "Failed to read irqs, code=%d\n", error); | ||
152 | return error; | ||
153 | } | ||
154 | } | ||
155 | |||
156 | mutex_lock(&data->irq_mutex); | ||
157 | bitmap_and(data->irq_status, data->irq_status, data->current_irq_mask, | ||
158 | data->irq_count); | ||
159 | /* | ||
160 | * At this point, irq_status has all bits that are set in the | ||
161 | * interrupt status register and are enabled. | ||
162 | */ | ||
163 | mutex_unlock(&data->irq_mutex); | ||
164 | |||
165 | /* | ||
166 | * It would be nice to be able to use irq_chip to handle these | ||
167 | * nested IRQs. Unfortunately, most of the current customers for | ||
168 | * this driver are using older kernels (3.0.x) that don't support | ||
169 | * the features required for that. Once they've shifted to more | ||
170 | * recent kernels (say, 3.3 and higher), this should be switched to | ||
171 | * use irq_chip. | ||
172 | */ | ||
173 | list_for_each_entry(entry, &data->function_list, node) | ||
174 | if (entry->irq_mask) | ||
175 | process_one_interrupt(data, entry); | ||
176 | |||
177 | if (data->input) | ||
178 | input_sync(data->input); | ||
179 | |||
180 | return 0; | ||
181 | } | ||
182 | EXPORT_SYMBOL_GPL(rmi_process_interrupt_requests); | ||
183 | |||
184 | static int suspend_one_function(struct rmi_function *fn) | ||
185 | { | ||
186 | struct rmi_function_handler *fh; | ||
187 | int retval = 0; | ||
188 | |||
189 | if (!fn || !fn->dev.driver) | ||
190 | return 0; | ||
191 | |||
192 | fh = to_rmi_function_handler(fn->dev.driver); | ||
193 | if (fh->suspend) { | ||
194 | retval = fh->suspend(fn); | ||
195 | if (retval < 0) | ||
196 | dev_err(&fn->dev, "Suspend failed with code %d.\n", | ||
197 | retval); | ||
198 | } | ||
199 | |||
200 | return retval; | ||
201 | } | ||
202 | |||
203 | static int rmi_suspend_functions(struct rmi_device *rmi_dev) | ||
204 | { | ||
205 | struct rmi_driver_data *data = dev_get_drvdata(&rmi_dev->dev); | ||
206 | struct rmi_function *entry; | ||
207 | int retval; | ||
208 | |||
209 | list_for_each_entry(entry, &data->function_list, node) { | ||
210 | retval = suspend_one_function(entry); | ||
211 | if (retval < 0) | ||
212 | return retval; | ||
213 | } | ||
214 | |||
215 | return 0; | ||
216 | } | ||
217 | |||
218 | static int resume_one_function(struct rmi_function *fn) | ||
219 | { | ||
220 | struct rmi_function_handler *fh; | ||
221 | int retval = 0; | ||
222 | |||
223 | if (!fn || !fn->dev.driver) | ||
224 | return 0; | ||
225 | |||
226 | fh = to_rmi_function_handler(fn->dev.driver); | ||
227 | if (fh->resume) { | ||
228 | retval = fh->resume(fn); | ||
229 | if (retval < 0) | ||
230 | dev_err(&fn->dev, "Resume failed with code %d.\n", | ||
231 | retval); | ||
232 | } | ||
233 | |||
234 | return retval; | ||
235 | } | ||
236 | |||
237 | static int rmi_resume_functions(struct rmi_device *rmi_dev) | ||
238 | { | ||
239 | struct rmi_driver_data *data = dev_get_drvdata(&rmi_dev->dev); | ||
240 | struct rmi_function *entry; | ||
241 | int retval; | ||
242 | |||
243 | list_for_each_entry(entry, &data->function_list, node) { | ||
244 | retval = resume_one_function(entry); | ||
245 | if (retval < 0) | ||
246 | return retval; | ||
247 | } | ||
248 | |||
249 | return 0; | ||
250 | } | ||
251 | |||
252 | static int enable_sensor(struct rmi_device *rmi_dev) | ||
253 | { | ||
254 | int retval = 0; | ||
255 | |||
256 | retval = rmi_driver_process_config_requests(rmi_dev); | ||
257 | if (retval < 0) | ||
258 | return retval; | ||
259 | |||
260 | return rmi_process_interrupt_requests(rmi_dev); | ||
261 | } | ||
262 | |||
263 | /** | ||
264 | * rmi_driver_set_input_params - set input device id and other data. | ||
265 | * | ||
266 | * @rmi_dev: Pointer to an RMI device | ||
267 | * @input: Pointer to input device | ||
268 | * | ||
269 | */ | ||
270 | static int rmi_driver_set_input_params(struct rmi_device *rmi_dev, | ||
271 | struct input_dev *input) | ||
272 | { | ||
273 | input->name = SYNAPTICS_INPUT_DEVICE_NAME; | ||
274 | input->id.vendor = SYNAPTICS_VENDOR_ID; | ||
275 | input->id.bustype = BUS_RMI; | ||
276 | return 0; | ||
277 | } | ||
278 | |||
279 | static void rmi_driver_set_input_name(struct rmi_device *rmi_dev, | ||
280 | struct input_dev *input) | ||
281 | { | ||
282 | struct rmi_driver_data *data = dev_get_drvdata(&rmi_dev->dev); | ||
283 | char *device_name = rmi_f01_get_product_ID(data->f01_container); | ||
284 | char *name; | ||
285 | |||
286 | name = devm_kasprintf(&rmi_dev->dev, GFP_KERNEL, | ||
287 | "Synaptics %s", device_name); | ||
288 | if (!name) | ||
289 | return; | ||
290 | |||
291 | input->name = name; | ||
292 | } | ||
293 | |||
294 | static int rmi_driver_set_irq_bits(struct rmi_device *rmi_dev, | ||
295 | unsigned long *mask) | ||
296 | { | ||
297 | int error = 0; | ||
298 | struct rmi_driver_data *data = dev_get_drvdata(&rmi_dev->dev); | ||
299 | struct device *dev = &rmi_dev->dev; | ||
300 | |||
301 | mutex_lock(&data->irq_mutex); | ||
302 | bitmap_or(data->new_irq_mask, | ||
303 | data->current_irq_mask, mask, data->irq_count); | ||
304 | |||
305 | error = rmi_write_block(rmi_dev, | ||
306 | data->f01_container->fd.control_base_addr + 1, | ||
307 | data->new_irq_mask, data->num_of_irq_regs); | ||
308 | if (error < 0) { | ||
309 | dev_err(dev, "%s: Failed to change enabled interrupts!", | ||
310 | __func__); | ||
311 | goto error_unlock; | ||
312 | } | ||
313 | bitmap_copy(data->current_irq_mask, data->new_irq_mask, | ||
314 | data->num_of_irq_regs); | ||
315 | |||
316 | error_unlock: | ||
317 | mutex_unlock(&data->irq_mutex); | ||
318 | return error; | ||
319 | } | ||
320 | |||
321 | static int rmi_driver_clear_irq_bits(struct rmi_device *rmi_dev, | ||
322 | unsigned long *mask) | ||
323 | { | ||
324 | int error = 0; | ||
325 | struct rmi_driver_data *data = dev_get_drvdata(&rmi_dev->dev); | ||
326 | struct device *dev = &rmi_dev->dev; | ||
327 | |||
328 | mutex_lock(&data->irq_mutex); | ||
329 | bitmap_andnot(data->new_irq_mask, | ||
330 | data->current_irq_mask, mask, data->irq_count); | ||
331 | |||
332 | error = rmi_write_block(rmi_dev, | ||
333 | data->f01_container->fd.control_base_addr + 1, | ||
334 | data->new_irq_mask, data->num_of_irq_regs); | ||
335 | if (error < 0) { | ||
336 | dev_err(dev, "%s: Failed to change enabled interrupts!", | ||
337 | __func__); | ||
338 | goto error_unlock; | ||
339 | } | ||
340 | bitmap_copy(data->current_irq_mask, data->new_irq_mask, | ||
341 | data->num_of_irq_regs); | ||
342 | |||
343 | error_unlock: | ||
344 | mutex_unlock(&data->irq_mutex); | ||
345 | return error; | ||
346 | } | ||
347 | |||
348 | static int rmi_driver_reset_handler(struct rmi_device *rmi_dev) | ||
349 | { | ||
350 | struct rmi_driver_data *data = dev_get_drvdata(&rmi_dev->dev); | ||
351 | int error; | ||
352 | |||
353 | /* | ||
354 | * Can get called before the driver is fully ready to deal with | ||
355 | * this situation. | ||
356 | */ | ||
357 | if (!data || !data->f01_container) { | ||
358 | dev_warn(&rmi_dev->dev, | ||
359 | "Not ready to handle reset yet!\n"); | ||
360 | return 0; | ||
361 | } | ||
362 | |||
363 | error = rmi_read_block(rmi_dev, | ||
364 | data->f01_container->fd.control_base_addr + 1, | ||
365 | data->current_irq_mask, data->num_of_irq_regs); | ||
366 | if (error < 0) { | ||
367 | dev_err(&rmi_dev->dev, "%s: Failed to read current IRQ mask.\n", | ||
368 | __func__); | ||
369 | return error; | ||
370 | } | ||
371 | |||
372 | error = rmi_driver_process_reset_requests(rmi_dev); | ||
373 | if (error < 0) | ||
374 | return error; | ||
375 | |||
376 | error = rmi_driver_process_config_requests(rmi_dev); | ||
377 | if (error < 0) | ||
378 | return error; | ||
379 | |||
380 | return 0; | ||
381 | } | ||
382 | |||
383 | int rmi_read_pdt_entry(struct rmi_device *rmi_dev, struct pdt_entry *entry, | ||
384 | u16 pdt_address) | ||
385 | { | ||
386 | u8 buf[RMI_PDT_ENTRY_SIZE]; | ||
387 | int error; | ||
388 | |||
389 | error = rmi_read_block(rmi_dev, pdt_address, buf, RMI_PDT_ENTRY_SIZE); | ||
390 | if (error) { | ||
391 | dev_err(&rmi_dev->dev, "Read PDT entry at %#06x failed, code: %d.\n", | ||
392 | pdt_address, error); | ||
393 | return error; | ||
394 | } | ||
395 | |||
396 | entry->page_start = pdt_address & RMI4_PAGE_MASK; | ||
397 | entry->query_base_addr = buf[0]; | ||
398 | entry->command_base_addr = buf[1]; | ||
399 | entry->control_base_addr = buf[2]; | ||
400 | entry->data_base_addr = buf[3]; | ||
401 | entry->interrupt_source_count = buf[4] & RMI_PDT_INT_SOURCE_COUNT_MASK; | ||
402 | entry->function_version = (buf[4] & RMI_PDT_FUNCTION_VERSION_MASK) >> 5; | ||
403 | entry->function_number = buf[5]; | ||
404 | |||
405 | return 0; | ||
406 | } | ||
407 | EXPORT_SYMBOL_GPL(rmi_read_pdt_entry); | ||
408 | |||
409 | static void rmi_driver_copy_pdt_to_fd(const struct pdt_entry *pdt, | ||
410 | struct rmi_function_descriptor *fd) | ||
411 | { | ||
412 | fd->query_base_addr = pdt->query_base_addr + pdt->page_start; | ||
413 | fd->command_base_addr = pdt->command_base_addr + pdt->page_start; | ||
414 | fd->control_base_addr = pdt->control_base_addr + pdt->page_start; | ||
415 | fd->data_base_addr = pdt->data_base_addr + pdt->page_start; | ||
416 | fd->function_number = pdt->function_number; | ||
417 | fd->interrupt_source_count = pdt->interrupt_source_count; | ||
418 | fd->function_version = pdt->function_version; | ||
419 | } | ||
420 | |||
421 | #define RMI_SCAN_CONTINUE 0 | ||
422 | #define RMI_SCAN_DONE 1 | ||
423 | |||
424 | static int rmi_scan_pdt_page(struct rmi_device *rmi_dev, | ||
425 | int page, | ||
426 | void *ctx, | ||
427 | int (*callback)(struct rmi_device *rmi_dev, | ||
428 | void *ctx, | ||
429 | const struct pdt_entry *entry)) | ||
430 | { | ||
431 | struct rmi_driver_data *data = dev_get_drvdata(&rmi_dev->dev); | ||
432 | struct pdt_entry pdt_entry; | ||
433 | u16 page_start = RMI4_PAGE_SIZE * page; | ||
434 | u16 pdt_start = page_start + PDT_START_SCAN_LOCATION; | ||
435 | u16 pdt_end = page_start + PDT_END_SCAN_LOCATION; | ||
436 | u16 addr; | ||
437 | int error; | ||
438 | int retval; | ||
439 | |||
440 | for (addr = pdt_start; addr >= pdt_end; addr -= RMI_PDT_ENTRY_SIZE) { | ||
441 | error = rmi_read_pdt_entry(rmi_dev, &pdt_entry, addr); | ||
442 | if (error) | ||
443 | return error; | ||
444 | |||
445 | if (RMI4_END_OF_PDT(pdt_entry.function_number)) | ||
446 | break; | ||
447 | |||
448 | retval = callback(rmi_dev, ctx, &pdt_entry); | ||
449 | if (retval != RMI_SCAN_CONTINUE) | ||
450 | return retval; | ||
451 | } | ||
452 | |||
453 | return (data->f01_bootloader_mode || addr == pdt_start) ? | ||
454 | RMI_SCAN_DONE : RMI_SCAN_CONTINUE; | ||
455 | } | ||
456 | |||
457 | static int rmi_scan_pdt(struct rmi_device *rmi_dev, void *ctx, | ||
458 | int (*callback)(struct rmi_device *rmi_dev, | ||
459 | void *ctx, | ||
460 | const struct pdt_entry *entry)) | ||
461 | { | ||
462 | int page; | ||
463 | int retval = RMI_SCAN_DONE; | ||
464 | |||
465 | for (page = 0; page <= RMI4_MAX_PAGE; page++) { | ||
466 | retval = rmi_scan_pdt_page(rmi_dev, page, ctx, callback); | ||
467 | if (retval != RMI_SCAN_CONTINUE) | ||
468 | break; | ||
469 | } | ||
470 | |||
471 | return retval < 0 ? retval : 0; | ||
472 | } | ||
473 | |||
474 | int rmi_read_register_desc(struct rmi_device *d, u16 addr, | ||
475 | struct rmi_register_descriptor *rdesc) | ||
476 | { | ||
477 | int ret; | ||
478 | u8 size_presence_reg; | ||
479 | u8 buf[35]; | ||
480 | int presense_offset = 1; | ||
481 | u8 *struct_buf; | ||
482 | int reg; | ||
483 | int offset = 0; | ||
484 | int map_offset = 0; | ||
485 | int i; | ||
486 | int b; | ||
487 | |||
488 | /* | ||
489 | * The first register of the register descriptor is the size of | ||
490 | * the register descriptor's presense register. | ||
491 | */ | ||
492 | ret = rmi_read(d, addr, &size_presence_reg); | ||
493 | if (ret) | ||
494 | return ret; | ||
495 | ++addr; | ||
496 | |||
497 | if (size_presence_reg < 0 || size_presence_reg > 35) | ||
498 | return -EIO; | ||
499 | |||
500 | memset(buf, 0, sizeof(buf)); | ||
501 | |||
502 | /* | ||
503 | * The presence register contains the size of the register structure | ||
504 | * and a bitmap which identified which packet registers are present | ||
505 | * for this particular register type (ie query, control, or data). | ||
506 | */ | ||
507 | ret = rmi_read_block(d, addr, buf, size_presence_reg); | ||
508 | if (ret) | ||
509 | return ret; | ||
510 | ++addr; | ||
511 | |||
512 | if (buf[0] == 0) { | ||
513 | presense_offset = 3; | ||
514 | rdesc->struct_size = buf[1] | (buf[2] << 8); | ||
515 | } else { | ||
516 | rdesc->struct_size = buf[0]; | ||
517 | } | ||
518 | |||
519 | for (i = presense_offset; i < size_presence_reg; i++) { | ||
520 | for (b = 0; b < 8; b++) { | ||
521 | if (buf[i] & (0x1 << b)) | ||
522 | bitmap_set(rdesc->presense_map, map_offset, 1); | ||
523 | ++map_offset; | ||
524 | } | ||
525 | } | ||
526 | |||
527 | rdesc->num_registers = bitmap_weight(rdesc->presense_map, | ||
528 | RMI_REG_DESC_PRESENSE_BITS); | ||
529 | |||
530 | rdesc->registers = devm_kzalloc(&d->dev, rdesc->num_registers * | ||
531 | sizeof(struct rmi_register_desc_item), | ||
532 | GFP_KERNEL); | ||
533 | if (!rdesc->registers) | ||
534 | return -ENOMEM; | ||
535 | |||
536 | /* | ||
537 | * Allocate a temporary buffer to hold the register structure. | ||
538 | * I'm not using devm_kzalloc here since it will not be retained | ||
539 | * after exiting this function | ||
540 | */ | ||
541 | struct_buf = kzalloc(rdesc->struct_size, GFP_KERNEL); | ||
542 | if (!struct_buf) | ||
543 | return -ENOMEM; | ||
544 | |||
545 | /* | ||
546 | * The register structure contains information about every packet | ||
547 | * register of this type. This includes the size of the packet | ||
548 | * register and a bitmap of all subpackets contained in the packet | ||
549 | * register. | ||
550 | */ | ||
551 | ret = rmi_read_block(d, addr, struct_buf, rdesc->struct_size); | ||
552 | if (ret) | ||
553 | goto free_struct_buff; | ||
554 | |||
555 | reg = find_first_bit(rdesc->presense_map, RMI_REG_DESC_PRESENSE_BITS); | ||
556 | map_offset = 0; | ||
557 | for (i = 0; i < rdesc->num_registers; i++) { | ||
558 | struct rmi_register_desc_item *item = &rdesc->registers[i]; | ||
559 | int reg_size = struct_buf[offset]; | ||
560 | |||
561 | ++offset; | ||
562 | if (reg_size == 0) { | ||
563 | reg_size = struct_buf[offset] | | ||
564 | (struct_buf[offset + 1] << 8); | ||
565 | offset += 2; | ||
566 | } | ||
567 | |||
568 | if (reg_size == 0) { | ||
569 | reg_size = struct_buf[offset] | | ||
570 | (struct_buf[offset + 1] << 8) | | ||
571 | (struct_buf[offset + 2] << 16) | | ||
572 | (struct_buf[offset + 3] << 24); | ||
573 | offset += 4; | ||
574 | } | ||
575 | |||
576 | item->reg = reg; | ||
577 | item->reg_size = reg_size; | ||
578 | |||
579 | do { | ||
580 | for (b = 0; b < 7; b++) { | ||
581 | if (struct_buf[offset] & (0x1 << b)) | ||
582 | bitmap_set(item->subpacket_map, | ||
583 | map_offset, 1); | ||
584 | ++map_offset; | ||
585 | } | ||
586 | } while (struct_buf[offset++] & 0x80); | ||
587 | |||
588 | item->num_subpackets = bitmap_weight(item->subpacket_map, | ||
589 | RMI_REG_DESC_SUBPACKET_BITS); | ||
590 | |||
591 | rmi_dbg(RMI_DEBUG_CORE, &d->dev, | ||
592 | "%s: reg: %d reg size: %ld subpackets: %d\n", __func__, | ||
593 | item->reg, item->reg_size, item->num_subpackets); | ||
594 | |||
595 | reg = find_next_bit(rdesc->presense_map, | ||
596 | RMI_REG_DESC_PRESENSE_BITS, reg + 1); | ||
597 | } | ||
598 | |||
599 | free_struct_buff: | ||
600 | kfree(struct_buf); | ||
601 | return ret; | ||
602 | } | ||
603 | EXPORT_SYMBOL_GPL(rmi_read_register_desc); | ||
604 | |||
605 | const struct rmi_register_desc_item *rmi_get_register_desc_item( | ||
606 | struct rmi_register_descriptor *rdesc, u16 reg) | ||
607 | { | ||
608 | const struct rmi_register_desc_item *item; | ||
609 | int i; | ||
610 | |||
611 | for (i = 0; i < rdesc->num_registers; i++) { | ||
612 | item = &rdesc->registers[i]; | ||
613 | if (item->reg == reg) | ||
614 | return item; | ||
615 | } | ||
616 | |||
617 | return NULL; | ||
618 | } | ||
619 | EXPORT_SYMBOL_GPL(rmi_get_register_desc_item); | ||
620 | |||
621 | size_t rmi_register_desc_calc_size(struct rmi_register_descriptor *rdesc) | ||
622 | { | ||
623 | const struct rmi_register_desc_item *item; | ||
624 | int i; | ||
625 | size_t size = 0; | ||
626 | |||
627 | for (i = 0; i < rdesc->num_registers; i++) { | ||
628 | item = &rdesc->registers[i]; | ||
629 | size += item->reg_size; | ||
630 | } | ||
631 | return size; | ||
632 | } | ||
633 | EXPORT_SYMBOL_GPL(rmi_register_desc_calc_size); | ||
634 | |||
635 | /* Compute the register offset relative to the base address */ | ||
636 | int rmi_register_desc_calc_reg_offset( | ||
637 | struct rmi_register_descriptor *rdesc, u16 reg) | ||
638 | { | ||
639 | const struct rmi_register_desc_item *item; | ||
640 | int offset = 0; | ||
641 | int i; | ||
642 | |||
643 | for (i = 0; i < rdesc->num_registers; i++) { | ||
644 | item = &rdesc->registers[i]; | ||
645 | if (item->reg == reg) | ||
646 | return offset; | ||
647 | ++offset; | ||
648 | } | ||
649 | return -1; | ||
650 | } | ||
651 | EXPORT_SYMBOL_GPL(rmi_register_desc_calc_reg_offset); | ||
652 | |||
653 | bool rmi_register_desc_has_subpacket(const struct rmi_register_desc_item *item, | ||
654 | u8 subpacket) | ||
655 | { | ||
656 | return find_next_bit(item->subpacket_map, RMI_REG_DESC_PRESENSE_BITS, | ||
657 | subpacket) == subpacket; | ||
658 | } | ||
659 | |||
660 | /* Indicates that flash programming is enabled (bootloader mode). */ | ||
661 | #define RMI_F01_STATUS_BOOTLOADER(status) (!!((status) & 0x40)) | ||
662 | |||
663 | /* | ||
664 | * Given the PDT entry for F01, read the device status register to determine | ||
665 | * if we're stuck in bootloader mode or not. | ||
666 | * | ||
667 | */ | ||
668 | static int rmi_check_bootloader_mode(struct rmi_device *rmi_dev, | ||
669 | const struct pdt_entry *pdt) | ||
670 | { | ||
671 | int error; | ||
672 | u8 device_status; | ||
673 | |||
674 | error = rmi_read(rmi_dev, pdt->data_base_addr + pdt->page_start, | ||
675 | &device_status); | ||
676 | if (error) { | ||
677 | dev_err(&rmi_dev->dev, | ||
678 | "Failed to read device status: %d.\n", error); | ||
679 | return error; | ||
680 | } | ||
681 | |||
682 | return RMI_F01_STATUS_BOOTLOADER(device_status); | ||
683 | } | ||
684 | |||
685 | static int rmi_count_irqs(struct rmi_device *rmi_dev, | ||
686 | void *ctx, const struct pdt_entry *pdt) | ||
687 | { | ||
688 | struct rmi_driver_data *data = dev_get_drvdata(&rmi_dev->dev); | ||
689 | int *irq_count = ctx; | ||
690 | |||
691 | *irq_count += pdt->interrupt_source_count; | ||
692 | if (pdt->function_number == 0x01) { | ||
693 | data->f01_bootloader_mode = | ||
694 | rmi_check_bootloader_mode(rmi_dev, pdt); | ||
695 | if (data->f01_bootloader_mode) | ||
696 | dev_warn(&rmi_dev->dev, | ||
697 | "WARNING: RMI4 device is in bootloader mode!\n"); | ||
698 | } | ||
699 | |||
700 | return RMI_SCAN_CONTINUE; | ||
701 | } | ||
702 | |||
703 | static int rmi_initial_reset(struct rmi_device *rmi_dev, | ||
704 | void *ctx, const struct pdt_entry *pdt) | ||
705 | { | ||
706 | int error; | ||
707 | |||
708 | if (pdt->function_number == 0x01) { | ||
709 | u16 cmd_addr = pdt->page_start + pdt->command_base_addr; | ||
710 | u8 cmd_buf = RMI_DEVICE_RESET_CMD; | ||
711 | const struct rmi_device_platform_data *pdata = | ||
712 | rmi_get_platform_data(rmi_dev); | ||
713 | |||
714 | if (rmi_dev->xport->ops->reset) { | ||
715 | error = rmi_dev->xport->ops->reset(rmi_dev->xport, | ||
716 | cmd_addr); | ||
717 | if (error) | ||
718 | return error; | ||
719 | |||
720 | return RMI_SCAN_DONE; | ||
721 | } | ||
722 | |||
723 | error = rmi_write_block(rmi_dev, cmd_addr, &cmd_buf, 1); | ||
724 | if (error) { | ||
725 | dev_err(&rmi_dev->dev, | ||
726 | "Initial reset failed. Code = %d.\n", error); | ||
727 | return error; | ||
728 | } | ||
729 | |||
730 | mdelay(pdata->reset_delay_ms ?: DEFAULT_RESET_DELAY_MS); | ||
731 | |||
732 | return RMI_SCAN_DONE; | ||
733 | } | ||
734 | |||
735 | /* F01 should always be on page 0. If we don't find it there, fail. */ | ||
736 | return pdt->page_start == 0 ? RMI_SCAN_CONTINUE : -ENODEV; | ||
737 | } | ||
738 | |||
739 | static int rmi_create_function(struct rmi_device *rmi_dev, | ||
740 | void *ctx, const struct pdt_entry *pdt) | ||
741 | { | ||
742 | struct device *dev = &rmi_dev->dev; | ||
743 | struct rmi_driver_data *data = dev_get_drvdata(&rmi_dev->dev); | ||
744 | int *current_irq_count = ctx; | ||
745 | struct rmi_function *fn; | ||
746 | int i; | ||
747 | int error; | ||
748 | |||
749 | rmi_dbg(RMI_DEBUG_CORE, dev, "Initializing F%02X.\n", | ||
750 | pdt->function_number); | ||
751 | |||
752 | fn = kzalloc(sizeof(struct rmi_function) + | ||
753 | BITS_TO_LONGS(data->irq_count) * sizeof(unsigned long), | ||
754 | GFP_KERNEL); | ||
755 | if (!fn) { | ||
756 | dev_err(dev, "Failed to allocate memory for F%02X\n", | ||
757 | pdt->function_number); | ||
758 | return -ENOMEM; | ||
759 | } | ||
760 | |||
761 | INIT_LIST_HEAD(&fn->node); | ||
762 | rmi_driver_copy_pdt_to_fd(pdt, &fn->fd); | ||
763 | |||
764 | fn->rmi_dev = rmi_dev; | ||
765 | |||
766 | fn->num_of_irqs = pdt->interrupt_source_count; | ||
767 | fn->irq_pos = *current_irq_count; | ||
768 | *current_irq_count += fn->num_of_irqs; | ||
769 | |||
770 | for (i = 0; i < fn->num_of_irqs; i++) | ||
771 | set_bit(fn->irq_pos + i, fn->irq_mask); | ||
772 | |||
773 | error = rmi_register_function(fn); | ||
774 | if (error) | ||
775 | goto err_put_fn; | ||
776 | |||
777 | if (pdt->function_number == 0x01) | ||
778 | data->f01_container = fn; | ||
779 | |||
780 | list_add_tail(&fn->node, &data->function_list); | ||
781 | |||
782 | return RMI_SCAN_CONTINUE; | ||
783 | |||
784 | err_put_fn: | ||
785 | put_device(&fn->dev); | ||
786 | return error; | ||
787 | } | ||
788 | |||
789 | int rmi_driver_suspend(struct rmi_device *rmi_dev) | ||
790 | { | ||
791 | int retval = 0; | ||
792 | |||
793 | retval = rmi_suspend_functions(rmi_dev); | ||
794 | if (retval) | ||
795 | dev_warn(&rmi_dev->dev, "Failed to suspend functions: %d\n", | ||
796 | retval); | ||
797 | |||
798 | return retval; | ||
799 | } | ||
800 | EXPORT_SYMBOL_GPL(rmi_driver_suspend); | ||
801 | |||
802 | int rmi_driver_resume(struct rmi_device *rmi_dev) | ||
803 | { | ||
804 | int retval; | ||
805 | |||
806 | retval = rmi_resume_functions(rmi_dev); | ||
807 | if (retval) | ||
808 | dev_warn(&rmi_dev->dev, "Failed to suspend functions: %d\n", | ||
809 | retval); | ||
810 | |||
811 | return retval; | ||
812 | } | ||
813 | EXPORT_SYMBOL_GPL(rmi_driver_resume); | ||
814 | |||
815 | static int rmi_driver_remove(struct device *dev) | ||
816 | { | ||
817 | struct rmi_device *rmi_dev = to_rmi_device(dev); | ||
818 | |||
819 | rmi_free_function_list(rmi_dev); | ||
820 | |||
821 | return 0; | ||
822 | } | ||
823 | |||
824 | static int rmi_driver_probe(struct device *dev) | ||
825 | { | ||
826 | struct rmi_driver *rmi_driver; | ||
827 | struct rmi_driver_data *data; | ||
828 | struct rmi_device_platform_data *pdata; | ||
829 | struct rmi_device *rmi_dev; | ||
830 | size_t size; | ||
831 | void *irq_memory; | ||
832 | int irq_count; | ||
833 | int retval; | ||
834 | |||
835 | rmi_dbg(RMI_DEBUG_CORE, dev, "%s: Starting probe.\n", | ||
836 | __func__); | ||
837 | |||
838 | if (!rmi_is_physical_device(dev)) { | ||
839 | rmi_dbg(RMI_DEBUG_CORE, dev, "Not a physical device.\n"); | ||
840 | return -ENODEV; | ||
841 | } | ||
842 | |||
843 | rmi_dev = to_rmi_device(dev); | ||
844 | rmi_driver = to_rmi_driver(dev->driver); | ||
845 | rmi_dev->driver = rmi_driver; | ||
846 | |||
847 | pdata = rmi_get_platform_data(rmi_dev); | ||
848 | |||
849 | data = devm_kzalloc(dev, sizeof(struct rmi_driver_data), GFP_KERNEL); | ||
850 | if (!data) | ||
851 | return -ENOMEM; | ||
852 | |||
853 | INIT_LIST_HEAD(&data->function_list); | ||
854 | data->rmi_dev = rmi_dev; | ||
855 | dev_set_drvdata(&rmi_dev->dev, data); | ||
856 | |||
857 | /* | ||
858 | * Right before a warm boot, the sensor might be in some unusual state, | ||
859 | * such as F54 diagnostics, or F34 bootloader mode after a firmware | ||
860 | * or configuration update. In order to clear the sensor to a known | ||
861 | * state and/or apply any updates, we issue a initial reset to clear any | ||
862 | * previous settings and force it into normal operation. | ||
863 | * | ||
864 | * We have to do this before actually building the PDT because | ||
865 | * the reflash updates (if any) might cause various registers to move | ||
866 | * around. | ||
867 | * | ||
868 | * For a number of reasons, this initial reset may fail to return | ||
869 | * within the specified time, but we'll still be able to bring up the | ||
870 | * driver normally after that failure. This occurs most commonly in | ||
871 | * a cold boot situation (where then firmware takes longer to come up | ||
872 | * than from a warm boot) and the reset_delay_ms in the platform data | ||
873 | * has been set too short to accommodate that. Since the sensor will | ||
874 | * eventually come up and be usable, we don't want to just fail here | ||
875 | * and leave the customer's device unusable. So we warn them, and | ||
876 | * continue processing. | ||
877 | */ | ||
878 | retval = rmi_scan_pdt(rmi_dev, NULL, rmi_initial_reset); | ||
879 | if (retval < 0) | ||
880 | dev_warn(dev, "RMI initial reset failed! Continuing in spite of this.\n"); | ||
881 | |||
882 | retval = rmi_read(rmi_dev, PDT_PROPERTIES_LOCATION, &data->pdt_props); | ||
883 | if (retval < 0) { | ||
884 | /* | ||
885 | * we'll print out a warning and continue since | ||
886 | * failure to get the PDT properties is not a cause to fail | ||
887 | */ | ||
888 | dev_warn(dev, "Could not read PDT properties from %#06x (code %d). Assuming 0x00.\n", | ||
889 | PDT_PROPERTIES_LOCATION, retval); | ||
890 | } | ||
891 | |||
892 | /* | ||
893 | * We need to count the IRQs and allocate their storage before scanning | ||
894 | * the PDT and creating the function entries, because adding a new | ||
895 | * function can trigger events that result in the IRQ related storage | ||
896 | * being accessed. | ||
897 | */ | ||
898 | rmi_dbg(RMI_DEBUG_CORE, dev, "Counting IRQs.\n"); | ||
899 | irq_count = 0; | ||
900 | retval = rmi_scan_pdt(rmi_dev, &irq_count, rmi_count_irqs); | ||
901 | if (retval < 0) { | ||
902 | dev_err(dev, "IRQ counting failed with code %d.\n", retval); | ||
903 | goto err; | ||
904 | } | ||
905 | data->irq_count = irq_count; | ||
906 | data->num_of_irq_regs = (data->irq_count + 7) / 8; | ||
907 | |||
908 | mutex_init(&data->irq_mutex); | ||
909 | |||
910 | size = BITS_TO_LONGS(data->irq_count) * sizeof(unsigned long); | ||
911 | irq_memory = devm_kzalloc(dev, size * 4, GFP_KERNEL); | ||
912 | if (!irq_memory) { | ||
913 | dev_err(dev, "Failed to allocate memory for irq masks.\n"); | ||
914 | goto err; | ||
915 | } | ||
916 | |||
917 | data->irq_status = irq_memory + size * 0; | ||
918 | data->fn_irq_bits = irq_memory + size * 1; | ||
919 | data->current_irq_mask = irq_memory + size * 2; | ||
920 | data->new_irq_mask = irq_memory + size * 3; | ||
921 | |||
922 | if (rmi_dev->xport->input) { | ||
923 | /* | ||
924 | * The transport driver already has an input device. | ||
925 | * In some cases it is preferable to reuse the transport | ||
926 | * devices input device instead of creating a new one here. | ||
927 | * One example is some HID touchpads report "pass-through" | ||
928 | * button events are not reported by rmi registers. | ||
929 | */ | ||
930 | data->input = rmi_dev->xport->input; | ||
931 | } else { | ||
932 | data->input = devm_input_allocate_device(dev); | ||
933 | if (!data->input) { | ||
934 | dev_err(dev, "%s: Failed to allocate input device.\n", | ||
935 | __func__); | ||
936 | retval = -ENOMEM; | ||
937 | goto err_destroy_functions; | ||
938 | } | ||
939 | rmi_driver_set_input_params(rmi_dev, data->input); | ||
940 | data->input->phys = devm_kasprintf(dev, GFP_KERNEL, | ||
941 | "%s/input0", dev_name(dev)); | ||
942 | } | ||
943 | |||
944 | irq_count = 0; | ||
945 | rmi_dbg(RMI_DEBUG_CORE, dev, "Creating functions."); | ||
946 | retval = rmi_scan_pdt(rmi_dev, &irq_count, rmi_create_function); | ||
947 | if (retval < 0) { | ||
948 | dev_err(dev, "Function creation failed with code %d.\n", | ||
949 | retval); | ||
950 | goto err_destroy_functions; | ||
951 | } | ||
952 | |||
953 | if (!data->f01_container) { | ||
954 | dev_err(dev, "Missing F01 container!\n"); | ||
955 | retval = -EINVAL; | ||
956 | goto err_destroy_functions; | ||
957 | } | ||
958 | |||
959 | retval = rmi_read_block(rmi_dev, | ||
960 | data->f01_container->fd.control_base_addr + 1, | ||
961 | data->current_irq_mask, data->num_of_irq_regs); | ||
962 | if (retval < 0) { | ||
963 | dev_err(dev, "%s: Failed to read current IRQ mask.\n", | ||
964 | __func__); | ||
965 | goto err_destroy_functions; | ||
966 | } | ||
967 | |||
968 | if (data->input) { | ||
969 | rmi_driver_set_input_name(rmi_dev, data->input); | ||
970 | if (!rmi_dev->xport->input) { | ||
971 | if (input_register_device(data->input)) { | ||
972 | dev_err(dev, "%s: Failed to register input device.\n", | ||
973 | __func__); | ||
974 | goto err_destroy_functions; | ||
975 | } | ||
976 | } | ||
977 | } | ||
978 | |||
979 | if (data->f01_container->dev.driver) | ||
980 | /* Driver already bound, so enable ATTN now. */ | ||
981 | return enable_sensor(rmi_dev); | ||
982 | |||
983 | return 0; | ||
984 | |||
985 | err_destroy_functions: | ||
986 | rmi_free_function_list(rmi_dev); | ||
987 | err: | ||
988 | return retval < 0 ? retval : 0; | ||
989 | } | ||
990 | |||
991 | static struct rmi_driver rmi_physical_driver = { | ||
992 | .driver = { | ||
993 | .owner = THIS_MODULE, | ||
994 | .name = "rmi4_physical", | ||
995 | .bus = &rmi_bus_type, | ||
996 | .probe = rmi_driver_probe, | ||
997 | .remove = rmi_driver_remove, | ||
998 | }, | ||
999 | .reset_handler = rmi_driver_reset_handler, | ||
1000 | .clear_irq_bits = rmi_driver_clear_irq_bits, | ||
1001 | .set_irq_bits = rmi_driver_set_irq_bits, | ||
1002 | .set_input_params = rmi_driver_set_input_params, | ||
1003 | }; | ||
1004 | |||
1005 | bool rmi_is_physical_driver(struct device_driver *drv) | ||
1006 | { | ||
1007 | return drv == &rmi_physical_driver.driver; | ||
1008 | } | ||
1009 | |||
1010 | int __init rmi_register_physical_driver(void) | ||
1011 | { | ||
1012 | int error; | ||
1013 | |||
1014 | error = driver_register(&rmi_physical_driver.driver); | ||
1015 | if (error) { | ||
1016 | pr_err("%s: driver register failed, code=%d.\n", __func__, | ||
1017 | error); | ||
1018 | return error; | ||
1019 | } | ||
1020 | |||
1021 | return 0; | ||
1022 | } | ||
1023 | |||
1024 | void __exit rmi_unregister_physical_driver(void) | ||
1025 | { | ||
1026 | driver_unregister(&rmi_physical_driver.driver); | ||
1027 | } | ||
diff --git a/drivers/input/rmi4/rmi_driver.h b/drivers/input/rmi4/rmi_driver.h new file mode 100644 index 000000000000..3ab3f1a8078f --- /dev/null +++ b/drivers/input/rmi4/rmi_driver.h | |||
@@ -0,0 +1,103 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2011-2016 Synaptics Incorporated | ||
3 | * Copyright (c) 2011 Unixphere | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or modify it | ||
6 | * under the terms of the GNU General Public License version 2 as published by | ||
7 | * the Free Software Foundation. | ||
8 | */ | ||
9 | |||
10 | #ifndef _RMI_DRIVER_H | ||
11 | #define _RMI_DRIVER_H | ||
12 | |||
13 | #include <linux/ctype.h> | ||
14 | #include <linux/hrtimer.h> | ||
15 | #include <linux/ktime.h> | ||
16 | #include <linux/input.h> | ||
17 | #include "rmi_bus.h" | ||
18 | |||
19 | #define RMI_DRIVER_VERSION "2.0" | ||
20 | |||
21 | #define SYNAPTICS_INPUT_DEVICE_NAME "Synaptics RMI4 Touch Sensor" | ||
22 | #define SYNAPTICS_VENDOR_ID 0x06cb | ||
23 | |||
24 | #define GROUP(_attrs) { \ | ||
25 | .attrs = _attrs, \ | ||
26 | } | ||
27 | |||
28 | #define PDT_PROPERTIES_LOCATION 0x00EF | ||
29 | #define BSR_LOCATION 0x00FE | ||
30 | |||
31 | #define RMI_PDT_PROPS_HAS_BSR 0x02 | ||
32 | |||
33 | #define NAME_BUFFER_SIZE 256 | ||
34 | |||
35 | #define RMI_PDT_ENTRY_SIZE 6 | ||
36 | #define RMI_PDT_FUNCTION_VERSION_MASK 0x60 | ||
37 | #define RMI_PDT_INT_SOURCE_COUNT_MASK 0x07 | ||
38 | |||
39 | #define PDT_START_SCAN_LOCATION 0x00e9 | ||
40 | #define PDT_END_SCAN_LOCATION 0x0005 | ||
41 | #define RMI4_END_OF_PDT(id) ((id) == 0x00 || (id) == 0xff) | ||
42 | |||
43 | struct pdt_entry { | ||
44 | u16 page_start; | ||
45 | u8 query_base_addr; | ||
46 | u8 command_base_addr; | ||
47 | u8 control_base_addr; | ||
48 | u8 data_base_addr; | ||
49 | u8 interrupt_source_count; | ||
50 | u8 function_version; | ||
51 | u8 function_number; | ||
52 | }; | ||
53 | |||
54 | int rmi_read_pdt_entry(struct rmi_device *rmi_dev, struct pdt_entry *entry, | ||
55 | u16 pdt_address); | ||
56 | |||
57 | #define RMI_REG_DESC_PRESENSE_BITS (32 * BITS_PER_BYTE) | ||
58 | #define RMI_REG_DESC_SUBPACKET_BITS (37 * BITS_PER_BYTE) | ||
59 | |||
60 | /* describes a single packet register */ | ||
61 | struct rmi_register_desc_item { | ||
62 | u16 reg; | ||
63 | unsigned long reg_size; | ||
64 | u8 num_subpackets; | ||
65 | unsigned long subpacket_map[BITS_TO_LONGS( | ||
66 | RMI_REG_DESC_SUBPACKET_BITS)]; | ||
67 | }; | ||
68 | |||
69 | /* | ||
70 | * describes the packet registers for a particular type | ||
71 | * (ie query, control, data) | ||
72 | */ | ||
73 | struct rmi_register_descriptor { | ||
74 | unsigned long struct_size; | ||
75 | unsigned long presense_map[BITS_TO_LONGS(RMI_REG_DESC_PRESENSE_BITS)]; | ||
76 | u8 num_registers; | ||
77 | struct rmi_register_desc_item *registers; | ||
78 | }; | ||
79 | |||
80 | int rmi_read_register_desc(struct rmi_device *d, u16 addr, | ||
81 | struct rmi_register_descriptor *rdesc); | ||
82 | const struct rmi_register_desc_item *rmi_get_register_desc_item( | ||
83 | struct rmi_register_descriptor *rdesc, u16 reg); | ||
84 | |||
85 | /* | ||
86 | * Calculate the total size of all of the registers described in the | ||
87 | * descriptor. | ||
88 | */ | ||
89 | size_t rmi_register_desc_calc_size(struct rmi_register_descriptor *rdesc); | ||
90 | int rmi_register_desc_calc_reg_offset( | ||
91 | struct rmi_register_descriptor *rdesc, u16 reg); | ||
92 | bool rmi_register_desc_has_subpacket(const struct rmi_register_desc_item *item, | ||
93 | u8 subpacket); | ||
94 | |||
95 | bool rmi_is_physical_driver(struct device_driver *); | ||
96 | int rmi_register_physical_driver(void); | ||
97 | void rmi_unregister_physical_driver(void); | ||
98 | |||
99 | char *rmi_f01_get_product_ID(struct rmi_function *fn); | ||
100 | |||
101 | extern struct rmi_function_handler rmi_f01_handler; | ||
102 | |||
103 | #endif | ||
diff --git a/drivers/input/rmi4/rmi_f01.c b/drivers/input/rmi4/rmi_f01.c new file mode 100644 index 000000000000..e50ecc6699e7 --- /dev/null +++ b/drivers/input/rmi4/rmi_f01.c | |||
@@ -0,0 +1,574 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2011-2016 Synaptics Incorporated | ||
3 | * Copyright (c) 2011 Unixphere | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or modify it | ||
6 | * under the terms of the GNU General Public License version 2 as published by | ||
7 | * the Free Software Foundation. | ||
8 | */ | ||
9 | |||
10 | #include <linux/kernel.h> | ||
11 | #include <linux/kconfig.h> | ||
12 | #include <linux/rmi.h> | ||
13 | #include <linux/slab.h> | ||
14 | #include <linux/uaccess.h> | ||
15 | #include <linux/of.h> | ||
16 | #include "rmi_driver.h" | ||
17 | |||
18 | #define RMI_PRODUCT_ID_LENGTH 10 | ||
19 | #define RMI_PRODUCT_INFO_LENGTH 2 | ||
20 | |||
21 | #define RMI_DATE_CODE_LENGTH 3 | ||
22 | |||
23 | #define PRODUCT_ID_OFFSET 0x10 | ||
24 | #define PRODUCT_INFO_OFFSET 0x1E | ||
25 | |||
26 | |||
27 | /* Force a firmware reset of the sensor */ | ||
28 | #define RMI_F01_CMD_DEVICE_RESET 1 | ||
29 | |||
30 | /* Various F01_RMI_QueryX bits */ | ||
31 | |||
32 | #define RMI_F01_QRY1_CUSTOM_MAP BIT(0) | ||
33 | #define RMI_F01_QRY1_NON_COMPLIANT BIT(1) | ||
34 | #define RMI_F01_QRY1_HAS_LTS BIT(2) | ||
35 | #define RMI_F01_QRY1_HAS_SENSOR_ID BIT(3) | ||
36 | #define RMI_F01_QRY1_HAS_CHARGER_INP BIT(4) | ||
37 | #define RMI_F01_QRY1_HAS_ADJ_DOZE BIT(5) | ||
38 | #define RMI_F01_QRY1_HAS_ADJ_DOZE_HOFF BIT(6) | ||
39 | #define RMI_F01_QRY1_HAS_QUERY42 BIT(7) | ||
40 | |||
41 | #define RMI_F01_QRY5_YEAR_MASK 0x1f | ||
42 | #define RMI_F01_QRY6_MONTH_MASK 0x0f | ||
43 | #define RMI_F01_QRY7_DAY_MASK 0x1f | ||
44 | |||
45 | #define RMI_F01_QRY2_PRODINFO_MASK 0x7f | ||
46 | |||
47 | #define RMI_F01_BASIC_QUERY_LEN 21 /* From Query 00 through 20 */ | ||
48 | |||
49 | struct f01_basic_properties { | ||
50 | u8 manufacturer_id; | ||
51 | bool has_lts; | ||
52 | bool has_adjustable_doze; | ||
53 | bool has_adjustable_doze_holdoff; | ||
54 | char dom[11]; /* YYYY/MM/DD + '\0' */ | ||
55 | u8 product_id[RMI_PRODUCT_ID_LENGTH + 1]; | ||
56 | u16 productinfo; | ||
57 | u32 firmware_id; | ||
58 | }; | ||
59 | |||
60 | /* F01 device status bits */ | ||
61 | |||
62 | /* Most recent device status event */ | ||
63 | #define RMI_F01_STATUS_CODE(status) ((status) & 0x0f) | ||
64 | /* The device has lost its configuration for some reason. */ | ||
65 | #define RMI_F01_STATUS_UNCONFIGURED(status) (!!((status) & 0x80)) | ||
66 | |||
67 | /* Control register bits */ | ||
68 | |||
69 | /* | ||
70 | * Sleep mode controls power management on the device and affects all | ||
71 | * functions of the device. | ||
72 | */ | ||
73 | #define RMI_F01_CTRL0_SLEEP_MODE_MASK 0x03 | ||
74 | |||
75 | #define RMI_SLEEP_MODE_NORMAL 0x00 | ||
76 | #define RMI_SLEEP_MODE_SENSOR_SLEEP 0x01 | ||
77 | #define RMI_SLEEP_MODE_RESERVED0 0x02 | ||
78 | #define RMI_SLEEP_MODE_RESERVED1 0x03 | ||
79 | |||
80 | /* | ||
81 | * This bit disables whatever sleep mode may be selected by the sleep_mode | ||
82 | * field and forces the device to run at full power without sleeping. | ||
83 | */ | ||
84 | #define RMI_F01_CRTL0_NOSLEEP_BIT BIT(2) | ||
85 | |||
86 | /* | ||
87 | * When this bit is set, the touch controller employs a noise-filtering | ||
88 | * algorithm designed for use with a connected battery charger. | ||
89 | */ | ||
90 | #define RMI_F01_CRTL0_CHARGER_BIT BIT(5) | ||
91 | |||
92 | /* | ||
93 | * Sets the report rate for the device. The effect of this setting is | ||
94 | * highly product dependent. Check the spec sheet for your particular | ||
95 | * touch sensor. | ||
96 | */ | ||
97 | #define RMI_F01_CRTL0_REPORTRATE_BIT BIT(6) | ||
98 | |||
99 | /* | ||
100 | * Written by the host as an indicator that the device has been | ||
101 | * successfully configured. | ||
102 | */ | ||
103 | #define RMI_F01_CRTL0_CONFIGURED_BIT BIT(7) | ||
104 | |||
105 | /** | ||
106 | * @ctrl0 - see the bit definitions above. | ||
107 | * @doze_interval - controls the interval between checks for finger presence | ||
108 | * when the touch sensor is in doze mode, in units of 10ms. | ||
109 | * @wakeup_threshold - controls the capacitance threshold at which the touch | ||
110 | * sensor will decide to wake up from that low power state. | ||
111 | * @doze_holdoff - controls how long the touch sensor waits after the last | ||
112 | * finger lifts before entering the doze state, in units of 100ms. | ||
113 | */ | ||
114 | struct f01_device_control { | ||
115 | u8 ctrl0; | ||
116 | u8 doze_interval; | ||
117 | u8 wakeup_threshold; | ||
118 | u8 doze_holdoff; | ||
119 | }; | ||
120 | |||
121 | struct f01_data { | ||
122 | struct f01_basic_properties properties; | ||
123 | struct f01_device_control device_control; | ||
124 | |||
125 | u16 doze_interval_addr; | ||
126 | u16 wakeup_threshold_addr; | ||
127 | u16 doze_holdoff_addr; | ||
128 | |||
129 | bool suspended; | ||
130 | bool old_nosleep; | ||
131 | |||
132 | unsigned int num_of_irq_regs; | ||
133 | }; | ||
134 | |||
135 | static int rmi_f01_read_properties(struct rmi_device *rmi_dev, | ||
136 | u16 query_base_addr, | ||
137 | struct f01_basic_properties *props) | ||
138 | { | ||
139 | u8 queries[RMI_F01_BASIC_QUERY_LEN]; | ||
140 | int ret; | ||
141 | int query_offset = query_base_addr; | ||
142 | bool has_ds4_queries = false; | ||
143 | bool has_query42 = false; | ||
144 | bool has_sensor_id = false; | ||
145 | bool has_package_id_query = false; | ||
146 | bool has_build_id_query = false; | ||
147 | u16 prod_info_addr; | ||
148 | u8 ds4_query_len; | ||
149 | |||
150 | ret = rmi_read_block(rmi_dev, query_offset, | ||
151 | queries, RMI_F01_BASIC_QUERY_LEN); | ||
152 | if (ret) { | ||
153 | dev_err(&rmi_dev->dev, | ||
154 | "Failed to read device query registers: %d\n", ret); | ||
155 | return ret; | ||
156 | } | ||
157 | |||
158 | prod_info_addr = query_offset + 17; | ||
159 | query_offset += RMI_F01_BASIC_QUERY_LEN; | ||
160 | |||
161 | /* Now parse what we got */ | ||
162 | props->manufacturer_id = queries[0]; | ||
163 | |||
164 | props->has_lts = queries[1] & RMI_F01_QRY1_HAS_LTS; | ||
165 | props->has_adjustable_doze = | ||
166 | queries[1] & RMI_F01_QRY1_HAS_ADJ_DOZE; | ||
167 | props->has_adjustable_doze_holdoff = | ||
168 | queries[1] & RMI_F01_QRY1_HAS_ADJ_DOZE_HOFF; | ||
169 | has_query42 = queries[1] & RMI_F01_QRY1_HAS_QUERY42; | ||
170 | has_sensor_id = queries[1] & RMI_F01_QRY1_HAS_SENSOR_ID; | ||
171 | |||
172 | snprintf(props->dom, sizeof(props->dom), "20%02d/%02d/%02d", | ||
173 | queries[5] & RMI_F01_QRY5_YEAR_MASK, | ||
174 | queries[6] & RMI_F01_QRY6_MONTH_MASK, | ||
175 | queries[7] & RMI_F01_QRY7_DAY_MASK); | ||
176 | |||
177 | memcpy(props->product_id, &queries[11], | ||
178 | RMI_PRODUCT_ID_LENGTH); | ||
179 | props->product_id[RMI_PRODUCT_ID_LENGTH] = '\0'; | ||
180 | |||
181 | props->productinfo = | ||
182 | ((queries[2] & RMI_F01_QRY2_PRODINFO_MASK) << 7) | | ||
183 | (queries[3] & RMI_F01_QRY2_PRODINFO_MASK); | ||
184 | |||
185 | if (has_sensor_id) | ||
186 | query_offset++; | ||
187 | |||
188 | if (has_query42) { | ||
189 | ret = rmi_read(rmi_dev, query_offset, queries); | ||
190 | if (ret) { | ||
191 | dev_err(&rmi_dev->dev, | ||
192 | "Failed to read query 42 register: %d\n", ret); | ||
193 | return ret; | ||
194 | } | ||
195 | |||
196 | has_ds4_queries = !!(queries[0] & BIT(0)); | ||
197 | query_offset++; | ||
198 | } | ||
199 | |||
200 | if (has_ds4_queries) { | ||
201 | ret = rmi_read(rmi_dev, query_offset, &ds4_query_len); | ||
202 | if (ret) { | ||
203 | dev_err(&rmi_dev->dev, | ||
204 | "Failed to read DS4 queries length: %d\n", ret); | ||
205 | return ret; | ||
206 | } | ||
207 | query_offset++; | ||
208 | |||
209 | if (ds4_query_len > 0) { | ||
210 | ret = rmi_read(rmi_dev, query_offset, queries); | ||
211 | if (ret) { | ||
212 | dev_err(&rmi_dev->dev, | ||
213 | "Failed to read DS4 queries: %d\n", | ||
214 | ret); | ||
215 | return ret; | ||
216 | } | ||
217 | |||
218 | has_package_id_query = !!(queries[0] & BIT(0)); | ||
219 | has_build_id_query = !!(queries[0] & BIT(1)); | ||
220 | } | ||
221 | |||
222 | if (has_package_id_query) | ||
223 | prod_info_addr++; | ||
224 | |||
225 | if (has_build_id_query) { | ||
226 | ret = rmi_read_block(rmi_dev, prod_info_addr, queries, | ||
227 | 3); | ||
228 | if (ret) { | ||
229 | dev_err(&rmi_dev->dev, | ||
230 | "Failed to read product info: %d\n", | ||
231 | ret); | ||
232 | return ret; | ||
233 | } | ||
234 | |||
235 | props->firmware_id = queries[1] << 8 | queries[0]; | ||
236 | props->firmware_id += queries[2] * 65536; | ||
237 | } | ||
238 | } | ||
239 | |||
240 | return 0; | ||
241 | } | ||
242 | |||
243 | char *rmi_f01_get_product_ID(struct rmi_function *fn) | ||
244 | { | ||
245 | struct f01_data *f01 = dev_get_drvdata(&fn->dev); | ||
246 | |||
247 | return f01->properties.product_id; | ||
248 | } | ||
249 | |||
250 | static int rmi_f01_probe(struct rmi_function *fn) | ||
251 | { | ||
252 | struct rmi_device *rmi_dev = fn->rmi_dev; | ||
253 | struct rmi_driver_data *driver_data = dev_get_drvdata(&rmi_dev->dev); | ||
254 | struct rmi_device_platform_data *pdata = rmi_get_platform_data(rmi_dev); | ||
255 | struct f01_data *f01; | ||
256 | int error; | ||
257 | u16 ctrl_base_addr = fn->fd.control_base_addr; | ||
258 | u8 device_status; | ||
259 | u8 temp; | ||
260 | |||
261 | f01 = devm_kzalloc(&fn->dev, sizeof(struct f01_data), GFP_KERNEL); | ||
262 | if (!f01) | ||
263 | return -ENOMEM; | ||
264 | |||
265 | f01->num_of_irq_regs = driver_data->num_of_irq_regs; | ||
266 | |||
267 | /* | ||
268 | * Set the configured bit and (optionally) other important stuff | ||
269 | * in the device control register. | ||
270 | */ | ||
271 | |||
272 | error = rmi_read(rmi_dev, fn->fd.control_base_addr, | ||
273 | &f01->device_control.ctrl0); | ||
274 | if (error) { | ||
275 | dev_err(&fn->dev, "Failed to read F01 control: %d\n", error); | ||
276 | return error; | ||
277 | } | ||
278 | |||
279 | switch (pdata->power_management.nosleep) { | ||
280 | case RMI_F01_NOSLEEP_DEFAULT: | ||
281 | break; | ||
282 | case RMI_F01_NOSLEEP_OFF: | ||
283 | f01->device_control.ctrl0 &= ~RMI_F01_CRTL0_NOSLEEP_BIT; | ||
284 | break; | ||
285 | case RMI_F01_NOSLEEP_ON: | ||
286 | f01->device_control.ctrl0 |= RMI_F01_CRTL0_NOSLEEP_BIT; | ||
287 | break; | ||
288 | } | ||
289 | |||
290 | /* | ||
291 | * Sleep mode might be set as a hangover from a system crash or | ||
292 | * reboot without power cycle. If so, clear it so the sensor | ||
293 | * is certain to function. | ||
294 | */ | ||
295 | if ((f01->device_control.ctrl0 & RMI_F01_CTRL0_SLEEP_MODE_MASK) != | ||
296 | RMI_SLEEP_MODE_NORMAL) { | ||
297 | dev_warn(&fn->dev, | ||
298 | "WARNING: Non-zero sleep mode found. Clearing...\n"); | ||
299 | f01->device_control.ctrl0 &= ~RMI_F01_CTRL0_SLEEP_MODE_MASK; | ||
300 | } | ||
301 | |||
302 | f01->device_control.ctrl0 |= RMI_F01_CRTL0_CONFIGURED_BIT; | ||
303 | |||
304 | error = rmi_write(rmi_dev, fn->fd.control_base_addr, | ||
305 | f01->device_control.ctrl0); | ||
306 | if (error) { | ||
307 | dev_err(&fn->dev, "Failed to write F01 control: %d\n", error); | ||
308 | return error; | ||
309 | } | ||
310 | |||
311 | /* Dummy read in order to clear irqs */ | ||
312 | error = rmi_read(rmi_dev, fn->fd.data_base_addr + 1, &temp); | ||
313 | if (error < 0) { | ||
314 | dev_err(&fn->dev, "Failed to read Interrupt Status.\n"); | ||
315 | return error; | ||
316 | } | ||
317 | |||
318 | error = rmi_f01_read_properties(rmi_dev, fn->fd.query_base_addr, | ||
319 | &f01->properties); | ||
320 | if (error < 0) { | ||
321 | dev_err(&fn->dev, "Failed to read F01 properties.\n"); | ||
322 | return error; | ||
323 | } | ||
324 | |||
325 | dev_info(&fn->dev, "found RMI device, manufacturer: %s, product: %s, fw id: %d\n", | ||
326 | f01->properties.manufacturer_id == 1 ? "Synaptics" : "unknown", | ||
327 | f01->properties.product_id, f01->properties.firmware_id); | ||
328 | |||
329 | /* Advance to interrupt control registers, then skip over them. */ | ||
330 | ctrl_base_addr++; | ||
331 | ctrl_base_addr += f01->num_of_irq_regs; | ||
332 | |||
333 | /* read control register */ | ||
334 | if (f01->properties.has_adjustable_doze) { | ||
335 | f01->doze_interval_addr = ctrl_base_addr; | ||
336 | ctrl_base_addr++; | ||
337 | |||
338 | if (pdata->power_management.doze_interval) { | ||
339 | f01->device_control.doze_interval = | ||
340 | pdata->power_management.doze_interval; | ||
341 | error = rmi_write(rmi_dev, f01->doze_interval_addr, | ||
342 | f01->device_control.doze_interval); | ||
343 | if (error) { | ||
344 | dev_err(&fn->dev, | ||
345 | "Failed to configure F01 doze interval register: %d\n", | ||
346 | error); | ||
347 | return error; | ||
348 | } | ||
349 | } else { | ||
350 | error = rmi_read(rmi_dev, f01->doze_interval_addr, | ||
351 | &f01->device_control.doze_interval); | ||
352 | if (error) { | ||
353 | dev_err(&fn->dev, | ||
354 | "Failed to read F01 doze interval register: %d\n", | ||
355 | error); | ||
356 | return error; | ||
357 | } | ||
358 | } | ||
359 | |||
360 | f01->wakeup_threshold_addr = ctrl_base_addr; | ||
361 | ctrl_base_addr++; | ||
362 | |||
363 | if (pdata->power_management.wakeup_threshold) { | ||
364 | f01->device_control.wakeup_threshold = | ||
365 | pdata->power_management.wakeup_threshold; | ||
366 | error = rmi_write(rmi_dev, f01->wakeup_threshold_addr, | ||
367 | f01->device_control.wakeup_threshold); | ||
368 | if (error) { | ||
369 | dev_err(&fn->dev, | ||
370 | "Failed to configure F01 wakeup threshold register: %d\n", | ||
371 | error); | ||
372 | return error; | ||
373 | } | ||
374 | } else { | ||
375 | error = rmi_read(rmi_dev, f01->wakeup_threshold_addr, | ||
376 | &f01->device_control.wakeup_threshold); | ||
377 | if (error < 0) { | ||
378 | dev_err(&fn->dev, | ||
379 | "Failed to read F01 wakeup threshold register: %d\n", | ||
380 | error); | ||
381 | return error; | ||
382 | } | ||
383 | } | ||
384 | } | ||
385 | |||
386 | if (f01->properties.has_lts) | ||
387 | ctrl_base_addr++; | ||
388 | |||
389 | if (f01->properties.has_adjustable_doze_holdoff) { | ||
390 | f01->doze_holdoff_addr = ctrl_base_addr; | ||
391 | ctrl_base_addr++; | ||
392 | |||
393 | if (pdata->power_management.doze_holdoff) { | ||
394 | f01->device_control.doze_holdoff = | ||
395 | pdata->power_management.doze_holdoff; | ||
396 | error = rmi_write(rmi_dev, f01->doze_holdoff_addr, | ||
397 | f01->device_control.doze_holdoff); | ||
398 | if (error) { | ||
399 | dev_err(&fn->dev, | ||
400 | "Failed to configure F01 doze holdoff register: %d\n", | ||
401 | error); | ||
402 | return error; | ||
403 | } | ||
404 | } else { | ||
405 | error = rmi_read(rmi_dev, f01->doze_holdoff_addr, | ||
406 | &f01->device_control.doze_holdoff); | ||
407 | if (error) { | ||
408 | dev_err(&fn->dev, | ||
409 | "Failed to read F01 doze holdoff register: %d\n", | ||
410 | error); | ||
411 | return error; | ||
412 | } | ||
413 | } | ||
414 | } | ||
415 | |||
416 | error = rmi_read(rmi_dev, fn->fd.data_base_addr, &device_status); | ||
417 | if (error < 0) { | ||
418 | dev_err(&fn->dev, | ||
419 | "Failed to read device status: %d\n", error); | ||
420 | return error; | ||
421 | } | ||
422 | |||
423 | if (RMI_F01_STATUS_UNCONFIGURED(device_status)) { | ||
424 | dev_err(&fn->dev, | ||
425 | "Device was reset during configuration process, status: %#02x!\n", | ||
426 | RMI_F01_STATUS_CODE(device_status)); | ||
427 | return -EINVAL; | ||
428 | } | ||
429 | |||
430 | dev_set_drvdata(&fn->dev, f01); | ||
431 | |||
432 | return 0; | ||
433 | } | ||
434 | |||
435 | static int rmi_f01_config(struct rmi_function *fn) | ||
436 | { | ||
437 | struct f01_data *f01 = dev_get_drvdata(&fn->dev); | ||
438 | int error; | ||
439 | |||
440 | error = rmi_write(fn->rmi_dev, fn->fd.control_base_addr, | ||
441 | f01->device_control.ctrl0); | ||
442 | if (error) { | ||
443 | dev_err(&fn->dev, | ||
444 | "Failed to write device_control register: %d\n", error); | ||
445 | return error; | ||
446 | } | ||
447 | |||
448 | if (f01->properties.has_adjustable_doze) { | ||
449 | error = rmi_write(fn->rmi_dev, f01->doze_interval_addr, | ||
450 | f01->device_control.doze_interval); | ||
451 | if (error) { | ||
452 | dev_err(&fn->dev, | ||
453 | "Failed to write doze interval: %d\n", error); | ||
454 | return error; | ||
455 | } | ||
456 | |||
457 | error = rmi_write_block(fn->rmi_dev, | ||
458 | f01->wakeup_threshold_addr, | ||
459 | &f01->device_control.wakeup_threshold, | ||
460 | sizeof(u8)); | ||
461 | if (error) { | ||
462 | dev_err(&fn->dev, | ||
463 | "Failed to write wakeup threshold: %d\n", | ||
464 | error); | ||
465 | return error; | ||
466 | } | ||
467 | } | ||
468 | |||
469 | if (f01->properties.has_adjustable_doze_holdoff) { | ||
470 | error = rmi_write(fn->rmi_dev, f01->doze_holdoff_addr, | ||
471 | f01->device_control.doze_holdoff); | ||
472 | if (error) { | ||
473 | dev_err(&fn->dev, | ||
474 | "Failed to write doze holdoff: %d\n", error); | ||
475 | return error; | ||
476 | } | ||
477 | } | ||
478 | |||
479 | return 0; | ||
480 | } | ||
481 | |||
482 | static int rmi_f01_suspend(struct rmi_function *fn) | ||
483 | { | ||
484 | struct f01_data *f01 = dev_get_drvdata(&fn->dev); | ||
485 | int error; | ||
486 | |||
487 | f01->old_nosleep = | ||
488 | f01->device_control.ctrl0 & RMI_F01_CRTL0_NOSLEEP_BIT; | ||
489 | f01->device_control.ctrl0 &= ~RMI_F01_CRTL0_NOSLEEP_BIT; | ||
490 | |||
491 | f01->device_control.ctrl0 &= ~RMI_F01_CTRL0_SLEEP_MODE_MASK; | ||
492 | if (device_may_wakeup(fn->rmi_dev->xport->dev)) | ||
493 | f01->device_control.ctrl0 |= RMI_SLEEP_MODE_RESERVED1; | ||
494 | else | ||
495 | f01->device_control.ctrl0 |= RMI_SLEEP_MODE_SENSOR_SLEEP; | ||
496 | |||
497 | error = rmi_write(fn->rmi_dev, fn->fd.control_base_addr, | ||
498 | f01->device_control.ctrl0); | ||
499 | if (error) { | ||
500 | dev_err(&fn->dev, "Failed to write sleep mode: %d.\n", error); | ||
501 | if (f01->old_nosleep) | ||
502 | f01->device_control.ctrl0 |= RMI_F01_CRTL0_NOSLEEP_BIT; | ||
503 | f01->device_control.ctrl0 &= ~RMI_F01_CTRL0_SLEEP_MODE_MASK; | ||
504 | f01->device_control.ctrl0 |= RMI_SLEEP_MODE_NORMAL; | ||
505 | return error; | ||
506 | } | ||
507 | |||
508 | return 0; | ||
509 | } | ||
510 | |||
511 | static int rmi_f01_resume(struct rmi_function *fn) | ||
512 | { | ||
513 | struct f01_data *f01 = dev_get_drvdata(&fn->dev); | ||
514 | int error; | ||
515 | |||
516 | if (f01->old_nosleep) | ||
517 | f01->device_control.ctrl0 |= RMI_F01_CRTL0_NOSLEEP_BIT; | ||
518 | |||
519 | f01->device_control.ctrl0 &= ~RMI_F01_CTRL0_SLEEP_MODE_MASK; | ||
520 | f01->device_control.ctrl0 |= RMI_SLEEP_MODE_NORMAL; | ||
521 | |||
522 | error = rmi_write(fn->rmi_dev, fn->fd.control_base_addr, | ||
523 | f01->device_control.ctrl0); | ||
524 | if (error) { | ||
525 | dev_err(&fn->dev, | ||
526 | "Failed to restore normal operation: %d.\n", error); | ||
527 | return error; | ||
528 | } | ||
529 | |||
530 | return 0; | ||
531 | } | ||
532 | |||
533 | static int rmi_f01_attention(struct rmi_function *fn, | ||
534 | unsigned long *irq_bits) | ||
535 | { | ||
536 | struct rmi_device *rmi_dev = fn->rmi_dev; | ||
537 | int error; | ||
538 | u8 device_status; | ||
539 | |||
540 | error = rmi_read(rmi_dev, fn->fd.data_base_addr, &device_status); | ||
541 | if (error) { | ||
542 | dev_err(&fn->dev, | ||
543 | "Failed to read device status: %d.\n", error); | ||
544 | return error; | ||
545 | } | ||
546 | |||
547 | if (RMI_F01_STATUS_UNCONFIGURED(device_status)) { | ||
548 | dev_warn(&fn->dev, "Device reset detected.\n"); | ||
549 | error = rmi_dev->driver->reset_handler(rmi_dev); | ||
550 | if (error) { | ||
551 | dev_err(&fn->dev, "Device reset failed: %d\n", error); | ||
552 | return error; | ||
553 | } | ||
554 | } | ||
555 | |||
556 | return 0; | ||
557 | } | ||
558 | |||
559 | struct rmi_function_handler rmi_f01_handler = { | ||
560 | .driver = { | ||
561 | .name = "rmi4_f01", | ||
562 | /* | ||
563 | * Do not allow user unbinding F01 as it is critical | ||
564 | * function. | ||
565 | */ | ||
566 | .suppress_bind_attrs = true, | ||
567 | }, | ||
568 | .func = 0x01, | ||
569 | .probe = rmi_f01_probe, | ||
570 | .config = rmi_f01_config, | ||
571 | .attention = rmi_f01_attention, | ||
572 | .suspend = rmi_f01_suspend, | ||
573 | .resume = rmi_f01_resume, | ||
574 | }; | ||
diff --git a/include/linux/rmi.h b/include/linux/rmi.h new file mode 100644 index 000000000000..c748fa302067 --- /dev/null +++ b/include/linux/rmi.h | |||
@@ -0,0 +1,209 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2011-2016 Synaptics Incorporated | ||
3 | * Copyright (c) 2011 Unixphere | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or modify it | ||
6 | * under the terms of the GNU General Public License version 2 as published by | ||
7 | * the Free Software Foundation. | ||
8 | */ | ||
9 | |||
10 | #ifndef _RMI_H | ||
11 | #define _RMI_H | ||
12 | #include <linux/kernel.h> | ||
13 | #include <linux/device.h> | ||
14 | #include <linux/interrupt.h> | ||
15 | #include <linux/input.h> | ||
16 | #include <linux/list.h> | ||
17 | #include <linux/module.h> | ||
18 | #include <linux/types.h> | ||
19 | |||
20 | #define NAME_BUFFER_SIZE 256 | ||
21 | |||
22 | /** | ||
23 | * struct rmi_f01_power - override default power management settings. | ||
24 | * | ||
25 | */ | ||
26 | enum rmi_f01_nosleep { | ||
27 | RMI_F01_NOSLEEP_DEFAULT = 0, | ||
28 | RMI_F01_NOSLEEP_OFF = 1, | ||
29 | RMI_F01_NOSLEEP_ON = 2 | ||
30 | }; | ||
31 | |||
32 | /** | ||
33 | * struct rmi_f01_power_management -When non-zero, these values will be written | ||
34 | * to the touch sensor to override the default firmware settigns. For a | ||
35 | * detailed explanation of what each field does, see the corresponding | ||
36 | * documention in the RMI4 specification. | ||
37 | * | ||
38 | * @nosleep - specifies whether the device is permitted to sleep or doze (that | ||
39 | * is, enter a temporary low power state) when no fingers are touching the | ||
40 | * sensor. | ||
41 | * @wakeup_threshold - controls the capacitance threshold at which the touch | ||
42 | * sensor will decide to wake up from that low power state. | ||
43 | * @doze_holdoff - controls how long the touch sensor waits after the last | ||
44 | * finger lifts before entering the doze state, in units of 100ms. | ||
45 | * @doze_interval - controls the interval between checks for finger presence | ||
46 | * when the touch sensor is in doze mode, in units of 10ms. | ||
47 | */ | ||
48 | struct rmi_f01_power_management { | ||
49 | enum rmi_f01_nosleep nosleep; | ||
50 | u8 wakeup_threshold; | ||
51 | u8 doze_holdoff; | ||
52 | u8 doze_interval; | ||
53 | }; | ||
54 | |||
55 | /** | ||
56 | * struct rmi_device_platform_data - system specific configuration info. | ||
57 | * | ||
58 | * @reset_delay_ms - after issuing a reset command to the touch sensor, the | ||
59 | * driver waits a few milliseconds to give the firmware a chance to | ||
60 | * to re-initialize. You can override the default wait period here. | ||
61 | */ | ||
62 | struct rmi_device_platform_data { | ||
63 | int reset_delay_ms; | ||
64 | |||
65 | /* function handler pdata */ | ||
66 | struct rmi_f01_power_management power_management; | ||
67 | }; | ||
68 | |||
69 | /** | ||
70 | * struct rmi_function_descriptor - RMI function base addresses | ||
71 | * | ||
72 | * @query_base_addr: The RMI Query base address | ||
73 | * @command_base_addr: The RMI Command base address | ||
74 | * @control_base_addr: The RMI Control base address | ||
75 | * @data_base_addr: The RMI Data base address | ||
76 | * @interrupt_source_count: The number of irqs this RMI function needs | ||
77 | * @function_number: The RMI function number | ||
78 | * | ||
79 | * This struct is used when iterating the Page Description Table. The addresses | ||
80 | * are 16-bit values to include the current page address. | ||
81 | * | ||
82 | */ | ||
83 | struct rmi_function_descriptor { | ||
84 | u16 query_base_addr; | ||
85 | u16 command_base_addr; | ||
86 | u16 control_base_addr; | ||
87 | u16 data_base_addr; | ||
88 | u8 interrupt_source_count; | ||
89 | u8 function_number; | ||
90 | u8 function_version; | ||
91 | }; | ||
92 | |||
93 | struct rmi_device; | ||
94 | |||
95 | /** | ||
96 | * struct rmi_transport_dev - represent an RMI transport device | ||
97 | * | ||
98 | * @dev: Pointer to the communication device, e.g. i2c or spi | ||
99 | * @rmi_dev: Pointer to the RMI device | ||
100 | * @proto_name: name of the transport protocol (SPI, i2c, etc) | ||
101 | * @ops: pointer to transport operations implementation | ||
102 | * | ||
103 | * The RMI transport device implements the glue between different communication | ||
104 | * buses such as I2C and SPI. | ||
105 | * | ||
106 | */ | ||
107 | struct rmi_transport_dev { | ||
108 | struct device *dev; | ||
109 | struct rmi_device *rmi_dev; | ||
110 | |||
111 | const char *proto_name; | ||
112 | const struct rmi_transport_ops *ops; | ||
113 | |||
114 | struct rmi_device_platform_data pdata; | ||
115 | |||
116 | struct input_dev *input; | ||
117 | |||
118 | void *attn_data; | ||
119 | int attn_size; | ||
120 | }; | ||
121 | |||
122 | /** | ||
123 | * struct rmi_transport_ops - defines transport protocol operations. | ||
124 | * | ||
125 | * @write_block: Writing a block of data to the specified address | ||
126 | * @read_block: Read a block of data from the specified address. | ||
127 | */ | ||
128 | struct rmi_transport_ops { | ||
129 | int (*write_block)(struct rmi_transport_dev *xport, u16 addr, | ||
130 | const void *buf, size_t len); | ||
131 | int (*read_block)(struct rmi_transport_dev *xport, u16 addr, | ||
132 | void *buf, size_t len); | ||
133 | int (*reset)(struct rmi_transport_dev *xport, u16 reset_addr); | ||
134 | }; | ||
135 | |||
136 | /** | ||
137 | * struct rmi_driver - driver for an RMI4 sensor on the RMI bus. | ||
138 | * | ||
139 | * @driver: Device driver model driver | ||
140 | * @reset_handler: Called when a reset is detected. | ||
141 | * @clear_irq_bits: Clear the specified bits in the current interrupt mask. | ||
142 | * @set_irq_bist: Set the specified bits in the current interrupt mask. | ||
143 | * @store_productid: Callback for cache product id from function 01 | ||
144 | * @data: Private data pointer | ||
145 | * | ||
146 | */ | ||
147 | struct rmi_driver { | ||
148 | struct device_driver driver; | ||
149 | |||
150 | int (*reset_handler)(struct rmi_device *rmi_dev); | ||
151 | int (*clear_irq_bits)(struct rmi_device *rmi_dev, unsigned long *mask); | ||
152 | int (*set_irq_bits)(struct rmi_device *rmi_dev, unsigned long *mask); | ||
153 | int (*store_productid)(struct rmi_device *rmi_dev); | ||
154 | int (*set_input_params)(struct rmi_device *rmi_dev, | ||
155 | struct input_dev *input); | ||
156 | void *data; | ||
157 | }; | ||
158 | |||
159 | /** | ||
160 | * struct rmi_device - represents an RMI4 sensor device on the RMI bus. | ||
161 | * | ||
162 | * @dev: The device created for the RMI bus | ||
163 | * @number: Unique number for the device on the bus. | ||
164 | * @driver: Pointer to associated driver | ||
165 | * @xport: Pointer to the transport interface | ||
166 | * | ||
167 | */ | ||
168 | struct rmi_device { | ||
169 | struct device dev; | ||
170 | int number; | ||
171 | |||
172 | struct rmi_driver *driver; | ||
173 | struct rmi_transport_dev *xport; | ||
174 | |||
175 | }; | ||
176 | |||
177 | struct rmi_driver_data { | ||
178 | struct list_head function_list; | ||
179 | |||
180 | struct rmi_device *rmi_dev; | ||
181 | |||
182 | struct rmi_function *f01_container; | ||
183 | bool f01_bootloader_mode; | ||
184 | |||
185 | u32 attn_count; | ||
186 | int num_of_irq_regs; | ||
187 | int irq_count; | ||
188 | unsigned long *irq_status; | ||
189 | unsigned long *fn_irq_bits; | ||
190 | unsigned long *current_irq_mask; | ||
191 | unsigned long *new_irq_mask; | ||
192 | struct mutex irq_mutex; | ||
193 | struct input_dev *input; | ||
194 | |||
195 | u8 pdt_props; | ||
196 | u8 bsr; | ||
197 | |||
198 | bool enabled; | ||
199 | |||
200 | void *data; | ||
201 | }; | ||
202 | |||
203 | int rmi_register_transport_device(struct rmi_transport_dev *xport); | ||
204 | void rmi_unregister_transport_device(struct rmi_transport_dev *xport); | ||
205 | int rmi_process_interrupt_requests(struct rmi_device *rmi_dev); | ||
206 | |||
207 | int rmi_driver_suspend(struct rmi_device *rmi_dev); | ||
208 | int rmi_driver_resume(struct rmi_device *rmi_dev); | ||
209 | #endif | ||
diff --git a/include/uapi/linux/input.h b/include/uapi/linux/input.h index 2758687300b4..01113841190d 100644 --- a/include/uapi/linux/input.h +++ b/include/uapi/linux/input.h | |||
@@ -246,6 +246,7 @@ struct input_mask { | |||
246 | #define BUS_GSC 0x1A | 246 | #define BUS_GSC 0x1A |
247 | #define BUS_ATARI 0x1B | 247 | #define BUS_ATARI 0x1B |
248 | #define BUS_SPI 0x1C | 248 | #define BUS_SPI 0x1C |
249 | #define BUS_RMI 0x1D | ||
249 | 250 | ||
250 | /* | 251 | /* |
251 | * MT_TOOL types | 252 | * MT_TOOL types |