summaryrefslogtreecommitdiff
path: root/driver/accelgyro_lsm6dsm.c
diff options
context:
space:
mode:
authorGwendal Grignou <gwendal@chromium.org>2018-01-24 08:28:03 -0800
committerchrome-bot <chrome-bot@chromium.org>2018-03-19 19:21:21 -0700
commit3d3a009f49c82ba4ed907a0d99fdef63d720ec1c (patch)
tree1961a698237bed08b21f151eec83ee00d3fb9cc9 /driver/accelgyro_lsm6dsm.c
parent94f5413159518e798800ca41916c02af00a6e2c8 (diff)
downloadchrome-ec-3d3a009f49c82ba4ed907a0d99fdef63d720ec1c.tar.gz
driver: lsm6dsm: fix units
Units must be reported in according to the range. 2g means 1<<15 should be returned when accel is 2g. Actually accelerometer report units in mg. BUG=b:73546254 BRANCH=master TEST=Check with accelinfo with 2g gain Z ~= 1<<14. Change-Id: I218210ca8305ecbe76a681b535f3d75f3a6bea52 Signed-off-by: Gwendal Grignou <gwendal@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/924408 Reviewed-by: Aseda Aboagye <aaboagye@chromium.org>
Diffstat (limited to 'driver/accelgyro_lsm6dsm.c')
-rw-r--r--driver/accelgyro_lsm6dsm.c13
1 files changed, 7 insertions, 6 deletions
diff --git a/driver/accelgyro_lsm6dsm.c b/driver/accelgyro_lsm6dsm.c
index 11aceb5347..5e2ab05a54 100644
--- a/driver/accelgyro_lsm6dsm.c
+++ b/driver/accelgyro_lsm6dsm.c
@@ -45,7 +45,8 @@ static int set_range(const struct motion_sensor_t *s, int range, int rnd)
if (s->type == MOTIONSENSE_TYPE_ACCEL) {
/* Adjust and check rounded value for acc. */
if (rnd && (newrange < LSM6DSM_ACCEL_NORMALIZE_FS(newrange)))
- newrange <<= 1;
+ newrange *= 2;
+
if (newrange > LSM6DSM_ACCEL_FS_MAX_VAL)
newrange = LSM6DSM_ACCEL_FS_MAX_VAL;
@@ -53,7 +54,8 @@ static int set_range(const struct motion_sensor_t *s, int range, int rnd)
} else {
/* Adjust and check rounded value for gyro. */
if (rnd && (newrange < LSM6DSM_GYRO_NORMALIZE_FS(newrange)))
- newrange <<= 1;
+ newrange *= 2;
+
if (newrange > LSM6DSM_GYRO_FS_MAX_VAL)
newrange = LSM6DSM_GYRO_FS_MAX_VAL;
@@ -65,7 +67,7 @@ static int set_range(const struct motion_sensor_t *s, int range, int rnd)
if (err == EC_SUCCESS)
/* Save internally gain for speed optimization. */
data->base.range = (s->type == MOTIONSENSE_TYPE_ACCEL ?
- LSM6DSM_ACCEL_FS_GAIN(newrange) :
+ newrange :
LSM6DSM_GYRO_FS_GAIN(newrange));
mutex_unlock(s->mutex);
@@ -82,9 +84,8 @@ static int get_range(const struct motion_sensor_t *s)
{
struct stprivate_data *data = s->drv_data;
- if (MOTIONSENSE_TYPE_ACCEL == s->type)
- return LSM6DSM_ACCEL_GAIN_FS(data->base.range);
-
+ if (s->type == MOTIONSENSE_TYPE_ACCEL)
+ return data->base.range;
return LSM6DSM_GYRO_GAIN_FS(data->base.range);
}