aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/hwmon/lis3lv02d.c
diff options
context:
space:
mode:
authorSamu Onkalo <samu.p.onkalo@nokia.com>2010-10-22 07:57:27 -0400
committerGuenter Roeck <guenter.roeck@ericsson.com>2010-10-25 17:11:38 -0400
commit2a7fade7e03a7c773f91e2e5ff26ad6fafda5a9f (patch)
tree160964eaad5bfaa0f4a02be0709fd49d529d84d5 /drivers/hwmon/lis3lv02d.c
parent821f664644c2da9e1a51e36751abedf49d4332e0 (diff)
hwmon: lis3: Power on corrections
Sometimes lis3 chip seems to fail to setup factory tuning at boot up. This probably happens if there is some odd power ramp down ramp up sequence for example in device restart. Set boot bit in control2 register to trig boot sequence manually and wait until it is finished. Signed-off-by: Samu Onkalo <samu.p.onkalo@nokia.com> Acked-by: Jonathan Cameron <jic23@cam.ac.uk> Acked-by: Eric Piel <eric.piel@tremplin-utc.net> Signed-off-by: Guenter Roeck <guenter.roeck@ericsson.com>
Diffstat (limited to 'drivers/hwmon/lis3lv02d.c')
-rw-r--r--drivers/hwmon/lis3lv02d.c19
1 files changed, 11 insertions, 8 deletions
diff --git a/drivers/hwmon/lis3lv02d.c b/drivers/hwmon/lis3lv02d.c
index 1095dff9b200..7448411f51ea 100644
--- a/drivers/hwmon/lis3lv02d.c
+++ b/drivers/hwmon/lis3lv02d.c
@@ -307,19 +307,22 @@ void lis3lv02d_poweron(struct lis3lv02d *lis3)
307 307
308 lis3->init(lis3); 308 lis3->init(lis3);
309 309
310 /* LIS3 power on delay is quite long */
311 msleep(lis3->pwron_delay / lis3lv02d_get_odr());
312
313 /* 310 /*
314 * Common configuration 311 * Common configuration
315 * BDU: (12 bits sensors only) LSB and MSB values are not updated until 312 * BDU: (12 bits sensors only) LSB and MSB values are not updated until
316 * both have been read. So the value read will always be correct. 313 * both have been read. So the value read will always be correct.
314 * Set BOOT bit to refresh factory tuning values.
317 */ 315 */
318 if (lis3->whoami == WAI_12B) { 316 lis3->read(lis3, CTRL_REG2, &reg);
319 lis3->read(lis3, CTRL_REG2, &reg); 317 if (lis3->whoami == WAI_12B)
320 reg |= CTRL2_BDU; 318 reg |= CTRL2_BDU | CTRL2_BOOT;
321 lis3->write(lis3, CTRL_REG2, reg); 319 else
322 } 320 reg |= CTRL2_BOOT_8B;
321 lis3->write(lis3, CTRL_REG2, reg);
322
323 /* LIS3 power on delay is quite long */
324 msleep(lis3->pwron_delay / lis3lv02d_get_odr());
325
323 if (lis3->reg_ctrl) 326 if (lis3->reg_ctrl)
324 lis3_context_restore(lis3); 327 lis3_context_restore(lis3);
325} 328}