From: sashiko-bot@kernel.org
To: "Maurizio Casciano" <mauriziocasciano7@gmail.com>
Cc: dmitry.torokhov@gmail.com, linux-input@vger.kernel.org
Subject: Re: [PATCH v3] Input: drv260x: Fix suspend and resume sequencing
Date: Sat, 29 Aug 2026 23:07:39 +0000 [thread overview]
Message-ID: <20260829230740.126461F000E9@smtp.kernel.org> (raw)
In-Reply-To: <20260829225704.394707-1-mauriziocasciano7@gmail.com>
Thank you for your contribution! Sashiko AI review found 3 potential issue(s) to consider:
New issues:
- [High] The workqueue disable count becomes unbalanced if drv260x_resume() fails, permanently disabling haptic playback on subsequent successful resumes.
- [Medium] Mixing goto-based error handling with scope-based guard() cleanup in the same function.
Pre-existing issues:
- [High] The device loses its register configuration during system suspend because the regulator is disabled, but resume fails to reinitialize the registers.
--
commit 38e8103cb03d4a564c39fb41cb33305800090398
Author: Maurizio Casciano <mauriziocasciano7@gmail.com>
Input: drv260x: Fix suspend and resume sequencing
This commit updates the suspend and resume routines to correctly drain and
disable the haptics worker before entering standby. It also adds goto-based
error unwinding and uses the enable GPIO to gate I2C access while enforcing
a startup delay.
Link: https://lore.kernel.org/linux-input/apLD91vzHIrLOPWC@google.com/
> diff --git a/drivers/input/misc/drv260x.c b/drivers/input/misc/drv260x.c
> --- a/drivers/input/misc/drv260x.c
> +++ b/drivers/input/misc/drv260x.c
> @@ -569,18 +569,20 @@ static int drv260x_probe(struct i2c_client *client)
> static int drv260x_suspend(struct device *dev)
> {
> struct drv260x_data *haptics = dev_get_drvdata(dev);
> - int error;
> + int error, restore_error;
>
> guard(mutex)(&haptics->input_dev->mutex);
[ ... ]
> if (error) {
> dev_err(dev, "Failed to set standby mode\n");
> - return error;
> + goto err_enable_work;
> }
[Severity: Medium]
Does this mix goto-based error handling with scope-based guard() cleanup in
the same function?
The kernel cleanup subsystem guidelines explicitly forbid mixing goto and
guard() because it creates confusing ownership semantics. While the lock is
correctly released at the function return in this specific code structure,
the pattern itself is prohibited by subsystem rules.
[ ... ]
> error = regulator_disable(haptics->regulator);
[Severity: High]
This is a pre-existing issue, but I noticed the regulator is disabled during
suspend, which completely cuts power to the chip and resets its internal
register state.
When the regulator is re-enabled during drv260x_resume(), the driver only
clears the standby bit and fails to reprogram the operational registers like
rated voltage and overdrive. Because the driver uses REGCACHE_NONE and does
not automatically restore register state, does this leave the hardware
unconfigured and functionally broken after a suspend and resume cycle?
[ ... ]
> static int drv260x_resume(struct device *dev)
> {
> struct drv260x_data *haptics = dev_get_drvdata(dev);
> int error;
>
> guard(mutex)(&haptics->input_dev->mutex);
>
> if (input_device_enabled(haptics->input_dev)) {
> error = regulator_enable(haptics->regulator);
> if (error) {
> dev_err(dev, "Failed to enable regulator\n");
> return error;
> }
[Severity: High]
If regulator_enable() fails here, we return directly without calling
enable_work(&haptics->work).
Since disable_work_sync() was called in drv260x_suspend(), doesn't this leave
the workqueue's disable count unbalanced? The PM core treats resume errors as
non-fatal to the system, so a subsequent suspend will increment the disable
count again to 2. A future successful resume will only decrement it to 1,
leaving the haptics playback permanently disabled.
[ ... ]
> 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;
> + dev_err(dev, "Failed to leave standby mode: %d\n", error);
> + goto err_disable_regulator;
> }
[Severity: High]
Similarly, if we take the err_disable_regulator goto path when leaving
standby fails, enable_work() is skipped.
Does this also permanently leak the workqueue disable count?
[Severity: Medium]
Also, just like in drv260x_suspend(), drv260x_resume() introduces a new
goto path while using guard(mutex) at the start of the function.
Could we refactor this to avoid mixing goto labels and scope-based cleanup?
> - gpiod_set_value(haptics->enable_gpio, 1);
> + enable_work(&haptics->work);
> }
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260829225704.394707-1-mauriziocasciano7@gmail.com?part=1
next prev parent reply other threads:[~2026-08-29 23:07 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-08-27 23:16 [PATCH v2 0/2] Input: drv260x: restore configuration across power loss Maurizio Casciano
2026-08-27 23:16 ` [PATCH v2 1/2] Input: drv260x: Restore configuration after device close Maurizio Casciano
2026-08-27 23:30 ` sashiko-bot
2026-08-29 11:33 ` Dmitry Torokhov
2026-08-29 22:50 ` Maurizio Casciano
2026-08-27 23:16 ` [PATCH v2 2/2] Input: drv260x: Fix suspend and resume sequencing Maurizio Casciano
2026-08-29 12:14 ` Dmitry Torokhov
2026-08-29 22:57 ` [PATCH v3] " Maurizio Casciano
2026-08-29 23:07 ` sashiko-bot [this message]
2026-08-30 14:17 ` [PATCH v4] " Maurizio Casciano
2026-08-30 14:30 ` sashiko-bot
2026-08-31 1:00 ` [PATCH v5] " Maurizio Casciano
2026-08-31 1:15 ` sashiko-bot
2026-08-31 8:12 ` [PATCH v6] " Maurizio Casciano
2026-08-31 8:28 ` sashiko-bot
2026-08-31 15:03 ` [PATCH v7] " 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=20260829230740.126461F000E9@smtp.kernel.org \
--to=sashiko-bot@kernel.org \
--cc=dmitry.torokhov@gmail.com \
--cc=linux-input@vger.kernel.org \
--cc=mauriziocasciano7@gmail.com \
--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