summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--driver/accel_lis2dh.c12
-rw-r--r--driver/accelgyro_bmi160.c37
-rw-r--r--driver/accelgyro_lsm6dsm.c4
3 files changed, 21 insertions, 32 deletions
diff --git a/driver/accel_lis2dh.c b/driver/accel_lis2dh.c
index f7d897757b..8975769788 100644
--- a/driver/accel_lis2dh.c
+++ b/driver/accel_lis2dh.c
@@ -125,14 +125,10 @@ static int set_data_rate(const struct motion_sensor_t *s, int rate, int rnd)
normalized_rate = LIS2DH_REG_TO_NORMALIZE(reg_val);
}
- /* Adjust rounded value */
- if (reg_val > LIS2DH_ODR_400HZ_VAL) {
- reg_val = LIS2DH_ODR_400HZ_VAL;
- normalized_rate = LIS2DH_ODR_MAX_VAL;
- } else if (reg_val < LIS2DH_ODR_1HZ_VAL) {
- reg_val = LIS2DH_ODR_1HZ_VAL;
- normalized_rate = LIS2DH_ODR_MIN_VAL;
- }
+ if (normalized_rate > MIN(LIS2DH_ODR_MAX_VAL,
+ CONFIG_EC_MAX_SENSOR_FREQ_MILLIHZ) ||
+ normalized_rate < LIS2DH_ODR_MIN_VAL)
+ return EC_RES_INVALID_PARAM;
/*
* Lock accel resource to prevent another task from attempting
diff --git a/driver/accelgyro_bmi160.c b/driver/accelgyro_bmi160.c
index 5a28ae8b09..d8a3cb438b 100644
--- a/driver/accelgyro_bmi160.c
+++ b/driver/accelgyro_bmi160.c
@@ -385,41 +385,32 @@ static int set_data_rate(const struct motion_sensor_t *s,
normalized_rate = BMI160_REG_TO_ODR(reg_val);
if (rnd && (normalized_rate < rate)) {
reg_val++;
- normalized_rate *= 2;
+ normalized_rate = BMI160_REG_TO_ODR(reg_val);
}
switch (s->type) {
case MOTIONSENSE_TYPE_ACCEL:
- if (reg_val > BMI160_ODR_1600HZ) {
- reg_val = BMI160_ODR_1600HZ;
- normalized_rate = 1600000;
- } else if (reg_val < BMI160_ODR_0_78HZ) {
- reg_val = BMI160_ODR_0_78HZ;
- normalized_rate = 780;
- }
+ if (normalized_rate > MIN(BMI160_ACCEL_MAX_FREQ,
+ CONFIG_EC_MAX_SENSOR_FREQ_MILLIHZ) ||
+ normalized_rate < BMI160_ACCEL_MIN_FREQ)
+ return EC_RES_INVALID_PARAM;
break;
case MOTIONSENSE_TYPE_GYRO:
- if (reg_val > BMI160_ODR_3200HZ) {
- reg_val = BMI160_ODR_3200HZ;
- normalized_rate = 3200000;
- } else if (reg_val < BMI160_ODR_25HZ) {
- reg_val = BMI160_ODR_25HZ;
- normalized_rate = 25000;
- }
+ if (normalized_rate > MIN(BMI160_GYRO_MAX_FREQ,
+ CONFIG_EC_MAX_SENSOR_FREQ_MILLIHZ) ||
+ normalized_rate < BMI160_GYRO_MIN_FREQ)
+ return EC_RES_INVALID_PARAM;
break;
+#ifdef CONFIG_MAG_BMI160_BMM150
case MOTIONSENSE_TYPE_MAG:
/* We use the regular preset we can go about 100Hz */
- if (reg_val > BMI160_ODR_100HZ) {
- reg_val = BMI160_ODR_100HZ;
- normalized_rate = 100000;
- } else if (reg_val < BMI160_ODR_0_78HZ) {
- reg_val = BMI160_ODR_0_78HZ;
- normalized_rate = 780;
- }
+ if (reg_val > BMI160_ODR_100HZ || reg_val < BMI160_ODR_0_78HZ)
+ return EC_RES_INVALID_PARAM;
break;
+#endif
default:
- return -1;
+ return EC_RES_INVALID_PARAM;
}
/*
diff --git a/driver/accelgyro_lsm6dsm.c b/driver/accelgyro_lsm6dsm.c
index 237cd2cf9b..5341b5a01a 100644
--- a/driver/accelgyro_lsm6dsm.c
+++ b/driver/accelgyro_lsm6dsm.c
@@ -410,7 +410,9 @@ static int set_data_rate(const struct motion_sensor_t *s, int rate, int rnd)
reg_val++;
normalized_rate = LSM6DSM_REG_TO_ODR(reg_val);
}
- if (normalized_rate == 0)
+ if (normalized_rate < LSM6DSM_ODR_MIN_VAL ||
+ normalized_rate > MIN(LSM6DSM_ODR_MAX_VAL,
+ CONFIG_EC_MAX_SENSOR_FREQ_MILLIHZ))
return EC_RES_INVALID_PARAM;
} else {
reg_val = 0;