aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/hwmon/lis3lv02d.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/hwmon/lis3lv02d.c')
-rw-r--r--drivers/hwmon/lis3lv02d.c24
1 files changed, 16 insertions, 8 deletions
diff --git a/drivers/hwmon/lis3lv02d.c b/drivers/hwmon/lis3lv02d.c
index 1c8f10817e69..b12ee359d90e 100644
--- a/drivers/hwmon/lis3lv02d.c
+++ b/drivers/hwmon/lis3lv02d.c
@@ -127,12 +127,14 @@ void lis3lv02d_poweron(struct lis3lv02d *lis3)
127 127
128 /* 128 /*
129 * Common configuration 129 * Common configuration
130 * BDU: LSB and MSB values are not updated until both have been read. 130 * BDU: (12 bits sensors only) LSB and MSB values are not updated until
131 * So the value read will always be correct. 131 * both have been read. So the value read will always be correct.
132 */ 132 */
133 lis3->read(lis3, CTRL_REG2, &reg); 133 if (lis3->whoami == WAI_12B) {
134 reg |= CTRL2_BDU; 134 lis3->read(lis3, CTRL_REG2, &reg);
135 lis3->write(lis3, CTRL_REG2, reg); 135 reg |= CTRL2_BDU;
136 lis3->write(lis3, CTRL_REG2, reg);
137 }
136} 138}
137EXPORT_SYMBOL_GPL(lis3lv02d_poweron); 139EXPORT_SYMBOL_GPL(lis3lv02d_poweron);
138 140
@@ -363,7 +365,8 @@ static ssize_t lis3lv02d_calibrate_store(struct device *dev,
363} 365}
364 366
365/* conversion btw sampling rate and the register values */ 367/* conversion btw sampling rate and the register values */
366static int lis3lv02dl_df_val[4] = {40, 160, 640, 2560}; 368static int lis3_12_rates[4] = {40, 160, 640, 2560};
369static int lis3_8_rates[2] = {100, 400};
367static ssize_t lis3lv02d_rate_show(struct device *dev, 370static ssize_t lis3lv02d_rate_show(struct device *dev,
368 struct device_attribute *attr, char *buf) 371 struct device_attribute *attr, char *buf)
369{ 372{
@@ -371,8 +374,13 @@ static ssize_t lis3lv02d_rate_show(struct device *dev,
371 int val; 374 int val;
372 375
373 lis3_dev.read(&lis3_dev, CTRL_REG1, &ctrl); 376 lis3_dev.read(&lis3_dev, CTRL_REG1, &ctrl);
374 val = (ctrl & (CTRL1_DF0 | CTRL1_DF1)) >> 4; 377
375 return sprintf(buf, "%d\n", lis3lv02dl_df_val[val]); 378 if (lis3_dev.whoami == WAI_12B)
379 val = lis3_12_rates[(ctrl & (CTRL1_DF0 | CTRL1_DF1)) >> 4];
380 else
381 val = lis3_8_rates[(ctrl & CTRL1_DR) >> 7];
382
383 return sprintf(buf, "%d\n", val);
376} 384}
377 385
378static DEVICE_ATTR(position, S_IRUGO, lis3lv02d_position_show, NULL); 386static DEVICE_ATTR(position, S_IRUGO, lis3lv02d_position_show, NULL);