aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaniel Mack <daniel@caiaq.de>2009-09-21 20:04:43 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2009-09-22 10:17:48 -0400
commit8873c33483e62988ed886230aab71ef4c678f710 (patch)
tree441cdc48497b84c823330241ecff147642e136a4
parent0ec48915e8bbb37dea3df85c41e4c3498b95664b (diff)
lis3: add free-fall/wakeup function via platform_data
This offers a way for platforms to define flags and thresholds for the free-fall/wakeup functions of the lis302d chips. More registers needed to be seperated as they are specific to the Signed-off-by: Daniel Mack <daniel@caiaq.de> Acked-by: Pavel Machek <pavel@ucw.cz> Cc: Eric Piel <eric.piel@tremplin-utc.net> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
-rw-r--r--drivers/hwmon/lis3lv02d.c9
-rw-r--r--drivers/hwmon/lis3lv02d.h24
-rw-r--r--include/linux/lis3lv02d.h9
3 files changed, 36 insertions, 6 deletions
diff --git a/drivers/hwmon/lis3lv02d.c b/drivers/hwmon/lis3lv02d.c
index 271338bdb6be..cf5afb9a10ab 100644
--- a/drivers/hwmon/lis3lv02d.c
+++ b/drivers/hwmon/lis3lv02d.c
@@ -454,6 +454,15 @@ int lis3lv02d_init_device(struct lis3lv02d *dev)
454 (p->click_thresh_y << 4)); 454 (p->click_thresh_y << 4));
455 } 455 }
456 456
457 if (p->wakeup_flags && (dev->whoami == LIS_SINGLE_ID)) {
458 dev->write(dev, FF_WU_CFG_1, p->wakeup_flags);
459 dev->write(dev, FF_WU_THS_1, p->wakeup_thresh & 0x7f);
460 /* default to 2.5ms for now */
461 dev->write(dev, FF_WU_DURATION_1, 1);
462 /* enable high pass filter for both free-fall units */
463 dev->write(dev, CTRL_REG2, HP_FF_WU1 | HP_FF_WU2);
464 }
465
457 if (p->irq_cfg) 466 if (p->irq_cfg)
458 dev->write(dev, CTRL_REG3, p->irq_cfg); 467 dev->write(dev, CTRL_REG3, p->irq_cfg);
459 } 468 }
diff --git a/drivers/hwmon/lis3lv02d.h b/drivers/hwmon/lis3lv02d.h
index e320e2f511f1..3e1ff46f72d3 100644
--- a/drivers/hwmon/lis3lv02d.h
+++ b/drivers/hwmon/lis3lv02d.h
@@ -58,15 +58,17 @@ enum lis3_reg {
58 OUTZ_L = 0x2C, 58 OUTZ_L = 0x2C,
59 OUTZ_H = 0x2D, 59 OUTZ_H = 0x2D,
60 OUTZ = 0x2D, 60 OUTZ = 0x2D,
61 FF_WU_CFG = 0x30,
62 FF_WU_SRC = 0x31,
63 FF_WU_ACK = 0x32,
64 FF_WU_THS_L = 0x34,
65 FF_WU_THS_H = 0x35,
66 FF_WU_DURATION = 0x36,
67}; 61};
68 62
69enum lis302d_reg { 63enum lis302d_reg {
64 FF_WU_CFG_1 = 0x30,
65 FF_WU_SRC_1 = 0x31,
66 FF_WU_THS_1 = 0x32,
67 FF_WU_DURATION_1 = 0x33,
68 FF_WU_CFG_2 = 0x34,
69 FF_WU_SRC_2 = 0x35,
70 FF_WU_THS_2 = 0x36,
71 FF_WU_DURATION_2 = 0x37,
70 CLICK_CFG = 0x38, 72 CLICK_CFG = 0x38,
71 CLICK_SRC = 0x39, 73 CLICK_SRC = 0x39,
72 CLICK_THSY_X = 0x3B, 74 CLICK_THSY_X = 0x3B,
@@ -77,6 +79,12 @@ enum lis302d_reg {
77}; 79};
78 80
79enum lis3lv02d_reg { 81enum lis3lv02d_reg {
82 FF_WU_CFG = 0x30,
83 FF_WU_SRC = 0x31,
84 FF_WU_ACK = 0x32,
85 FF_WU_THS_L = 0x34,
86 FF_WU_THS_H = 0x35,
87 FF_WU_DURATION = 0x36,
80 DD_CFG = 0x38, 88 DD_CFG = 0x38,
81 DD_SRC = 0x39, 89 DD_SRC = 0x39,
82 DD_ACK = 0x3A, 90 DD_ACK = 0x3A,
@@ -107,6 +115,10 @@ enum lis3lv02d_ctrl2 {
107 CTRL2_FS = 0x80, /* Full Scale selection */ 115 CTRL2_FS = 0x80, /* Full Scale selection */
108}; 116};
109 117
118enum lis302d_ctrl2 {
119 HP_FF_WU2 = 0x08,
120 HP_FF_WU1 = 0x04,
121};
110 122
111enum lis3lv02d_ctrl3 { 123enum lis3lv02d_ctrl3 {
112 CTRL3_CFS0 = 0x01, 124 CTRL3_CFS0 = 0x01,
diff --git a/include/linux/lis3lv02d.h b/include/linux/lis3lv02d.h
index 113778b5df36..3cc2f2c53e4c 100644
--- a/include/linux/lis3lv02d.h
+++ b/include/linux/lis3lv02d.h
@@ -34,6 +34,15 @@ struct lis3lv02d_platform_data {
34#define LIS3_IRQ_OPEN_DRAIN (1 << 6) 34#define LIS3_IRQ_OPEN_DRAIN (1 << 6)
35#define LIS3_IRQ_ACTIVE_LOW (1 << 7) 35#define LIS3_IRQ_ACTIVE_LOW (1 << 7)
36 unsigned char irq_cfg; 36 unsigned char irq_cfg;
37
38#define LIS3_WAKEUP_X_LO (1 << 0)
39#define LIS3_WAKEUP_X_HI (1 << 1)
40#define LIS3_WAKEUP_Y_LO (1 << 2)
41#define LIS3_WAKEUP_Y_HI (1 << 3)
42#define LIS3_WAKEUP_Z_LO (1 << 4)
43#define LIS3_WAKEUP_Z_HI (1 << 5)
44 unsigned char wakeup_flags;
45 unsigned char wakeup_thresh;
37}; 46};
38 47
39#endif /* __LIS3LV02D_H_ */ 48#endif /* __LIS3LV02D_H_ */