]> git.enpas.org Git - openwrt.git/blob - target/linux/s3c24xx/files-2.6.30/drivers/input/misc/lis302dl.c
[s3c24xx] bump to 2.6.30-rc6
[openwrt.git] / target / linux / s3c24xx / files-2.6.30 / drivers / input / misc / lis302dl.c
1 /* Linux kernel driver for the ST LIS302D 3-axis accelerometer
2  *
3  * Copyright (C) 2007-2008 by Openmoko, Inc.
4  * Author: Harald Welte <laforge@openmoko.org>
5  *         converted to private bitbang by:
6  *         Andy Green <andy@openmoko.com>
7  *         ability to set acceleration threshold added by:
8  *         Simon Kagstrom <simon.kagstrom@gmail.com>
9  * All rights reserved.
10  *
11  * This program is free software; you can redistribute it and/or
12  * modify it under the terms of the GNU General Public License as
13  * published by the Free Software Foundation; either version 2 of
14  * the License, or (at your option) any later version.
15  *
16  * This program is distributed in the hope that it will be useful,
17  * but WITHOUT ANY WARRANTY; without even the implied warranty of
18  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
19  * GNU General Public License for more details.
20  *
21  * You should have received a copy of the GNU General Public License
22  * along with this program; if not, write to the Free Software
23  * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
24  * MA 02111-1307 USA
25  *
26  * TODO
27  *      * statistics for overflow events
28  *      * configuration interface (sysfs) for
29  *              * enable/disable x/y/z axis data ready
30  *              * enable/disable resume from freee fall / click
31  *              * free fall / click parameters
32  *              * high pass filter parameters
33  */
34 #include <linux/kernel.h>
35 #include <linux/types.h>
36 #include <linux/module.h>
37 #include <linux/device.h>
38 #include <linux/platform_device.h>
39 #include <linux/delay.h>
40 #include <linux/irq.h>
41 #include <linux/interrupt.h>
42 #include <linux/sysfs.h>
43 #include <linux/spi/spi.h>
44
45 #include <linux/lis302dl.h>
46
47 /* Utility functions */
48 static u8 __reg_read(struct lis302dl_info *lis, u8 reg)
49 {
50         struct spi_message msg;
51         struct spi_transfer t;
52         u8 data[2] = {0xc0 | reg};
53         int rc;
54
55         spi_message_init(&msg);
56         memset(&t, 0, sizeof t);
57         t.len = 2;
58         spi_message_add_tail(&t, &msg);
59         t.tx_buf = &data[0];
60         t.rx_buf = &data[0];
61
62         /* Should complete without blocking */
63         rc = spi_non_blocking_transfer(lis->spi, &msg);
64         if (rc < 0) {
65                 dev_err(lis->dev, "Error reading register\n");
66                 return rc;
67         }
68
69         return data[1];
70 }
71
72 static void __reg_write(struct lis302dl_info *lis, u8 reg, u8 val)
73 {
74         struct spi_message msg;
75         struct spi_transfer t;
76         u8 data[2] = {reg, val};
77
78         spi_message_init(&msg);
79         memset(&t, 0, sizeof t);
80         t.len = 2;
81         spi_message_add_tail(&t, &msg);
82         t.tx_buf = &data[0];
83         t.rx_buf = &data[0];
84
85         /* Completes without blocking */
86         if (spi_non_blocking_transfer(lis->spi, &msg) < 0)
87                 dev_err(lis->dev, "Error writing register\n");
88 }
89
90 static void __reg_set_bit_mask(struct lis302dl_info *lis, u8 reg, u8 mask,
91                 u8 val)
92 {
93         u_int8_t tmp;
94
95         val &= mask;
96
97         tmp = __reg_read(lis, reg);
98         tmp &= ~mask;
99         tmp |= val;
100         __reg_write(lis, reg, tmp);
101 }
102
103 static int __ms_to_duration(struct lis302dl_info *lis, int ms)
104 {
105         /* If we have 400 ms sampling rate, the stepping is 2.5 ms,
106          * on 100 ms the stepping is 10ms */
107         if (lis->flags & LIS302DL_F_DR)
108                 return min((ms * 10) / 25, 637);
109
110         return min(ms / 10, 2550);
111 }
112
113 static int __duration_to_ms(struct lis302dl_info *lis, int duration)
114 {
115         if (lis->flags & LIS302DL_F_DR)
116                 return (duration * 25) / 10;
117
118         return duration * 10;
119 }
120
121 static u8 __mg_to_threshold(struct lis302dl_info *lis, int mg)
122 {
123         /* If FS is set each bit is 71mg, otherwise 18mg. The THS register
124          * has 7 bits for the threshold value */
125         if (lis->flags & LIS302DL_F_FS)
126                 return min(mg / 71, 127);
127
128         return min(mg / 18, 127);
129 }
130
131 static int __threshold_to_mg(struct lis302dl_info *lis, u8 threshold)
132 {
133         if (lis->flags & LIS302DL_F_FS)
134                 return threshold * 71;
135
136         return threshold * 18;
137 }
138
139 /* interrupt handling related */
140
141 enum lis302dl_intmode {
142         LIS302DL_INTMODE_GND            = 0x00,
143         LIS302DL_INTMODE_FF_WU_1        = 0x01,
144         LIS302DL_INTMODE_FF_WU_2        = 0x02,
145         LIS302DL_INTMODE_FF_WU_12       = 0x03,
146         LIS302DL_INTMODE_DATA_READY     = 0x04,
147         LIS302DL_INTMODE_CLICK          = 0x07,
148 };
149
150 static void __lis302dl_int_mode(struct device *dev, int int_pin,
151                               enum lis302dl_intmode mode)
152 {
153         struct lis302dl_info *lis = dev_get_drvdata(dev);
154
155         switch (int_pin) {
156         case 1:
157                 __reg_set_bit_mask(lis, LIS302DL_REG_CTRL3, 0x07, mode);
158                 break;
159         case 2:
160                 __reg_set_bit_mask(lis, LIS302DL_REG_CTRL3, 0x38, mode << 3);
161                 break;
162         default:
163                 BUG();
164         }
165 }
166
167 static void __enable_wakeup(struct lis302dl_info *lis)
168 {
169         __reg_write(lis, LIS302DL_REG_CTRL1, 0);
170
171         /* First zero to get to a known state */
172         __reg_write(lis, LIS302DL_REG_FF_WU_CFG_1, LIS302DL_FFWUCFG_XHIE |
173                         LIS302DL_FFWUCFG_YHIE | LIS302DL_FFWUCFG_ZHIE |
174                         LIS302DL_FFWUCFG_LIR);
175         __reg_write(lis, LIS302DL_REG_FF_WU_THS_1,
176                         __mg_to_threshold(lis, lis->wakeup.threshold));
177         __reg_write(lis, LIS302DL_REG_FF_WU_DURATION_1,
178                         __ms_to_duration(lis, lis->wakeup.duration));
179
180         /* Route the interrupt for wakeup */
181         __lis302dl_int_mode(lis->dev, 1,
182                         LIS302DL_INTMODE_FF_WU_1);
183
184         __reg_read(lis, LIS302DL_REG_HP_FILTER_RESET);
185         __reg_read(lis, LIS302DL_REG_OUT_X);
186         __reg_read(lis, LIS302DL_REG_OUT_Y);
187         __reg_read(lis, LIS302DL_REG_OUT_Z);
188         __reg_read(lis, LIS302DL_REG_STATUS);
189         __reg_read(lis, LIS302DL_REG_FF_WU_SRC_1);
190         __reg_read(lis, LIS302DL_REG_FF_WU_SRC_2);
191         __reg_write(lis, LIS302DL_REG_CTRL1, LIS302DL_CTRL1_PD | 7);
192 }
193
194 static void __enable_data_collection(struct lis302dl_info *lis)
195 {
196         u_int8_t ctrl1 = LIS302DL_CTRL1_PD | LIS302DL_CTRL1_Xen |
197                          LIS302DL_CTRL1_Yen | LIS302DL_CTRL1_Zen;
198
199         /* make sure we're powered up and generate data ready */
200         __reg_set_bit_mask(lis, LIS302DL_REG_CTRL1, ctrl1, ctrl1);
201
202         /* If the threshold is zero, let the device generated an interrupt
203          * on each datum */
204         if (lis->threshold == 0) {
205                 __reg_write(lis, LIS302DL_REG_CTRL2, 0);
206                 __lis302dl_int_mode(lis->dev, 1, LIS302DL_INTMODE_DATA_READY);
207                 __lis302dl_int_mode(lis->dev, 2, LIS302DL_INTMODE_DATA_READY);
208         } else {
209                 __reg_write(lis, LIS302DL_REG_CTRL2,
210                                 LIS302DL_CTRL2_HPFF1);
211                 __reg_write(lis, LIS302DL_REG_FF_WU_THS_1,
212                                 __mg_to_threshold(lis, lis->threshold));
213                 __reg_write(lis, LIS302DL_REG_FF_WU_DURATION_1,
214                                 __ms_to_duration(lis, lis->duration));
215
216                 /* Clear the HP filter "starting point" */
217                 __reg_read(lis, LIS302DL_REG_HP_FILTER_RESET);
218                 __reg_write(lis, LIS302DL_REG_FF_WU_CFG_1,
219                                 LIS302DL_FFWUCFG_XHIE | LIS302DL_FFWUCFG_YHIE |
220                                 LIS302DL_FFWUCFG_ZHIE | LIS302DL_FFWUCFG_LIR);
221                 __lis302dl_int_mode(lis->dev, 1, LIS302DL_INTMODE_FF_WU_12);
222                 __lis302dl_int_mode(lis->dev, 2, LIS302DL_INTMODE_FF_WU_12);
223         }
224 }
225
226 #if 0
227 static void _report_btn_single(struct input_dev *inp, int btn)
228 {
229         input_report_key(inp, btn, 1);
230         input_sync(inp);
231         input_report_key(inp, btn, 0);
232 }
233
234 static void _report_btn_double(struct input_dev *inp, int btn)
235 {
236         input_report_key(inp, btn, 1);
237         input_sync(inp);
238         input_report_key(inp, btn, 0);
239         input_sync(inp);
240         input_report_key(inp, btn, 1);
241         input_sync(inp);
242         input_report_key(inp, btn, 0);
243 }
244 #endif
245
246
247 static void lis302dl_bitbang_read_sample(struct lis302dl_info *lis)
248 {
249         u8 data[(LIS302DL_REG_OUT_Z - LIS302DL_REG_STATUS) + 2] = {0xC0 | LIS302DL_REG_STATUS};
250         u8 *read = data + 1;
251         unsigned long flags;
252         int mg_per_sample = __threshold_to_mg(lis, 1);
253         struct spi_message msg;
254         struct spi_transfer t;
255
256         spi_message_init(&msg);
257         memset(&t, 0, sizeof t);
258         t.len = sizeof(data);
259         spi_message_add_tail(&t, &msg);
260         t.tx_buf = &data[0];
261         t.rx_buf = &data[0];
262
263         /* grab the set of register containing status and XYZ data */
264
265         local_irq_save(flags);
266
267         /* Should complete without blocking */
268         if (spi_non_blocking_transfer(lis->spi, &msg) < 0)
269                 dev_err(lis->dev, "Error reading registers\n");
270
271         local_irq_restore(flags);
272
273         /*
274          * at the minute the test below fails 50% of the time due to
275          * a problem with level interrupts causing ISRs to get called twice.
276          * This is a workaround for that, but actually this test is still
277          * valid and the information can be used for overrrun stats.
278          */
279
280         /* has any kind of overrun been observed by the lis302dl? */
281         if (read[0] & (LIS302DL_STATUS_XOR |
282                        LIS302DL_STATUS_YOR |
283                        LIS302DL_STATUS_ZOR))
284                 lis->overruns++;
285
286         /* we have a valid sample set? */
287         if (read[0] & LIS302DL_STATUS_XYZDA) {
288                 input_report_abs(lis->input_dev, ABS_X, mg_per_sample *
289                             (s8)read[LIS302DL_REG_OUT_X - LIS302DL_REG_STATUS]);
290                 input_report_abs(lis->input_dev, ABS_Y, mg_per_sample *
291                             (s8)read[LIS302DL_REG_OUT_Y - LIS302DL_REG_STATUS]);
292                 input_report_abs(lis->input_dev, ABS_Z, mg_per_sample *
293                             (s8)read[LIS302DL_REG_OUT_Z - LIS302DL_REG_STATUS]);
294
295                 input_sync(lis->input_dev);
296         }
297
298         if (lis->threshold)
299                 /* acknowledge the wakeup source */
300                 __reg_read(lis, LIS302DL_REG_FF_WU_SRC_1);
301 }
302
303 static irqreturn_t lis302dl_interrupt(int irq, void *_lis)
304 {
305         struct lis302dl_info *lis = _lis;
306
307         lis302dl_bitbang_read_sample(lis);
308         return IRQ_HANDLED;
309 }
310
311 /* sysfs */
312
313 static ssize_t show_overruns(struct device *dev, struct device_attribute *attr,
314                          char *buf)
315 {
316         struct lis302dl_info *lis = dev_get_drvdata(dev);
317
318         return sprintf(buf, "%u\n", lis->overruns);
319 }
320
321 static DEVICE_ATTR(overruns, S_IRUGO, show_overruns, NULL);
322
323 static ssize_t show_rate(struct device *dev, struct device_attribute *attr,
324                          char *buf)
325 {
326         struct lis302dl_info *lis = dev_get_drvdata(dev);
327         u8 ctrl1;
328         unsigned long flags;
329
330         local_irq_save(flags);
331         ctrl1 = __reg_read(lis, LIS302DL_REG_CTRL1);
332         local_irq_restore(flags);
333
334         return sprintf(buf, "%d\n", ctrl1 & LIS302DL_CTRL1_DR ? 400 : 100);
335 }
336
337 static ssize_t set_rate(struct device *dev, struct device_attribute *attr,
338                         const char *buf, size_t count)
339 {
340         struct lis302dl_info *lis = dev_get_drvdata(dev);
341         unsigned long flags;
342
343         local_irq_save(flags);
344
345         if (!strcmp(buf, "400\n")) {
346                 __reg_set_bit_mask(lis, LIS302DL_REG_CTRL1, LIS302DL_CTRL1_DR,
347                                  LIS302DL_CTRL1_DR);
348                 lis->flags |= LIS302DL_F_DR;
349         } else {
350                 __reg_set_bit_mask(lis, LIS302DL_REG_CTRL1, LIS302DL_CTRL1_DR,
351                                 0);
352                 lis->flags &= ~LIS302DL_F_DR;
353         }
354         local_irq_restore(flags);
355
356         return count;
357 }
358
359 static DEVICE_ATTR(sample_rate, S_IRUGO | S_IWUSR, show_rate, set_rate);
360
361 static ssize_t show_scale(struct device *dev, struct device_attribute *attr,
362                           char *buf)
363 {
364         struct lis302dl_info *lis = dev_get_drvdata(dev);
365         u_int8_t ctrl1;
366         unsigned long flags;
367
368         local_irq_save(flags);
369         ctrl1 = __reg_read(lis, LIS302DL_REG_CTRL1);
370         local_irq_restore(flags);
371
372         return sprintf(buf, "%s\n", ctrl1 & LIS302DL_CTRL1_FS ? "9.2" : "2.3");
373 }
374
375 static ssize_t set_scale(struct device *dev, struct device_attribute *attr,
376                          const char *buf, size_t count)
377 {
378         struct lis302dl_info *lis = dev_get_drvdata(dev);
379         unsigned long flags;
380
381         local_irq_save(flags);
382
383         if (!strcmp(buf, "9.2\n")) {
384                 __reg_set_bit_mask(lis, LIS302DL_REG_CTRL1, LIS302DL_CTRL1_FS,
385                                  LIS302DL_CTRL1_FS);
386                 lis->flags |= LIS302DL_F_FS;
387         } else {
388                 __reg_set_bit_mask(lis, LIS302DL_REG_CTRL1, LIS302DL_CTRL1_FS,
389                                 0);
390                 lis->flags &= ~LIS302DL_F_FS;
391         }
392
393         if (lis->flags & LIS302DL_F_INPUT_OPEN)
394                 __enable_data_collection(lis);
395
396         local_irq_restore(flags);
397
398         return count;
399 }
400
401 static DEVICE_ATTR(full_scale, S_IRUGO | S_IWUSR, show_scale, set_scale);
402
403 static ssize_t show_threshold(struct device *dev, struct device_attribute *attr,
404                  char *buf)
405 {
406         struct lis302dl_info *lis = dev_get_drvdata(dev);
407
408         /* Display the device view of the threshold setting */
409         return sprintf(buf, "%d\n", __threshold_to_mg(lis,
410                         __mg_to_threshold(lis, lis->threshold)));
411 }
412
413 static ssize_t set_threshold(struct device *dev, struct device_attribute *attr,
414                  const char *buf, size_t count)
415 {
416         struct lis302dl_info *lis = dev_get_drvdata(dev);
417         unsigned int val;
418
419         if (sscanf(buf, "%u\n", &val) != 1)
420                 return -EINVAL;
421         /* 8g is the maximum if FS is 1 */
422         if (val > 8000)
423                 return -ERANGE;
424
425         /* Set the threshold and write it out if the device is used */
426         lis->threshold = val;
427
428         if (lis->flags & LIS302DL_F_INPUT_OPEN) {
429                 unsigned long flags;
430
431                 local_irq_save(flags);
432                 __enable_data_collection(lis);
433                 local_irq_restore(flags);
434         }
435
436         return count;
437 }
438
439 static DEVICE_ATTR(threshold, S_IRUGO | S_IWUSR, show_threshold, set_threshold);
440
441 static ssize_t show_duration(struct device *dev, struct device_attribute *attr,
442                  char *buf)
443 {
444         struct lis302dl_info *lis = dev_get_drvdata(dev);
445
446         return sprintf(buf, "%d\n", __duration_to_ms(lis,
447                         __ms_to_duration(lis, lis->duration)));
448 }
449
450 static ssize_t set_duration(struct device *dev, struct device_attribute *attr,
451                  const char *buf, size_t count)
452 {
453         struct lis302dl_info *lis = dev_get_drvdata(dev);
454         unsigned int val;
455
456         if (sscanf(buf, "%u\n", &val) != 1)
457                 return -EINVAL;
458         if (val > 2550)
459                 return -ERANGE;
460
461         lis->duration = val;
462         if (lis->flags & LIS302DL_F_INPUT_OPEN)
463                 __reg_write(lis, LIS302DL_REG_FF_WU_DURATION_1,
464                                 __ms_to_duration(lis, lis->duration));
465
466         return count;
467 }
468
469 static DEVICE_ATTR(duration, S_IRUGO | S_IWUSR, show_duration, set_duration);
470
471 static ssize_t lis302dl_dump(struct device *dev, struct device_attribute *attr,
472                                                                       char *buf)
473 {
474         struct lis302dl_info *lis = dev_get_drvdata(dev);
475         int n = 0;
476         u8 reg[0x40];
477         char *end = buf;
478         unsigned long flags;
479
480         local_irq_save(flags);
481
482         for (n = 0; n < sizeof(reg); n++)
483                 reg[n] = __reg_read(lis, n);
484
485         local_irq_restore(flags);
486
487         for (n = 0; n < sizeof(reg); n += 16) {
488                 hex_dump_to_buffer(reg + n, 16, 16, 1, end, 128, 0);
489                 end += strlen(end);
490                 *end++ = '\n';
491                 *end++ = '\0';
492         }
493
494         return end - buf;
495 }
496 static DEVICE_ATTR(dump, S_IRUGO, lis302dl_dump, NULL);
497
498 /* Configure freefall/wakeup interrupts */
499 static ssize_t set_wakeup_threshold(struct device *dev,
500                 struct device_attribute *attr, const char *buf, size_t count)
501 {
502         struct lis302dl_info *lis = dev_get_drvdata(dev);
503         unsigned int threshold;
504
505         if (sscanf(buf, "%u\n", &threshold) != 1)
506                 return -EINVAL;
507
508         if (threshold > 8000)
509                 return -ERANGE;
510
511         /* Zero turns the feature off */
512         if (threshold == 0) {
513                 if (lis->flags & LIS302DL_F_IRQ_WAKE) {
514                         disable_irq_wake(lis->pdata->interrupt);
515                         lis->flags &= ~LIS302DL_F_IRQ_WAKE;
516                 }
517
518                 return count;
519         }
520
521         lis->wakeup.threshold = threshold;
522
523         if (!(lis->flags & LIS302DL_F_IRQ_WAKE)) {
524                 enable_irq_wake(lis->pdata->interrupt);
525                 lis->flags |= LIS302DL_F_IRQ_WAKE;
526         }
527
528         return count;
529 }
530
531 static ssize_t show_wakeup_threshold(struct device *dev,
532                 struct device_attribute *attr, char *buf)
533 {
534         struct lis302dl_info *lis = dev_get_drvdata(dev);
535
536         /* All events off? */
537         if (lis->wakeup.threshold == 0)
538                 return sprintf(buf, "off\n");
539
540         return sprintf(buf, "%u\n", lis->wakeup.threshold);
541 }
542
543 static DEVICE_ATTR(wakeup_threshold, S_IRUGO | S_IWUSR, show_wakeup_threshold,
544                 set_wakeup_threshold);
545
546 static ssize_t set_wakeup_duration(struct device *dev,
547                 struct device_attribute *attr, const char *buf, size_t count)
548 {
549         struct lis302dl_info *lis = dev_get_drvdata(dev);
550         unsigned int duration;
551
552         if (sscanf(buf, "%u\n", &duration) != 1)
553                 return -EINVAL;
554
555         if (duration > 2550)
556                 return -ERANGE;
557
558         lis->wakeup.duration = duration;
559
560         return count;
561 }
562
563 static ssize_t show_wakeup_duration(struct device *dev,
564                 struct device_attribute *attr, char *buf)
565 {
566         struct lis302dl_info *lis = dev_get_drvdata(dev);
567
568         return sprintf(buf, "%u\n", lis->wakeup.duration);
569 }
570
571 static DEVICE_ATTR(wakeup_duration, S_IRUGO | S_IWUSR, show_wakeup_duration,
572                 set_wakeup_duration);
573
574 static struct attribute *lis302dl_sysfs_entries[] = {
575         &dev_attr_sample_rate.attr,
576         &dev_attr_full_scale.attr,
577         &dev_attr_threshold.attr,
578         &dev_attr_duration.attr,
579         &dev_attr_dump.attr,
580         &dev_attr_wakeup_threshold.attr,
581         &dev_attr_wakeup_duration.attr,
582         &dev_attr_overruns.attr,
583         NULL
584 };
585
586 static struct attribute_group lis302dl_attr_group = {
587         .name   = NULL,
588         .attrs  = lis302dl_sysfs_entries,
589 };
590
591 /* input device handling and driver core interaction */
592
593 static int lis302dl_input_open(struct input_dev *inp)
594 {
595         struct lis302dl_info *lis = input_get_drvdata(inp);
596         unsigned long flags;
597
598         local_irq_save(flags);
599
600         __enable_data_collection(lis);
601         lis->flags |= LIS302DL_F_INPUT_OPEN;
602
603         local_irq_restore(flags);
604
605         return 0;
606 }
607
608 static void lis302dl_input_close(struct input_dev *inp)
609 {
610         struct lis302dl_info *lis = input_get_drvdata(inp);
611         u_int8_t ctrl1 = LIS302DL_CTRL1_Xen | LIS302DL_CTRL1_Yen |
612                          LIS302DL_CTRL1_Zen;
613         unsigned long flags;
614
615         local_irq_save(flags);
616
617         /* since the input core already serializes access and makes sure we
618          * only see close() for the close of the last user, we can safely
619          * disable the data ready events */
620         __reg_set_bit_mask(lis, LIS302DL_REG_CTRL1, ctrl1, 0x00);
621         lis->flags &= ~LIS302DL_F_INPUT_OPEN;
622
623         /* however, don't power down the whole device if still needed */
624         if (!(lis->flags & LIS302DL_F_WUP_FF ||
625               lis->flags & LIS302DL_F_WUP_CLICK)) {
626                 __reg_set_bit_mask(lis, LIS302DL_REG_CTRL1, LIS302DL_CTRL1_PD,
627                                  0x00);
628         }
629         local_irq_restore(flags);
630 }
631
632 /* get the device to reload its coefficients from EEPROM and wait for it
633  * to complete
634  */
635
636 static int __lis302dl_reset_device(struct lis302dl_info *lis)
637 {
638         int timeout = 10;
639
640         __reg_write(lis, LIS302DL_REG_CTRL2,
641                         LIS302DL_CTRL2_BOOT | LIS302DL_CTRL2_FDS);
642
643         while ((__reg_read(lis, LIS302DL_REG_CTRL2)
644                         & LIS302DL_CTRL2_BOOT) && (timeout--))
645                 mdelay(1);
646
647         return !!(timeout < 0);
648 }
649
650 static int __devinit lis302dl_probe(struct spi_device *spi)
651 {
652         int rc;
653         struct lis302dl_info *lis;
654         u_int8_t wai;
655         unsigned long flags;
656         struct lis302dl_platform_data *pdata = spi->dev.platform_data;
657
658         spi->mode = SPI_MODE_3;
659         rc = spi_setup(spi);
660         if (rc < 0) {
661                 dev_err(&spi->dev, "spi_setup failed\n");
662                 return rc;
663         }
664
665         lis = kzalloc(sizeof(*lis), GFP_KERNEL);
666         if (!lis)
667                 return -ENOMEM;
668
669         lis->dev = &spi->dev;
670         lis->spi = spi;
671
672         dev_set_drvdata(lis->dev, lis);
673
674         lis->pdata = pdata;
675
676         rc = sysfs_create_group(&lis->dev->kobj, &lis302dl_attr_group);
677         if (rc) {
678                 dev_err(lis->dev, "error creating sysfs group\n");
679                 goto bail_free_lis;
680         }
681
682         /* initialize input layer details */
683         lis->input_dev = input_allocate_device();
684         if (!lis->input_dev) {
685                 dev_err(lis->dev, "Unable to allocate input device\n");
686                 goto bail_sysfs;
687         }
688
689         input_set_drvdata(lis->input_dev, lis);
690         lis->input_dev->name = pdata->name;
691          /* SPI Bus not defined as a valid bus for input subsystem*/
692         lis->input_dev->id.bustype = BUS_I2C; /* lie about it */
693         lis->input_dev->open = lis302dl_input_open;
694         lis->input_dev->close = lis302dl_input_close;
695
696         rc = input_register_device(lis->input_dev);
697         if (rc) {
698                 dev_err(lis->dev, "error %d registering input device\n", rc);
699                 goto bail_inp_dev;
700         }
701
702         local_irq_save(flags);
703         /* Configure our IO */
704         (lis->pdata->lis302dl_suspend_io)(lis, 1);
705
706         wai = __reg_read(lis, LIS302DL_REG_WHO_AM_I);
707         if (wai != LIS302DL_WHO_AM_I_MAGIC) {
708                 dev_err(lis->dev, "unknown who_am_i signature 0x%02x\n", wai);
709                 dev_set_drvdata(lis->dev, NULL);
710                 rc = -ENODEV;
711                 local_irq_restore(flags);
712                 goto bail_inp_reg;
713         }
714
715         set_bit(EV_ABS, lis->input_dev->evbit);
716         input_set_abs_params(lis->input_dev, ABS_X, 0, 0, 0, 0);
717         input_set_abs_params(lis->input_dev, ABS_Y, 0, 0, 0, 0);
718         input_set_abs_params(lis->input_dev, ABS_Z, 0, 0, 0, 0);
719
720         lis->threshold = 0;
721         lis->duration = 0;
722         memset(&lis->wakeup, 0, sizeof(lis->wakeup));
723
724         if (__lis302dl_reset_device(lis))
725                 dev_err(lis->dev, "device BOOT reload failed\n");
726
727         /* force us powered */
728         __reg_write(lis, LIS302DL_REG_CTRL1, LIS302DL_CTRL1_PD |
729                         LIS302DL_CTRL1_Xen |
730                         LIS302DL_CTRL1_Yen |
731                         LIS302DL_CTRL1_Zen);
732         mdelay(1);
733
734         __reg_write(lis, LIS302DL_REG_CTRL2, 0);
735         __reg_write(lis, LIS302DL_REG_CTRL3,
736                         LIS302DL_CTRL3_PP_OD | LIS302DL_CTRL3_IHL);
737         __reg_write(lis, LIS302DL_REG_FF_WU_THS_1, 0x0);
738         __reg_write(lis, LIS302DL_REG_FF_WU_DURATION_1, 0x00);
739         __reg_write(lis, LIS302DL_REG_FF_WU_CFG_1, 0x0);
740
741         /* start off in powered down mode; we power up when someone opens us */
742         __reg_write(lis, LIS302DL_REG_CTRL1, LIS302DL_CTRL1_Xen |
743                         LIS302DL_CTRL1_Yen | LIS302DL_CTRL1_Zen);
744
745         if (pdata->open_drain)
746                 /* switch interrupt to open collector, active-low */
747                 __reg_write(lis, LIS302DL_REG_CTRL3,
748                                 LIS302DL_CTRL3_PP_OD | LIS302DL_CTRL3_IHL);
749         else
750                 /* push-pull, active-low */
751                 __reg_write(lis, LIS302DL_REG_CTRL3, LIS302DL_CTRL3_IHL);
752
753         __lis302dl_int_mode(lis->dev, 1, LIS302DL_INTMODE_GND);
754         __lis302dl_int_mode(lis->dev, 2, LIS302DL_INTMODE_GND);
755
756         __reg_read(lis, LIS302DL_REG_STATUS);
757         __reg_read(lis, LIS302DL_REG_FF_WU_SRC_1);
758         __reg_read(lis, LIS302DL_REG_FF_WU_SRC_2);
759         __reg_read(lis, LIS302DL_REG_CLICK_SRC);
760         local_irq_restore(flags);
761
762         dev_info(lis->dev, "Found %s\n", pdata->name);
763
764         lis->pdata = pdata;
765
766         set_irq_handler(lis->pdata->interrupt, handle_level_irq);
767
768         rc = request_irq(lis->pdata->interrupt, lis302dl_interrupt,
769                          IRQF_TRIGGER_LOW, "lis302dl", lis);
770
771         if (rc < 0) {
772                 dev_err(lis->dev, "error requesting IRQ %d\n",
773                         lis->pdata->interrupt);
774                 goto bail_inp_reg;
775         }
776         return 0;
777
778 bail_inp_reg:
779         input_unregister_device(lis->input_dev);
780 bail_inp_dev:
781         input_free_device(lis->input_dev);
782 bail_sysfs:
783         sysfs_remove_group(&lis->dev->kobj, &lis302dl_attr_group);
784 bail_free_lis:
785         kfree(lis);
786         return rc;
787 }
788
789 static int __devexit lis302dl_remove(struct spi_device *spi)
790 {
791         struct lis302dl_info *lis = dev_get_drvdata(&spi->dev);
792         unsigned long flags;
793
794         /* Disable interrupts */
795         if (lis->flags & LIS302DL_F_IRQ_WAKE)
796                 disable_irq_wake(lis->pdata->interrupt);
797         free_irq(lis->pdata->interrupt, lis);
798
799         /* Reset and power down the device */
800         local_irq_save(flags);
801         __reg_write(lis, LIS302DL_REG_CTRL3, 0x00);
802         __reg_write(lis, LIS302DL_REG_CTRL2, 0x00);
803         __reg_write(lis, LIS302DL_REG_CTRL1, 0x00);
804         local_irq_restore(flags);
805
806         /* Cleanup resources */
807         sysfs_remove_group(&spi->dev.kobj, &lis302dl_attr_group);
808         input_unregister_device(lis->input_dev);
809         if (lis->input_dev)
810                 input_free_device(lis->input_dev);
811         dev_set_drvdata(lis->dev, NULL);
812         kfree(lis);
813
814         return 0;
815 }
816
817 #ifdef CONFIG_PM
818
819 static u8 regs_to_save[] = {
820         LIS302DL_REG_CTRL1,
821         LIS302DL_REG_CTRL2,
822         LIS302DL_REG_CTRL3,
823         LIS302DL_REG_FF_WU_CFG_1,
824         LIS302DL_REG_FF_WU_THS_1,
825         LIS302DL_REG_FF_WU_DURATION_1,
826         LIS302DL_REG_FF_WU_CFG_2,
827         LIS302DL_REG_FF_WU_THS_2,
828         LIS302DL_REG_FF_WU_DURATION_2,
829         LIS302DL_REG_CLICK_CFG,
830         LIS302DL_REG_CLICK_THSY_X,
831         LIS302DL_REG_CLICK_THSZ,
832         LIS302DL_REG_CLICK_TIME_LIMIT,
833         LIS302DL_REG_CLICK_LATENCY,
834         LIS302DL_REG_CLICK_WINDOW,
835
836 };
837
838 static int lis302dl_suspend(struct spi_device *spi, pm_message_t state)
839 {
840         struct lis302dl_info *lis = dev_get_drvdata(&spi->dev);
841         unsigned long flags;
842         u_int8_t tmp;
843         int n;
844
845         /* determine if we want to wake up from the accel. */
846         if (lis->flags & LIS302DL_F_WUP_CLICK)
847                 return 0;
848
849         disable_irq(lis->pdata->interrupt);
850         local_irq_save(flags);
851
852         /*
853          * When we share SPI over multiple sensors, there is a race here
854          * that one or more sensors will lose.  In that case, the shared
855          * SPI bus GPIO will be in sleep mode and partially pulled down.  So
856          * we explicitly put our IO into "wake" mode here before the final
857          * traffic to the sensor.
858          */
859         (lis->pdata->lis302dl_suspend_io)(lis, 1);
860
861         /* save registers */
862         for (n = 0; n < ARRAY_SIZE(regs_to_save); n++)
863                 lis->regs[regs_to_save[n]] =
864                         __reg_read(lis, regs_to_save[n]);
865
866         /* power down or enable wakeup */
867
868         if (lis->wakeup.threshold == 0) {
869                 tmp = __reg_read(lis, LIS302DL_REG_CTRL1);
870                 tmp &= ~LIS302DL_CTRL1_PD;
871                 __reg_write(lis, LIS302DL_REG_CTRL1, tmp);
872         } else
873                 __enable_wakeup(lis);
874
875         /* place our IO to the device in sleep-compatible states */
876         (lis->pdata->lis302dl_suspend_io)(lis, 0);
877
878         local_irq_restore(flags);
879
880         return 0;
881 }
882
883 static int lis302dl_resume(struct spi_device *spi)
884 {
885         struct lis302dl_info *lis = dev_get_drvdata(&spi->dev);
886         unsigned long flags;
887         int n;
888
889         if (lis->flags & LIS302DL_F_WUP_CLICK)
890                 return 0;
891
892         local_irq_save(flags);
893
894         /* get our IO to the device back in operational states */
895         (lis->pdata->lis302dl_suspend_io)(lis, 1);
896
897         /* resume from powerdown first! */
898         __reg_write(lis, LIS302DL_REG_CTRL1,
899                         LIS302DL_CTRL1_PD |
900                         LIS302DL_CTRL1_Xen |
901                         LIS302DL_CTRL1_Yen |
902                         LIS302DL_CTRL1_Zen);
903         mdelay(1);
904
905         if (__lis302dl_reset_device(lis))
906                 dev_err(&spi->dev, "device BOOT reload failed\n");
907
908         lis->regs[LIS302DL_REG_CTRL1] |=        LIS302DL_CTRL1_PD |
909                                                 LIS302DL_CTRL1_Xen |
910                                                 LIS302DL_CTRL1_Yen |
911                                                 LIS302DL_CTRL1_Zen;
912
913         /* restore registers after resume */
914         for (n = 0; n < ARRAY_SIZE(regs_to_save); n++)
915                 __reg_write(lis, regs_to_save[n], lis->regs[regs_to_save[n]]);
916
917         /* if someone had us open, reset the non-wake threshold stuff */
918         if (lis->flags & LIS302DL_F_INPUT_OPEN)
919                 __enable_data_collection(lis);
920
921         local_irq_restore(flags);
922         enable_irq(lis->pdata->interrupt);
923
924         return 0;
925 }
926 #else
927 #define lis302dl_suspend        NULL
928 #define lis302dl_resume         NULL
929 #endif
930
931 static struct spi_driver lis302dl_spi_driver = {
932         .driver = {
933                 .name = "lis302dl",
934                 .owner = THIS_MODULE,
935         },
936
937         .probe  = lis302dl_probe,
938         .remove = __devexit_p(lis302dl_remove),
939         .suspend = lis302dl_suspend,
940         .resume  = lis302dl_resume,
941 };
942
943 static int __devinit lis302dl_init(void)
944 {
945         return spi_register_driver(&lis302dl_spi_driver);
946 }
947
948 static void __exit lis302dl_exit(void)
949 {
950         spi_unregister_driver(&lis302dl_spi_driver);
951 }
952
953 MODULE_AUTHOR("Harald Welte <laforge@openmoko.org>");
954 MODULE_LICENSE("GPL");
955
956 module_init(lis302dl_init);
957 module_exit(lis302dl_exit);