From: sashiko-bot@kernel.org
To: "Dmitry Torokhov" <dmitry.torokhov@gmail.com>
Cc: dmitry.torokhov@gmail.com, linux-input@vger.kernel.org
Subject: Re: [PATCH] Input: drv260x - switch to using fsleep()
Date: Sat, 29 Aug 2026 12:32:30 +0000 [thread overview]
Message-ID: <20260829123230.BE8231F000E9@smtp.kernel.org> (raw)
In-Reply-To: <apLOXaWFZ8ueIEAm@google.com>
Thank you for your contribution! Sashiko AI review found 3 potential issue(s) to consider:
Pre-existing issues:
- [High] I2C communication failure in drv260x_resume due to incorrect GPIO sequence.
- [High] Lack of synchronization between haptic workqueue and system suspend leads to I2C transfers to a powered-off device.
- [Medium] Incorrect timeout handling in drv260x_init loop may cause spurious calibration failures.
--
commit 00b4c6fa5b7a9a1b697cc946bec3e6c6ae2eff9c
Author: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Input: drv260x - switch to using fsleep()
Switch from udelay() to fsleep() in drv260x_worker() as it runs in a
sleepable workqueue context where busy-waiting is unnecessary.
> diff --git a/drivers/input/misc/drv260x.c b/drivers/input/misc/drv260x.c
> index 6c5c4c53753b1..477ec84ea09b8 100644
> --- a/drivers/input/misc/drv260x.c
> +++ b/drivers/input/misc/drv260x.c
> @@ -222,7 +222,7 @@ static void drv260x_worker(struct work_struct *work)
>
> gpiod_set_value(haptics->enable_gpio, 1);
> /* Data sheet says to wait 250us before trying to communicate */
> - udelay(250);
> + fsleep(250);
[Severity: High]
This is a pre-existing issue, but does switching to fsleep() widen the race
window between drv260x_worker() and system suspend?
If a haptic effect is playing during system suspend, drv260x_suspend() disables
the regulator without canceling haptics->work:
drivers/input/misc/drv260x.c:drv260x_suspend() {
...
gpiod_set_value(haptics->enable_gpio, 0);
error = regulator_disable(haptics->regulator);
...
}
Since fsleep() voluntarily yields the CPU, could this allow the suspend thread
to run and power down the device, resulting in regmap_write() attempting I2C
transfers to a powered-off chip when the worker resumes?
>
> error = regmap_write(haptics->regmap,
> DRV260X_MODE, DRV260X_RT_PLAYBACK);
[Severity: High]
This isn't a bug introduced by this patch, but can I2C communication fail in
drv260x_resume() due to the GPIO enable sequence?
In drv260x_resume(), regmap_update_bits() is called before setting the
enable_gpio pin high:
drivers/input/misc/drv260x.c:drv260x_resume() {
...
error = regmap_update_bits(haptics->regmap,
DRV260X_MODE,
DRV260X_STANDBY_MASK, 0);
if (error) {
dev_err(dev, "Failed to unset standby mode\n");
regulator_disable(haptics->regulator);
return error;
}
gpiod_set_value(haptics->enable_gpio, 1);
...
}
Since the hardware disables the I2C interface when the EN pin is low, won't
this transaction NACK and cause the resume sequence to abort?
[Severity: Medium]
This isn't a bug introduced by this patch, but could the timeout handling in
drv260x_init() cause spurious calibration failures?
In drv260x_init(), the loop checks for a timeout unconditionally after reading
the register:
drivers/input/misc/drv260x.c:drv260x_init() {
...
if (time_after(jiffies, timeout)) {
dev_err(&haptics->client->dev,
"Calibration timeout. The device cannot be used.\n");
return -ETIMEDOUT;
}
} while (cal_buf == DRV260X_GO_BIT);
...
}
If the timeout expires on the exact same iteration that the calibration
successfully completes (the GO bit is cleared), will this erroneously return
-ETIMEDOUT instead of successfully exiting the loop?
--
Sashiko AI review · https://sashiko.dev/#/patchset/apLOXaWFZ8ueIEAm@google.com?part=1
next prev parent reply other threads:[~2026-08-29 12:32 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-08-29 12:21 [PATCH] Input: drv260x - switch to using fsleep() Dmitry Torokhov
2026-08-29 12:32 ` sashiko-bot [this message]
2026-08-31 19:54 ` Maurizio Casciano
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260829123230.BE8231F000E9@smtp.kernel.org \
--to=sashiko-bot@kernel.org \
--cc=dmitry.torokhov@gmail.com \
--cc=linux-input@vger.kernel.org \
--cc=sashiko-reviews@lists.linux.dev \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox