patch "iio: bmi160: Fix time needed to sleep after command execution" added to staging-linus
Subsystems (2)
This is a note to let you know that I've just added the patch titled
iio: bmi160: Fix time needed to sleep after command execution
to my staging git tree which can be found at
git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging.git
in the staging-linus branch.
The patch will show up in the next release of the linux-next tree (usually sometime within the next 24 hours during the week.)
The patch will hopefully also be merged in Linus's tree for the next -rc kernel release.
If you have any questions about this process, please let me know.
Quoted 1 line
From
01d1f7a99e457952aa51849ed7c1cc4ced7bca4bMon Sep 17 00:00:00 2001
From: Marcin Niestroj <[email protected]>
Date: Thu, 8 Dec 2016 15:22:58 +0100
Subject: iio: bmi160: Fix time needed to sleep after command execution
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.
--- drivers/iio/imu/bmi160/bmi160_core.c | 25 ++++++------------------- 1 file changed, 6 insertions(+), 19 deletions(-)
drivers/iio/imu/bmi160/bmi160_core.c +6 -19
@@ -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 ; }
Signature · 1 line
2.11.0