Skip to content

Commit

Permalink
iio: bmi160: Fix time needed to sleep after command execution
Browse files Browse the repository at this point in the history
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@grinn-global.com>
Cc: <Stable@vger.kernel.org>
Signed-off-by: Jonathan Cameron <jic23@kernel.org>
  • Loading branch information
Marcin Niestroj authored and Jonathan Cameron committed Dec 30, 2016
1 parent e91c3df commit 01d1f7a
Showing 1 changed file with 6 additions and 19 deletions.
25 changes: 6 additions & 19 deletions drivers/iio/imu/bmi160/bmi160_core.c
Original file line number Diff line number Diff line change
Expand Up @@ -66,10 +66,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) { \
Expand Down Expand Up @@ -151,20 +149,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 {
Expand Down Expand Up @@ -289,7 +276,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;
}
Expand Down

0 comments on commit 01d1f7a

Please sign in to comment.