xref: /linux/drivers/misc/lis3lv02d/lis3lv02d.c (revision f2ee442115c9b6219083c019939a9cc0c9abb2f8)
1 /*
2  *  lis3lv02d.c - ST LIS3LV02DL accelerometer driver
3  *
4  *  Copyright (C) 2007-2008 Yan Burman
5  *  Copyright (C) 2008 Eric Piel
6  *  Copyright (C) 2008-2009 Pavel Machek
7  *
8  *  This program is free software; you can redistribute it and/or modify
9  *  it under the terms of the GNU General Public License as published by
10  *  the Free Software Foundation; either version 2 of the License, or
11  *  (at your option) any later version.
12  *
13  *  This program is distributed in the hope that it will be useful,
14  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
15  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16  *  GNU General Public License for more details.
17  *
18  *  You should have received a copy of the GNU General Public License
19  *  along with this program; if not, write to the Free Software
20  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
21  */
22 
23 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
24 
25 #include <linux/kernel.h>
26 #include <linux/init.h>
27 #include <linux/dmi.h>
28 #include <linux/module.h>
29 #include <linux/types.h>
30 #include <linux/platform_device.h>
31 #include <linux/interrupt.h>
32 #include <linux/input-polldev.h>
33 #include <linux/delay.h>
34 #include <linux/wait.h>
35 #include <linux/poll.h>
36 #include <linux/slab.h>
37 #include <linux/freezer.h>
38 #include <linux/uaccess.h>
39 #include <linux/miscdevice.h>
40 #include <linux/pm_runtime.h>
41 #include <linux/atomic.h>
42 #include "lis3lv02d.h"
43 
44 #define DRIVER_NAME     "lis3lv02d"
45 
46 /* joystick device poll interval in milliseconds */
47 #define MDPS_POLL_INTERVAL 50
48 #define MDPS_POLL_MIN	   0
49 #define MDPS_POLL_MAX	   2000
50 
51 #define LIS3_SYSFS_POWERDOWN_DELAY 5000 /* In milliseconds */
52 
53 #define SELFTEST_OK	       0
54 #define SELFTEST_FAIL	       -1
55 #define SELFTEST_IRQ	       -2
56 
57 #define IRQ_LINE0	       0
58 #define IRQ_LINE1	       1
59 
60 /*
61  * The sensor can also generate interrupts (DRDY) but it's pretty pointless
62  * because they are generated even if the data do not change. So it's better
63  * to keep the interrupt for the free-fall event. The values are updated at
64  * 40Hz (at the lowest frequency), but as it can be pretty time consuming on
65  * some low processor, we poll the sensor only at 20Hz... enough for the
66  * joystick.
67  */
68 
69 #define LIS3_PWRON_DELAY_WAI_12B	(5000)
70 #define LIS3_PWRON_DELAY_WAI_8B		(3000)
71 
72 /*
73  * LIS3LV02D spec says 1024 LSBs corresponds 1 G -> 1LSB is 1000/1024 mG
74  * LIS302D spec says: 18 mG / digit
75  * LIS3_ACCURACY is used to increase accuracy of the intermediate
76  * calculation results.
77  */
78 #define LIS3_ACCURACY			1024
79 /* Sensitivity values for -2G +2G scale */
80 #define LIS3_SENSITIVITY_12B		((LIS3_ACCURACY * 1000) / 1024)
81 #define LIS3_SENSITIVITY_8B		(18 * LIS3_ACCURACY)
82 
83 #define LIS3_DEFAULT_FUZZ_12B		3
84 #define LIS3_DEFAULT_FLAT_12B		3
85 #define LIS3_DEFAULT_FUZZ_8B		1
86 #define LIS3_DEFAULT_FLAT_8B		1
87 
88 struct lis3lv02d lis3_dev = {
89 	.misc_wait   = __WAIT_QUEUE_HEAD_INITIALIZER(lis3_dev.misc_wait),
90 };
91 EXPORT_SYMBOL_GPL(lis3_dev);
92 
93 /* just like param_set_int() but does sanity-check so that it won't point
94  * over the axis array size
95  */
96 static int param_set_axis(const char *val, const struct kernel_param *kp)
97 {
98 	int ret = param_set_int(val, kp);
99 	if (!ret) {
100 		int val = *(int *)kp->arg;
101 		if (val < 0)
102 			val = -val;
103 		if (!val || val > 3)
104 			return -EINVAL;
105 	}
106 	return ret;
107 }
108 
109 static struct kernel_param_ops param_ops_axis = {
110 	.set = param_set_axis,
111 	.get = param_get_int,
112 };
113 
114 module_param_array_named(axes, lis3_dev.ac.as_array, axis, NULL, 0644);
115 MODULE_PARM_DESC(axes, "Axis-mapping for x,y,z directions");
116 
117 static s16 lis3lv02d_read_8(struct lis3lv02d *lis3, int reg)
118 {
119 	s8 lo;
120 	if (lis3->read(lis3, reg, &lo) < 0)
121 		return 0;
122 
123 	return lo;
124 }
125 
126 static s16 lis3lv02d_read_12(struct lis3lv02d *lis3, int reg)
127 {
128 	u8 lo, hi;
129 
130 	lis3->read(lis3, reg - 1, &lo);
131 	lis3->read(lis3, reg, &hi);
132 	/* In "12 bit right justified" mode, bit 6, bit 7, bit 8 = bit 5 */
133 	return (s16)((hi << 8) | lo);
134 }
135 
136 /**
137  * lis3lv02d_get_axis - For the given axis, give the value converted
138  * @axis:      1,2,3 - can also be negative
139  * @hw_values: raw values returned by the hardware
140  *
141  * Returns the converted value.
142  */
143 static inline int lis3lv02d_get_axis(s8 axis, int hw_values[3])
144 {
145 	if (axis > 0)
146 		return hw_values[axis - 1];
147 	else
148 		return -hw_values[-axis - 1];
149 }
150 
151 /**
152  * lis3lv02d_get_xyz - Get X, Y and Z axis values from the accelerometer
153  * @lis3: pointer to the device struct
154  * @x:    where to store the X axis value
155  * @y:    where to store the Y axis value
156  * @z:    where to store the Z axis value
157  *
158  * Note that 40Hz input device can eat up about 10% CPU at 800MHZ
159  */
160 static void lis3lv02d_get_xyz(struct lis3lv02d *lis3, int *x, int *y, int *z)
161 {
162 	int position[3];
163 	int i;
164 
165 	if (lis3->blkread) {
166 		if (lis3->whoami == WAI_12B) {
167 			u16 data[3];
168 			lis3->blkread(lis3, OUTX_L, 6, (u8 *)data);
169 			for (i = 0; i < 3; i++)
170 				position[i] = (s16)le16_to_cpu(data[i]);
171 		} else {
172 			u8 data[5];
173 			/* Data: x, dummy, y, dummy, z */
174 			lis3->blkread(lis3, OUTX, 5, data);
175 			for (i = 0; i < 3; i++)
176 				position[i] = (s8)data[i * 2];
177 		}
178 	} else {
179 		position[0] = lis3->read_data(lis3, OUTX);
180 		position[1] = lis3->read_data(lis3, OUTY);
181 		position[2] = lis3->read_data(lis3, OUTZ);
182 	}
183 
184 	for (i = 0; i < 3; i++)
185 		position[i] = (position[i] * lis3->scale) / LIS3_ACCURACY;
186 
187 	*x = lis3lv02d_get_axis(lis3->ac.x, position);
188 	*y = lis3lv02d_get_axis(lis3->ac.y, position);
189 	*z = lis3lv02d_get_axis(lis3->ac.z, position);
190 }
191 
192 /* conversion btw sampling rate and the register values */
193 static int lis3_12_rates[4] = {40, 160, 640, 2560};
194 static int lis3_8_rates[2] = {100, 400};
195 static int lis3_3dc_rates[16] = {0, 1, 10, 25, 50, 100, 200, 400, 1600, 5000};
196 
197 /* ODR is Output Data Rate */
198 static int lis3lv02d_get_odr(struct lis3lv02d *lis3)
199 {
200 	u8 ctrl;
201 	int shift;
202 
203 	lis3->read(lis3, CTRL_REG1, &ctrl);
204 	ctrl &= lis3->odr_mask;
205 	shift = ffs(lis3->odr_mask) - 1;
206 	return lis3->odrs[(ctrl >> shift)];
207 }
208 
209 static int lis3lv02d_get_pwron_wait(struct lis3lv02d *lis3)
210 {
211 	int div = lis3lv02d_get_odr(lis3);
212 
213 	if (WARN_ONCE(div == 0, "device returned spurious data"))
214 		return -ENXIO;
215 
216 	/* LIS3 power on delay is quite long */
217 	msleep(lis3->pwron_delay / div);
218 	return 0;
219 }
220 
221 static int lis3lv02d_set_odr(struct lis3lv02d *lis3, int rate)
222 {
223 	u8 ctrl;
224 	int i, len, shift;
225 
226 	if (!rate)
227 		return -EINVAL;
228 
229 	lis3->read(lis3, CTRL_REG1, &ctrl);
230 	ctrl &= ~lis3->odr_mask;
231 	len = 1 << hweight_long(lis3->odr_mask); /* # of possible values */
232 	shift = ffs(lis3->odr_mask) - 1;
233 
234 	for (i = 0; i < len; i++)
235 		if (lis3->odrs[i] == rate) {
236 			lis3->write(lis3, CTRL_REG1,
237 					ctrl | (i << shift));
238 			return 0;
239 		}
240 	return -EINVAL;
241 }
242 
243 static int lis3lv02d_selftest(struct lis3lv02d *lis3, s16 results[3])
244 {
245 	u8 ctlreg, reg;
246 	s16 x, y, z;
247 	u8 selftest;
248 	int ret;
249 	u8 ctrl_reg_data;
250 	unsigned char irq_cfg;
251 
252 	mutex_lock(&lis3->mutex);
253 
254 	irq_cfg = lis3->irq_cfg;
255 	if (lis3->whoami == WAI_8B) {
256 		lis3->data_ready_count[IRQ_LINE0] = 0;
257 		lis3->data_ready_count[IRQ_LINE1] = 0;
258 
259 		/* Change interrupt cfg to data ready for selftest */
260 		atomic_inc(&lis3->wake_thread);
261 		lis3->irq_cfg = LIS3_IRQ1_DATA_READY | LIS3_IRQ2_DATA_READY;
262 		lis3->read(lis3, CTRL_REG3, &ctrl_reg_data);
263 		lis3->write(lis3, CTRL_REG3, (ctrl_reg_data &
264 				~(LIS3_IRQ1_MASK | LIS3_IRQ2_MASK)) |
265 				(LIS3_IRQ1_DATA_READY | LIS3_IRQ2_DATA_READY));
266 	}
267 
268 	if (lis3->whoami == WAI_3DC) {
269 		ctlreg = CTRL_REG4;
270 		selftest = CTRL4_ST0;
271 	} else {
272 		ctlreg = CTRL_REG1;
273 		if (lis3->whoami == WAI_12B)
274 			selftest = CTRL1_ST;
275 		else
276 			selftest = CTRL1_STP;
277 	}
278 
279 	lis3->read(lis3, ctlreg, &reg);
280 	lis3->write(lis3, ctlreg, (reg | selftest));
281 	ret = lis3lv02d_get_pwron_wait(lis3);
282 	if (ret)
283 		goto fail;
284 
285 	/* Read directly to avoid axis remap */
286 	x = lis3->read_data(lis3, OUTX);
287 	y = lis3->read_data(lis3, OUTY);
288 	z = lis3->read_data(lis3, OUTZ);
289 
290 	/* back to normal settings */
291 	lis3->write(lis3, ctlreg, reg);
292 	ret = lis3lv02d_get_pwron_wait(lis3);
293 	if (ret)
294 		goto fail;
295 
296 	results[0] = x - lis3->read_data(lis3, OUTX);
297 	results[1] = y - lis3->read_data(lis3, OUTY);
298 	results[2] = z - lis3->read_data(lis3, OUTZ);
299 
300 	ret = 0;
301 
302 	if (lis3->whoami == WAI_8B) {
303 		/* Restore original interrupt configuration */
304 		atomic_dec(&lis3->wake_thread);
305 		lis3->write(lis3, CTRL_REG3, ctrl_reg_data);
306 		lis3->irq_cfg = irq_cfg;
307 
308 		if ((irq_cfg & LIS3_IRQ1_MASK) &&
309 			lis3->data_ready_count[IRQ_LINE0] < 2) {
310 			ret = SELFTEST_IRQ;
311 			goto fail;
312 		}
313 
314 		if ((irq_cfg & LIS3_IRQ2_MASK) &&
315 			lis3->data_ready_count[IRQ_LINE1] < 2) {
316 			ret = SELFTEST_IRQ;
317 			goto fail;
318 		}
319 	}
320 
321 	if (lis3->pdata) {
322 		int i;
323 		for (i = 0; i < 3; i++) {
324 			/* Check against selftest acceptance limits */
325 			if ((results[i] < lis3->pdata->st_min_limits[i]) ||
326 			    (results[i] > lis3->pdata->st_max_limits[i])) {
327 				ret = SELFTEST_FAIL;
328 				goto fail;
329 			}
330 		}
331 	}
332 
333 	/* test passed */
334 fail:
335 	mutex_unlock(&lis3->mutex);
336 	return ret;
337 }
338 
339 /*
340  * Order of registers in the list affects to order of the restore process.
341  * Perhaps it is a good idea to set interrupt enable register as a last one
342  * after all other configurations
343  */
344 static u8 lis3_wai8_regs[] = { FF_WU_CFG_1, FF_WU_THS_1, FF_WU_DURATION_1,
345 			       FF_WU_CFG_2, FF_WU_THS_2, FF_WU_DURATION_2,
346 			       CLICK_CFG, CLICK_SRC, CLICK_THSY_X, CLICK_THSZ,
347 			       CLICK_TIMELIMIT, CLICK_LATENCY, CLICK_WINDOW,
348 			       CTRL_REG1, CTRL_REG2, CTRL_REG3};
349 
350 static u8 lis3_wai12_regs[] = {FF_WU_CFG, FF_WU_THS_L, FF_WU_THS_H,
351 			       FF_WU_DURATION, DD_CFG, DD_THSI_L, DD_THSI_H,
352 			       DD_THSE_L, DD_THSE_H,
353 			       CTRL_REG1, CTRL_REG3, CTRL_REG2};
354 
355 static inline void lis3_context_save(struct lis3lv02d *lis3)
356 {
357 	int i;
358 	for (i = 0; i < lis3->regs_size; i++)
359 		lis3->read(lis3, lis3->regs[i], &lis3->reg_cache[i]);
360 	lis3->regs_stored = true;
361 }
362 
363 static inline void lis3_context_restore(struct lis3lv02d *lis3)
364 {
365 	int i;
366 	if (lis3->regs_stored)
367 		for (i = 0; i < lis3->regs_size; i++)
368 			lis3->write(lis3, lis3->regs[i], lis3->reg_cache[i]);
369 }
370 
371 void lis3lv02d_poweroff(struct lis3lv02d *lis3)
372 {
373 	if (lis3->reg_ctrl)
374 		lis3_context_save(lis3);
375 	/* disable X,Y,Z axis and power down */
376 	lis3->write(lis3, CTRL_REG1, 0x00);
377 	if (lis3->reg_ctrl)
378 		lis3->reg_ctrl(lis3, LIS3_REG_OFF);
379 }
380 EXPORT_SYMBOL_GPL(lis3lv02d_poweroff);
381 
382 int lis3lv02d_poweron(struct lis3lv02d *lis3)
383 {
384 	int err;
385 	u8 reg;
386 
387 	lis3->init(lis3);
388 
389 	/*
390 	 * Common configuration
391 	 * BDU: (12 bits sensors only) LSB and MSB values are not updated until
392 	 *      both have been read. So the value read will always be correct.
393 	 * Set BOOT bit to refresh factory tuning values.
394 	 */
395 	if (lis3->pdata) {
396 		lis3->read(lis3, CTRL_REG2, &reg);
397 		if (lis3->whoami ==  WAI_12B)
398 			reg |= CTRL2_BDU | CTRL2_BOOT;
399 		else
400 			reg |= CTRL2_BOOT_8B;
401 		lis3->write(lis3, CTRL_REG2, reg);
402 	}
403 
404 	err = lis3lv02d_get_pwron_wait(lis3);
405 	if (err)
406 		return err;
407 
408 	if (lis3->reg_ctrl)
409 		lis3_context_restore(lis3);
410 
411 	return 0;
412 }
413 EXPORT_SYMBOL_GPL(lis3lv02d_poweron);
414 
415 
416 static void lis3lv02d_joystick_poll(struct input_polled_dev *pidev)
417 {
418 	struct lis3lv02d *lis3 = pidev->private;
419 	int x, y, z;
420 
421 	mutex_lock(&lis3->mutex);
422 	lis3lv02d_get_xyz(lis3, &x, &y, &z);
423 	input_report_abs(pidev->input, ABS_X, x);
424 	input_report_abs(pidev->input, ABS_Y, y);
425 	input_report_abs(pidev->input, ABS_Z, z);
426 	input_sync(pidev->input);
427 	mutex_unlock(&lis3->mutex);
428 }
429 
430 static void lis3lv02d_joystick_open(struct input_polled_dev *pidev)
431 {
432 	struct lis3lv02d *lis3 = pidev->private;
433 
434 	if (lis3->pm_dev)
435 		pm_runtime_get_sync(lis3->pm_dev);
436 
437 	if (lis3->pdata && lis3->whoami == WAI_8B && lis3->idev)
438 		atomic_set(&lis3->wake_thread, 1);
439 	/*
440 	 * Update coordinates for the case where poll interval is 0 and
441 	 * the chip in running purely under interrupt control
442 	 */
443 	lis3lv02d_joystick_poll(pidev);
444 }
445 
446 static void lis3lv02d_joystick_close(struct input_polled_dev *pidev)
447 {
448 	struct lis3lv02d *lis3 = pidev->private;
449 
450 	atomic_set(&lis3->wake_thread, 0);
451 	if (lis3->pm_dev)
452 		pm_runtime_put(lis3->pm_dev);
453 }
454 
455 static irqreturn_t lis302dl_interrupt(int irq, void *data)
456 {
457 	struct lis3lv02d *lis3 = data;
458 
459 	if (!test_bit(0, &lis3->misc_opened))
460 		goto out;
461 
462 	/*
463 	 * Be careful: on some HP laptops the bios force DD when on battery and
464 	 * the lid is closed. This leads to interrupts as soon as a little move
465 	 * is done.
466 	 */
467 	atomic_inc(&lis3->count);
468 
469 	wake_up_interruptible(&lis3->misc_wait);
470 	kill_fasync(&lis3->async_queue, SIGIO, POLL_IN);
471 out:
472 	if (atomic_read(&lis3->wake_thread))
473 		return IRQ_WAKE_THREAD;
474 	return IRQ_HANDLED;
475 }
476 
477 static void lis302dl_interrupt_handle_click(struct lis3lv02d *lis3)
478 {
479 	struct input_dev *dev = lis3->idev->input;
480 	u8 click_src;
481 
482 	mutex_lock(&lis3->mutex);
483 	lis3->read(lis3, CLICK_SRC, &click_src);
484 
485 	if (click_src & CLICK_SINGLE_X) {
486 		input_report_key(dev, lis3->mapped_btns[0], 1);
487 		input_report_key(dev, lis3->mapped_btns[0], 0);
488 	}
489 
490 	if (click_src & CLICK_SINGLE_Y) {
491 		input_report_key(dev, lis3->mapped_btns[1], 1);
492 		input_report_key(dev, lis3->mapped_btns[1], 0);
493 	}
494 
495 	if (click_src & CLICK_SINGLE_Z) {
496 		input_report_key(dev, lis3->mapped_btns[2], 1);
497 		input_report_key(dev, lis3->mapped_btns[2], 0);
498 	}
499 	input_sync(dev);
500 	mutex_unlock(&lis3->mutex);
501 }
502 
503 static inline void lis302dl_data_ready(struct lis3lv02d *lis3, int index)
504 {
505 	int dummy;
506 
507 	/* Dummy read to ack interrupt */
508 	lis3lv02d_get_xyz(lis3, &dummy, &dummy, &dummy);
509 	lis3->data_ready_count[index]++;
510 }
511 
512 static irqreturn_t lis302dl_interrupt_thread1_8b(int irq, void *data)
513 {
514 	struct lis3lv02d *lis3 = data;
515 	u8 irq_cfg = lis3->irq_cfg & LIS3_IRQ1_MASK;
516 
517 	if (irq_cfg == LIS3_IRQ1_CLICK)
518 		lis302dl_interrupt_handle_click(lis3);
519 	else if (unlikely(irq_cfg == LIS3_IRQ1_DATA_READY))
520 		lis302dl_data_ready(lis3, IRQ_LINE0);
521 	else
522 		lis3lv02d_joystick_poll(lis3->idev);
523 
524 	return IRQ_HANDLED;
525 }
526 
527 static irqreturn_t lis302dl_interrupt_thread2_8b(int irq, void *data)
528 {
529 	struct lis3lv02d *lis3 = data;
530 	u8 irq_cfg = lis3->irq_cfg & LIS3_IRQ2_MASK;
531 
532 	if (irq_cfg == LIS3_IRQ2_CLICK)
533 		lis302dl_interrupt_handle_click(lis3);
534 	else if (unlikely(irq_cfg == LIS3_IRQ2_DATA_READY))
535 		lis302dl_data_ready(lis3, IRQ_LINE1);
536 	else
537 		lis3lv02d_joystick_poll(lis3->idev);
538 
539 	return IRQ_HANDLED;
540 }
541 
542 static int lis3lv02d_misc_open(struct inode *inode, struct file *file)
543 {
544 	struct lis3lv02d *lis3 = container_of(file->private_data,
545 					      struct lis3lv02d, miscdev);
546 
547 	if (test_and_set_bit(0, &lis3->misc_opened))
548 		return -EBUSY; /* already open */
549 
550 	if (lis3->pm_dev)
551 		pm_runtime_get_sync(lis3->pm_dev);
552 
553 	atomic_set(&lis3->count, 0);
554 	return 0;
555 }
556 
557 static int lis3lv02d_misc_release(struct inode *inode, struct file *file)
558 {
559 	struct lis3lv02d *lis3 = container_of(file->private_data,
560 					      struct lis3lv02d, miscdev);
561 
562 	fasync_helper(-1, file, 0, &lis3->async_queue);
563 	clear_bit(0, &lis3->misc_opened); /* release the device */
564 	if (lis3->pm_dev)
565 		pm_runtime_put(lis3->pm_dev);
566 	return 0;
567 }
568 
569 static ssize_t lis3lv02d_misc_read(struct file *file, char __user *buf,
570 				size_t count, loff_t *pos)
571 {
572 	struct lis3lv02d *lis3 = container_of(file->private_data,
573 					      struct lis3lv02d, miscdev);
574 
575 	DECLARE_WAITQUEUE(wait, current);
576 	u32 data;
577 	unsigned char byte_data;
578 	ssize_t retval = 1;
579 
580 	if (count < 1)
581 		return -EINVAL;
582 
583 	add_wait_queue(&lis3->misc_wait, &wait);
584 	while (true) {
585 		set_current_state(TASK_INTERRUPTIBLE);
586 		data = atomic_xchg(&lis3->count, 0);
587 		if (data)
588 			break;
589 
590 		if (file->f_flags & O_NONBLOCK) {
591 			retval = -EAGAIN;
592 			goto out;
593 		}
594 
595 		if (signal_pending(current)) {
596 			retval = -ERESTARTSYS;
597 			goto out;
598 		}
599 
600 		schedule();
601 	}
602 
603 	if (data < 255)
604 		byte_data = data;
605 	else
606 		byte_data = 255;
607 
608 	/* make sure we are not going into copy_to_user() with
609 	 * TASK_INTERRUPTIBLE state */
610 	set_current_state(TASK_RUNNING);
611 	if (copy_to_user(buf, &byte_data, sizeof(byte_data)))
612 		retval = -EFAULT;
613 
614 out:
615 	__set_current_state(TASK_RUNNING);
616 	remove_wait_queue(&lis3->misc_wait, &wait);
617 
618 	return retval;
619 }
620 
621 static unsigned int lis3lv02d_misc_poll(struct file *file, poll_table *wait)
622 {
623 	struct lis3lv02d *lis3 = container_of(file->private_data,
624 					      struct lis3lv02d, miscdev);
625 
626 	poll_wait(file, &lis3->misc_wait, wait);
627 	if (atomic_read(&lis3->count))
628 		return POLLIN | POLLRDNORM;
629 	return 0;
630 }
631 
632 static int lis3lv02d_misc_fasync(int fd, struct file *file, int on)
633 {
634 	struct lis3lv02d *lis3 = container_of(file->private_data,
635 					      struct lis3lv02d, miscdev);
636 
637 	return fasync_helper(fd, file, on, &lis3->async_queue);
638 }
639 
640 static const struct file_operations lis3lv02d_misc_fops = {
641 	.owner   = THIS_MODULE,
642 	.llseek  = no_llseek,
643 	.read    = lis3lv02d_misc_read,
644 	.open    = lis3lv02d_misc_open,
645 	.release = lis3lv02d_misc_release,
646 	.poll    = lis3lv02d_misc_poll,
647 	.fasync  = lis3lv02d_misc_fasync,
648 };
649 
650 int lis3lv02d_joystick_enable(struct lis3lv02d *lis3)
651 {
652 	struct input_dev *input_dev;
653 	int err;
654 	int max_val, fuzz, flat;
655 	int btns[] = {BTN_X, BTN_Y, BTN_Z};
656 
657 	if (lis3->idev)
658 		return -EINVAL;
659 
660 	lis3->idev = input_allocate_polled_device();
661 	if (!lis3->idev)
662 		return -ENOMEM;
663 
664 	lis3->idev->poll = lis3lv02d_joystick_poll;
665 	lis3->idev->open = lis3lv02d_joystick_open;
666 	lis3->idev->close = lis3lv02d_joystick_close;
667 	lis3->idev->poll_interval = MDPS_POLL_INTERVAL;
668 	lis3->idev->poll_interval_min = MDPS_POLL_MIN;
669 	lis3->idev->poll_interval_max = MDPS_POLL_MAX;
670 	lis3->idev->private = lis3;
671 	input_dev = lis3->idev->input;
672 
673 	input_dev->name       = "ST LIS3LV02DL Accelerometer";
674 	input_dev->phys       = DRIVER_NAME "/input0";
675 	input_dev->id.bustype = BUS_HOST;
676 	input_dev->id.vendor  = 0;
677 	input_dev->dev.parent = &lis3->pdev->dev;
678 
679 	set_bit(EV_ABS, input_dev->evbit);
680 	max_val = (lis3->mdps_max_val * lis3->scale) / LIS3_ACCURACY;
681 	if (lis3->whoami == WAI_12B) {
682 		fuzz = LIS3_DEFAULT_FUZZ_12B;
683 		flat = LIS3_DEFAULT_FLAT_12B;
684 	} else {
685 		fuzz = LIS3_DEFAULT_FUZZ_8B;
686 		flat = LIS3_DEFAULT_FLAT_8B;
687 	}
688 	fuzz = (fuzz * lis3->scale) / LIS3_ACCURACY;
689 	flat = (flat * lis3->scale) / LIS3_ACCURACY;
690 
691 	input_set_abs_params(input_dev, ABS_X, -max_val, max_val, fuzz, flat);
692 	input_set_abs_params(input_dev, ABS_Y, -max_val, max_val, fuzz, flat);
693 	input_set_abs_params(input_dev, ABS_Z, -max_val, max_val, fuzz, flat);
694 
695 	lis3->mapped_btns[0] = lis3lv02d_get_axis(abs(lis3->ac.x), btns);
696 	lis3->mapped_btns[1] = lis3lv02d_get_axis(abs(lis3->ac.y), btns);
697 	lis3->mapped_btns[2] = lis3lv02d_get_axis(abs(lis3->ac.z), btns);
698 
699 	err = input_register_polled_device(lis3->idev);
700 	if (err) {
701 		input_free_polled_device(lis3->idev);
702 		lis3->idev = NULL;
703 	}
704 
705 	return err;
706 }
707 EXPORT_SYMBOL_GPL(lis3lv02d_joystick_enable);
708 
709 void lis3lv02d_joystick_disable(struct lis3lv02d *lis3)
710 {
711 	if (lis3->irq)
712 		free_irq(lis3->irq, lis3);
713 	if (lis3->pdata && lis3->pdata->irq2)
714 		free_irq(lis3->pdata->irq2, lis3);
715 
716 	if (!lis3->idev)
717 		return;
718 
719 	if (lis3->irq)
720 		misc_deregister(&lis3->miscdev);
721 	input_unregister_polled_device(lis3->idev);
722 	input_free_polled_device(lis3->idev);
723 	lis3->idev = NULL;
724 }
725 EXPORT_SYMBOL_GPL(lis3lv02d_joystick_disable);
726 
727 /* Sysfs stuff */
728 static void lis3lv02d_sysfs_poweron(struct lis3lv02d *lis3)
729 {
730 	/*
731 	 * SYSFS functions are fast visitors so put-call
732 	 * immediately after the get-call. However, keep
733 	 * chip running for a while and schedule delayed
734 	 * suspend. This way periodic sysfs calls doesn't
735 	 * suffer from relatively long power up time.
736 	 */
737 
738 	if (lis3->pm_dev) {
739 		pm_runtime_get_sync(lis3->pm_dev);
740 		pm_runtime_put_noidle(lis3->pm_dev);
741 		pm_schedule_suspend(lis3->pm_dev, LIS3_SYSFS_POWERDOWN_DELAY);
742 	}
743 }
744 
745 static ssize_t lis3lv02d_selftest_show(struct device *dev,
746 				struct device_attribute *attr, char *buf)
747 {
748 	struct lis3lv02d *lis3 = dev_get_drvdata(dev);
749 	s16 values[3];
750 
751 	static const char ok[] = "OK";
752 	static const char fail[] = "FAIL";
753 	static const char irq[] = "FAIL_IRQ";
754 	const char *res;
755 
756 	lis3lv02d_sysfs_poweron(lis3);
757 	switch (lis3lv02d_selftest(lis3, values)) {
758 	case SELFTEST_FAIL:
759 		res = fail;
760 		break;
761 	case SELFTEST_IRQ:
762 		res = irq;
763 		break;
764 	case SELFTEST_OK:
765 	default:
766 		res = ok;
767 		break;
768 	}
769 	return sprintf(buf, "%s %d %d %d\n", res,
770 		values[0], values[1], values[2]);
771 }
772 
773 static ssize_t lis3lv02d_position_show(struct device *dev,
774 				struct device_attribute *attr, char *buf)
775 {
776 	struct lis3lv02d *lis3 = dev_get_drvdata(dev);
777 	int x, y, z;
778 
779 	lis3lv02d_sysfs_poweron(lis3);
780 	mutex_lock(&lis3->mutex);
781 	lis3lv02d_get_xyz(lis3, &x, &y, &z);
782 	mutex_unlock(&lis3->mutex);
783 	return sprintf(buf, "(%d,%d,%d)\n", x, y, z);
784 }
785 
786 static ssize_t lis3lv02d_rate_show(struct device *dev,
787 			struct device_attribute *attr, char *buf)
788 {
789 	struct lis3lv02d *lis3 = dev_get_drvdata(dev);
790 
791 	lis3lv02d_sysfs_poweron(lis3);
792 	return sprintf(buf, "%d\n", lis3lv02d_get_odr(lis3));
793 }
794 
795 static ssize_t lis3lv02d_rate_set(struct device *dev,
796 				struct device_attribute *attr, const char *buf,
797 				size_t count)
798 {
799 	struct lis3lv02d *lis3 = dev_get_drvdata(dev);
800 	unsigned long rate;
801 
802 	if (strict_strtoul(buf, 0, &rate))
803 		return -EINVAL;
804 
805 	lis3lv02d_sysfs_poweron(lis3);
806 	if (lis3lv02d_set_odr(lis3, rate))
807 		return -EINVAL;
808 
809 	return count;
810 }
811 
812 static DEVICE_ATTR(selftest, S_IRUSR, lis3lv02d_selftest_show, NULL);
813 static DEVICE_ATTR(position, S_IRUGO, lis3lv02d_position_show, NULL);
814 static DEVICE_ATTR(rate, S_IRUGO | S_IWUSR, lis3lv02d_rate_show,
815 					    lis3lv02d_rate_set);
816 
817 static struct attribute *lis3lv02d_attributes[] = {
818 	&dev_attr_selftest.attr,
819 	&dev_attr_position.attr,
820 	&dev_attr_rate.attr,
821 	NULL
822 };
823 
824 static struct attribute_group lis3lv02d_attribute_group = {
825 	.attrs = lis3lv02d_attributes
826 };
827 
828 
829 static int lis3lv02d_add_fs(struct lis3lv02d *lis3)
830 {
831 	lis3->pdev = platform_device_register_simple(DRIVER_NAME, -1, NULL, 0);
832 	if (IS_ERR(lis3->pdev))
833 		return PTR_ERR(lis3->pdev);
834 
835 	platform_set_drvdata(lis3->pdev, lis3);
836 	return sysfs_create_group(&lis3->pdev->dev.kobj, &lis3lv02d_attribute_group);
837 }
838 
839 int lis3lv02d_remove_fs(struct lis3lv02d *lis3)
840 {
841 	sysfs_remove_group(&lis3->pdev->dev.kobj, &lis3lv02d_attribute_group);
842 	platform_device_unregister(lis3->pdev);
843 	if (lis3->pm_dev) {
844 		/* Barrier after the sysfs remove */
845 		pm_runtime_barrier(lis3->pm_dev);
846 
847 		/* SYSFS may have left chip running. Turn off if necessary */
848 		if (!pm_runtime_suspended(lis3->pm_dev))
849 			lis3lv02d_poweroff(lis3);
850 
851 		pm_runtime_disable(lis3->pm_dev);
852 		pm_runtime_set_suspended(lis3->pm_dev);
853 	}
854 	kfree(lis3->reg_cache);
855 	return 0;
856 }
857 EXPORT_SYMBOL_GPL(lis3lv02d_remove_fs);
858 
859 static void lis3lv02d_8b_configure(struct lis3lv02d *lis3,
860 				struct lis3lv02d_platform_data *p)
861 {
862 	int err;
863 	int ctrl2 = p->hipass_ctrl;
864 
865 	if (p->click_flags) {
866 		lis3->write(lis3, CLICK_CFG, p->click_flags);
867 		lis3->write(lis3, CLICK_TIMELIMIT, p->click_time_limit);
868 		lis3->write(lis3, CLICK_LATENCY, p->click_latency);
869 		lis3->write(lis3, CLICK_WINDOW, p->click_window);
870 		lis3->write(lis3, CLICK_THSZ, p->click_thresh_z & 0xf);
871 		lis3->write(lis3, CLICK_THSY_X,
872 			(p->click_thresh_x & 0xf) |
873 			(p->click_thresh_y << 4));
874 
875 		if (lis3->idev) {
876 			struct input_dev *input_dev = lis3->idev->input;
877 			input_set_capability(input_dev, EV_KEY, BTN_X);
878 			input_set_capability(input_dev, EV_KEY, BTN_Y);
879 			input_set_capability(input_dev, EV_KEY, BTN_Z);
880 		}
881 	}
882 
883 	if (p->wakeup_flags) {
884 		lis3->write(lis3, FF_WU_CFG_1, p->wakeup_flags);
885 		lis3->write(lis3, FF_WU_THS_1, p->wakeup_thresh & 0x7f);
886 		/* pdata value + 1 to keep this backward compatible*/
887 		lis3->write(lis3, FF_WU_DURATION_1, p->duration1 + 1);
888 		ctrl2 ^= HP_FF_WU1; /* Xor to keep compatible with old pdata*/
889 	}
890 
891 	if (p->wakeup_flags2) {
892 		lis3->write(lis3, FF_WU_CFG_2, p->wakeup_flags2);
893 		lis3->write(lis3, FF_WU_THS_2, p->wakeup_thresh2 & 0x7f);
894 		/* pdata value + 1 to keep this backward compatible*/
895 		lis3->write(lis3, FF_WU_DURATION_2, p->duration2 + 1);
896 		ctrl2 ^= HP_FF_WU2; /* Xor to keep compatible with old pdata*/
897 	}
898 	/* Configure hipass filters */
899 	lis3->write(lis3, CTRL_REG2, ctrl2);
900 
901 	if (p->irq2) {
902 		err = request_threaded_irq(p->irq2,
903 					NULL,
904 					lis302dl_interrupt_thread2_8b,
905 					IRQF_TRIGGER_RISING | IRQF_ONESHOT |
906 					(p->irq_flags2 & IRQF_TRIGGER_MASK),
907 					DRIVER_NAME, lis3);
908 		if (err < 0)
909 			pr_err("No second IRQ. Limited functionality\n");
910 	}
911 }
912 
913 /*
914  * Initialise the accelerometer and the various subsystems.
915  * Should be rather independent of the bus system.
916  */
917 int lis3lv02d_init_device(struct lis3lv02d *lis3)
918 {
919 	int err;
920 	irq_handler_t thread_fn;
921 	int irq_flags = 0;
922 
923 	lis3->whoami = lis3lv02d_read_8(lis3, WHO_AM_I);
924 
925 	switch (lis3->whoami) {
926 	case WAI_12B:
927 		pr_info("12 bits sensor found\n");
928 		lis3->read_data = lis3lv02d_read_12;
929 		lis3->mdps_max_val = 2048;
930 		lis3->pwron_delay = LIS3_PWRON_DELAY_WAI_12B;
931 		lis3->odrs = lis3_12_rates;
932 		lis3->odr_mask = CTRL1_DF0 | CTRL1_DF1;
933 		lis3->scale = LIS3_SENSITIVITY_12B;
934 		lis3->regs = lis3_wai12_regs;
935 		lis3->regs_size = ARRAY_SIZE(lis3_wai12_regs);
936 		break;
937 	case WAI_8B:
938 		pr_info("8 bits sensor found\n");
939 		lis3->read_data = lis3lv02d_read_8;
940 		lis3->mdps_max_val = 128;
941 		lis3->pwron_delay = LIS3_PWRON_DELAY_WAI_8B;
942 		lis3->odrs = lis3_8_rates;
943 		lis3->odr_mask = CTRL1_DR;
944 		lis3->scale = LIS3_SENSITIVITY_8B;
945 		lis3->regs = lis3_wai8_regs;
946 		lis3->regs_size = ARRAY_SIZE(lis3_wai8_regs);
947 		break;
948 	case WAI_3DC:
949 		pr_info("8 bits 3DC sensor found\n");
950 		lis3->read_data = lis3lv02d_read_8;
951 		lis3->mdps_max_val = 128;
952 		lis3->pwron_delay = LIS3_PWRON_DELAY_WAI_8B;
953 		lis3->odrs = lis3_3dc_rates;
954 		lis3->odr_mask = CTRL1_ODR0|CTRL1_ODR1|CTRL1_ODR2|CTRL1_ODR3;
955 		lis3->scale = LIS3_SENSITIVITY_8B;
956 		break;
957 	default:
958 		pr_err("unknown sensor type 0x%X\n", lis3->whoami);
959 		return -EINVAL;
960 	}
961 
962 	lis3->reg_cache = kzalloc(max(sizeof(lis3_wai8_regs),
963 				     sizeof(lis3_wai12_regs)), GFP_KERNEL);
964 
965 	if (lis3->reg_cache == NULL) {
966 		printk(KERN_ERR DRIVER_NAME "out of memory\n");
967 		return -ENOMEM;
968 	}
969 
970 	mutex_init(&lis3->mutex);
971 	atomic_set(&lis3->wake_thread, 0);
972 
973 	lis3lv02d_add_fs(lis3);
974 	err = lis3lv02d_poweron(lis3);
975 	if (err) {
976 		lis3lv02d_remove_fs(lis3);
977 		return err;
978 	}
979 
980 	if (lis3->pm_dev) {
981 		pm_runtime_set_active(lis3->pm_dev);
982 		pm_runtime_enable(lis3->pm_dev);
983 	}
984 
985 	if (lis3lv02d_joystick_enable(lis3))
986 		pr_err("joystick initialization failed\n");
987 
988 	/* passing in platform specific data is purely optional and only
989 	 * used by the SPI transport layer at the moment */
990 	if (lis3->pdata) {
991 		struct lis3lv02d_platform_data *p = lis3->pdata;
992 
993 		if (lis3->whoami == WAI_8B)
994 			lis3lv02d_8b_configure(lis3, p);
995 
996 		irq_flags = p->irq_flags1 & IRQF_TRIGGER_MASK;
997 
998 		lis3->irq_cfg = p->irq_cfg;
999 		if (p->irq_cfg)
1000 			lis3->write(lis3, CTRL_REG3, p->irq_cfg);
1001 
1002 		if (p->default_rate)
1003 			lis3lv02d_set_odr(lis3, p->default_rate);
1004 	}
1005 
1006 	/* bail if we did not get an IRQ from the bus layer */
1007 	if (!lis3->irq) {
1008 		pr_debug("No IRQ. Disabling /dev/freefall\n");
1009 		goto out;
1010 	}
1011 
1012 	/*
1013 	 * The sensor can generate interrupts for free-fall and direction
1014 	 * detection (distinguishable with FF_WU_SRC and DD_SRC) but to keep
1015 	 * the things simple and _fast_ we activate it only for free-fall, so
1016 	 * no need to read register (very slow with ACPI). For the same reason,
1017 	 * we forbid shared interrupts.
1018 	 *
1019 	 * IRQF_TRIGGER_RISING seems pointless on HP laptops because the
1020 	 * io-apic is not configurable (and generates a warning) but I keep it
1021 	 * in case of support for other hardware.
1022 	 */
1023 	if (lis3->pdata && lis3->whoami == WAI_8B)
1024 		thread_fn = lis302dl_interrupt_thread1_8b;
1025 	else
1026 		thread_fn = NULL;
1027 
1028 	err = request_threaded_irq(lis3->irq, lis302dl_interrupt,
1029 				thread_fn,
1030 				IRQF_TRIGGER_RISING | IRQF_ONESHOT |
1031 				irq_flags,
1032 				DRIVER_NAME, lis3);
1033 
1034 	if (err < 0) {
1035 		pr_err("Cannot get IRQ\n");
1036 		goto out;
1037 	}
1038 
1039 	lis3->miscdev.minor	= MISC_DYNAMIC_MINOR;
1040 	lis3->miscdev.name	= "freefall";
1041 	lis3->miscdev.fops	= &lis3lv02d_misc_fops;
1042 
1043 	if (misc_register(&lis3->miscdev))
1044 		pr_err("misc_register failed\n");
1045 out:
1046 	return 0;
1047 }
1048 EXPORT_SYMBOL_GPL(lis3lv02d_init_device);
1049 
1050 MODULE_DESCRIPTION("ST LIS3LV02Dx three-axis digital accelerometer driver");
1051 MODULE_AUTHOR("Yan Burman, Eric Piel, Pavel Machek");
1052 MODULE_LICENSE("GPL");
1053