mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2026-09-22 09:34:56 +02:00
iio: gyro: bmg160: wait full startup time after mode change at probe
commit088fcb9b56upstream. bmg160_chip_init() calls bmg160_set_mode(BMG160_MODE_NORMAL) and then waits only 500-1000 us. Per the BMG160 datasheet (BST-BMG160-DS000-07 Rev. 1.0, May 2013), the start-up and wake-up times (tsu, twusm) are 30 ms. The same file already waits BMG160_MAX_STARTUP_TIME_MS (80 ms) in bmg160_runtime_resume() after the same set_mode(NORMAL) operation. The 500 us value at probe was likely a unit mix-up; the old comment said "500 ms" while the code used microseconds. Reuse the same constant via msleep() and add a code comment explaining the datasheet basis for the wait. Without this, register writes that follow the mode change can hit the chip before it is ready. Fixes:22b46c45fb("iio:gyro:bmg160 Gyro Sensor driver") Signed-off-by: Stepan Ionichev <sozdayvek@gmail.com> Cc: <Stable@vger.kernel.org> Signed-off-by: Jonathan Cameron <jic23@kernel.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
8d202515ba
commit
5240dd5cf0
@@ -267,8 +267,14 @@ static int bmg160_chip_init(struct bmg160_data *data)
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
/* Wait upto 500 ms to be ready after changing mode */
|
||||
usleep_range(500, 1000);
|
||||
/*
|
||||
* Wait for the chip to be ready after switching to normal mode.
|
||||
* The BMG160 datasheet (BST-BMG160-DS000-07 Rev. 1.0, May 2013)
|
||||
* specifies a start-up / wake-up time (tsu, twusm) of 30 ms; use
|
||||
* BMG160_MAX_STARTUP_TIME_MS (80 ms) as a safety margin, matching
|
||||
* what bmg160_runtime_resume() already does.
|
||||
*/
|
||||
msleep(BMG160_MAX_STARTUP_TIME_MS);
|
||||
|
||||
/* Set Bandwidth */
|
||||
ret = bmg160_set_bw(data, BMG160_DEF_BW);
|
||||
|
||||
Reference in New Issue
Block a user