Re: [PATCH v2] iio: gyro: bmg160: wait full startup time after mode change at probe

From: Jonathan Cameron

Date: Sat May 16 2026 - 06:49:44 EST


On Mon, 11 May 2026 15:47:04 +0100
Jonathan Cameron <jic23@xxxxxxxxxx> wrote:

> On Mon, 11 May 2026 11:40:20 +0500
> Stepan Ionichev <sozdayvek@xxxxxxxxx> 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@xxxxxxxxx>
> 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...

Applied to the fixes-togreg branch of iio.git and marked for stable.

As fixes go it's pretty safe given it just extends a sleep, so
I'll grab it now rather than waiting longer.

Jonathan

>
> 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);
>
>