]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
iio: gyro: bmg160: wait full startup time after mode change at probe
authorStepan Ionichev <sozdayvek@gmail.com>
Mon, 11 May 2026 06:40:20 +0000 (11:40 +0500)
committerJonathan Cameron <jic23@kernel.org>
Sat, 16 May 2026 10:48:38 +0000 (11:48 +0100)
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: 22b46c45fb9b ("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>
drivers/iio/gyro/bmg160_core.c

index 58963f3ea186f00db3cc888a33cc6aef62ab4429..d611341a0e2ad8e589564b4e63bdf526713738b6 100644 (file)
@@ -264,8 +264,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);