On 08/12/16 14:22, Marcin Niestroj wrote: > Datasheet specifies typical and maximum execution times for which CMD > register is occupied after previous command execution. We took these > values as minimum and maximum time for usleep_range() call before making > a new command execution. > > To be sure, that the CMD register is no longer occupied we need to wait > *at least* the maximum time specified by datasheet. > > Signed-off-by: Marcin Niestroj <m.niestroj@xxxxxxxxxxxxxxxx> This looks like a definite bug that we would want to fix in stable as well. If possible, could you ensure this is the first patch in the updated series? Thanks, Jonathan > --- > Patch introduced in v2 > > drivers/iio/imu/bmi160/bmi160_core.c | 25 ++++++------------------- > 1 file changed, 6 insertions(+), 19 deletions(-) > > diff --git a/drivers/iio/imu/bmi160/bmi160_core.c b/drivers/iio/imu/bmi160/bmi160_core.c > index 095533c..88bcf3f 100644 > --- a/drivers/iio/imu/bmi160/bmi160_core.c > +++ b/drivers/iio/imu/bmi160/bmi160_core.c > @@ -67,10 +67,8 @@ > > #define BMI160_REG_DUMMY 0x7F > > -#define BMI160_ACCEL_PMU_MIN_USLEEP 3200 > -#define BMI160_ACCEL_PMU_MAX_USLEEP 3800 > -#define BMI160_GYRO_PMU_MIN_USLEEP 55000 > -#define BMI160_GYRO_PMU_MAX_USLEEP 80000 > +#define BMI160_ACCEL_PMU_MIN_USLEEP 3800 > +#define BMI160_GYRO_PMU_MIN_USLEEP 80000 > #define BMI160_SOFTRESET_USLEEP 1000 > > #define BMI160_CHANNEL(_type, _axis, _index) { \ > @@ -153,20 +151,9 @@ static struct bmi160_regs bmi160_regs[] = { > }, > }; > > -struct bmi160_pmu_time { > - unsigned long min; > - unsigned long max; > -}; > - > -static struct bmi160_pmu_time bmi160_pmu_time[] = { > - [BMI160_ACCEL] = { > - .min = BMI160_ACCEL_PMU_MIN_USLEEP, > - .max = BMI160_ACCEL_PMU_MAX_USLEEP > - }, > - [BMI160_GYRO] = { > - .min = BMI160_GYRO_PMU_MIN_USLEEP, > - .max = BMI160_GYRO_PMU_MIN_USLEEP, > - }, > +static unsigned long bmi160_pmu_time[] = { > + [BMI160_ACCEL] = BMI160_ACCEL_PMU_MIN_USLEEP, > + [BMI160_GYRO] = BMI160_GYRO_PMU_MIN_USLEEP, > }; > > struct bmi160_scale { > @@ -293,7 +280,7 @@ int bmi160_set_mode(struct bmi160_data *data, enum bmi160_sensor_type t, > if (ret < 0) > return ret; > > - usleep_range(bmi160_pmu_time[t].min, bmi160_pmu_time[t].max); > + usleep_range(bmi160_pmu_time[t], bmi160_pmu_time[t] + 1000); > > return 0; > } > -- To unsubscribe from this list: send the line "unsubscribe linux-iio" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html