* [PATCH] iio: gyro: bmg160: wait full startup time after mode change at probe
@ 2026-05-11 6:27 Stepan Ionichev
2026-05-11 6:40 ` [PATCH v2] " Stepan Ionichev
2026-05-11 13:49 ` [PATCH] " Andy Shevchenko
0 siblings, 2 replies; 4+ messages in thread
From: Stepan Ionichev @ 2026-05-11 6:27 UTC (permalink / raw)
To: jic23
Cc: dlechner, nuno.sa, andy, gregkh, hcazarim, linux-iio,
linux-kernel, sozdayvek
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_interruptible() to match the
runtime resume path. 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>
---
drivers/iio/gyro/bmg160_core.c | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/drivers/iio/gyro/bmg160_core.c b/drivers/iio/gyro/bmg160_core.c
index 38394b5f3..44e90af5c 100644
--- a/drivers/iio/gyro/bmg160_core.c
+++ b/drivers/iio/gyro/bmg160_core.c
@@ -258,8 +258,7 @@ 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);
+ msleep_interruptible(BMG160_MAX_STARTUP_TIME_MS);
/* Set Bandwidth */
ret = bmg160_set_bw(data, BMG160_DEF_BW);
--
2.43.0
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [PATCH v2] iio: gyro: bmg160: wait full startup time after mode change at probe
2026-05-11 6:27 [PATCH] iio: gyro: bmg160: wait full startup time after mode change at probe Stepan Ionichev
@ 2026-05-11 6:40 ` Stepan Ionichev
2026-05-11 14:47 ` Jonathan Cameron
2026-05-11 13:49 ` [PATCH] " Andy Shevchenko
1 sibling, 1 reply; 4+ messages in thread
From: Stepan Ionichev @ 2026-05-11 6:40 UTC (permalink / raw)
To: jic23
Cc: dlechner, nuno.sa, andy, gregkh, hcazarim, linux-iio,
linux-kernel, sozdayvek
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>
---
v2:
- Use msleep() instead of msleep_interruptible() so the wait is not
cut short by signals during probe (per Andy)
- Add a code comment with the datasheet basis for the 80 ms wait
(per Andy)
drivers/iio/gyro/bmg160_core.c | 10 ++++++++--
1 file changed, 8 insertions(+), 2 deletions(-)
diff --git a/drivers/iio/gyro/bmg160_core.c b/drivers/iio/gyro/bmg160_core.c
index 38394b5f3..6d9019451 100644
--- a/drivers/iio/gyro/bmg160_core.c
+++ b/drivers/iio/gyro/bmg160_core.c
@@ -258,8 +258,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);
--
2.43.0
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH] iio: gyro: bmg160: wait full startup time after mode change at probe
2026-05-11 6:27 [PATCH] iio: gyro: bmg160: wait full startup time after mode change at probe Stepan Ionichev
2026-05-11 6:40 ` [PATCH v2] " Stepan Ionichev
@ 2026-05-11 13:49 ` Andy Shevchenko
1 sibling, 0 replies; 4+ messages in thread
From: Andy Shevchenko @ 2026-05-11 13:49 UTC (permalink / raw)
To: Stepan Ionichev
Cc: jic23, dlechner, nuno.sa, andy, gregkh, hcazarim, linux-iio,
linux-kernel
On Mon, May 11, 2026 at 11:27:55AM +0500, Stepan Ionichev wrote:
> 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_interruptible() to match the
> runtime resume path. Without this, register writes that follow
> the mode change can hit the chip before it is ready.
...
> - /* Wait upto 500 ms to be ready after changing mode */
First of all, the same comment, put better description on "why?"
based on the datasheet explanation.
> - usleep_range(500, 1000);
> + msleep_interruptible(BMG160_MAX_STARTUP_TIME_MS);
Hmm... This returns an error in case it's aborted by a signal or other means.
What are you supposed to do with that?
--
With Best Regards,
Andy Shevchenko
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH v2] iio: gyro: bmg160: wait full startup time after mode change at probe
2026-05-11 6:40 ` [PATCH v2] " Stepan Ionichev
@ 2026-05-11 14:47 ` Jonathan Cameron
0 siblings, 0 replies; 4+ messages in thread
From: Jonathan Cameron @ 2026-05-11 14:47 UTC (permalink / raw)
To: Stepan Ionichev
Cc: dlechner, nuno.sa, andy, gregkh, hcazarim, linux-iio,
linux-kernel
On Mon, 11 May 2026 11:40:20 +0500
Stepan Ionichev <sozdayvek@gmail.com> wrote:
> 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>
Some process stuff.
Never send a new version in reply to the older one. Always
a fresh thread - the reason is mainly that the threads become unreadable
if you got to more than one or two versions.
Also, don't send a new version for a reasonable period of time.
Something small like this maybe a few days, a bigger patch 1 week.
That lets multiple reviewers have time to take a look.
If you have a lot on list already then slow down in general and
spend some time helping to review patches coming from others.
The biggest bottleneck in IIO is reviewer time.
Anyhow, I'm going ignore this for a little while at least...
Jonathan
> ---
> v2:
> - Use msleep() instead of msleep_interruptible() so the wait is not
> cut short by signals during probe (per Andy)
> - Add a code comment with the datasheet basis for the 80 ms wait
> (per Andy)
>
> drivers/iio/gyro/bmg160_core.c | 10 ++++++++--
> 1 file changed, 8 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/iio/gyro/bmg160_core.c b/drivers/iio/gyro/bmg160_core.c
> index 38394b5f3..6d9019451 100644
> --- a/drivers/iio/gyro/bmg160_core.c
> +++ b/drivers/iio/gyro/bmg160_core.c
> @@ -258,8 +258,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);
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2026-05-11 14:47 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-05-11 6:27 [PATCH] iio: gyro: bmg160: wait full startup time after mode change at probe Stepan Ionichev
2026-05-11 6:40 ` [PATCH v2] " Stepan Ionichev
2026-05-11 14:47 ` Jonathan Cameron
2026-05-11 13:49 ` [PATCH] " Andy Shevchenko
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox