summaryrefslogtreecommitdiff
path: root/driver/accelgyro_lsm6dsm.c
diff options
context:
space:
mode:
Diffstat (limited to 'driver/accelgyro_lsm6dsm.c')
-rw-r--r--driver/accelgyro_lsm6dsm.c20
1 files changed, 8 insertions, 12 deletions
diff --git a/driver/accelgyro_lsm6dsm.c b/driver/accelgyro_lsm6dsm.c
index 7f9ac5b983..30650eebe7 100644
--- a/driver/accelgyro_lsm6dsm.c
+++ b/driver/accelgyro_lsm6dsm.c
@@ -375,22 +375,20 @@ static int set_range(const struct motion_sensor_t *s, int range, int rnd)
reg_val = LSM6DSM_ACCEL_FS_REG(newrange);
} else {
/* Adjust and check rounded value for gyro. */
- if (rnd && (newrange < LSM6DSM_GYRO_NORMALIZE_FS(newrange)))
- newrange *= 2;
-
- if (newrange > LSM6DSM_GYRO_FS_MAX_VAL)
- newrange = LSM6DSM_GYRO_FS_MAX_VAL;
+ reg_val = LSM6DSM_GYRO_FS_REG(range);
+ if (rnd && (range > LSM6DSM_GYRO_NORMALIZE_FS(reg_val)))
+ reg_val++;
- reg_val = LSM6DSM_GYRO_FS_REG(newrange);
+ if (reg_val > LSM6DSM_GYRO_FS_MAX_REG_VAL)
+ reg_val = LSM6DSM_GYRO_FS_MAX_REG_VAL;
+ newrange = LSM6DSM_GYRO_NORMALIZE_FS(reg_val);
}
mutex_lock(s->mutex);
err = st_write_data_with_mask(s, ctrl_reg, LSM6DSM_RANGE_MASK, reg_val);
if (err == EC_SUCCESS)
/* Save internally gain for speed optimization. */
- data->base.range = (s->type == MOTIONSENSE_TYPE_ACCEL ?
- newrange :
- LSM6DSM_GYRO_FS_GAIN(newrange));
+ data->base.range = newrange;
mutex_unlock(s->mutex);
return EC_SUCCESS;
@@ -414,9 +412,7 @@ static int get_range(const struct motion_sensor_t *s)
*/
struct stprivate_data *data = s->drv_data;
- if (s->type == MOTIONSENSE_TYPE_ACCEL)
- return data->base.range;
- return LSM6DSM_GYRO_GAIN_FS(data->base.range);
+ return data->base.range;
}
/**