| From 2ecf01788e41957a08005520b64a37a9a766a521 Mon Sep 17 00:00:00 2001 |
| From: Marcin Niestroj <m.niestroj@grinn-global.com> |
| Date: Thu, 8 Dec 2016 15:22:58 +0100 |
| Subject: [PATCH] iio: bmi160: Fix time needed to sleep after command execution |
| |
| commit 01d1f7a99e457952aa51849ed7c1cc4ced7bca4b upstream. |
| |
| 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> |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| |
| diff --git a/drivers/iio/imu/bmi160/bmi160_core.c b/drivers/iio/imu/bmi160/bmi160_core.c |
| index e0251b8c1a52..5fb571d03153 100644 |
| --- a/drivers/iio/imu/bmi160/bmi160_core.c |
| +++ b/drivers/iio/imu/bmi160/bmi160_core.c |
| @@ -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) { \ |
| @@ -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 { |
| @@ -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; |
| } |
| -- |
| 2.10.1 |
| |