[PATCH] regulator: pca9450: Use devm_register_sys_off_handler

Peng Fan posted 1 patch 4 months ago
drivers/regulator/pca9450-regulator.c | 13 +++++--------
1 file changed, 5 insertions(+), 8 deletions(-)
[PATCH] regulator: pca9450: Use devm_register_sys_off_handler
Posted by Peng Fan 4 months ago
With module test, there is error dump:
------------[ cut here ]------------
  notifier callback pca9450_i2c_restart_handler already registered
  WARNING: kernel/notifier.c:23 at notifier_chain_register+0x5c/0x88,
  CPU#0: kworker/u16:3/50
  Call trace:
  notifier_chain_register+0x5c/0x88 (P)
  atomic_notifier_chain_register+0x30/0x58
  register_restart_handler+0x1c/0x28
  pca9450_i2c_probe+0x418/0x538
  i2c_device_probe+0x220/0x3d0
  really_probe+0x114/0x410
  __driver_probe_device+0xa0/0x150
  driver_probe_device+0x40/0x114
  __device_attach_driver+0xd4/0x12c

So use devm_register_sys_off_handler to let kernel handle the resource
free to avoid kernel dump.

Fixes: 6157e62b07d9 ("regulator: pca9450: Add restart handler")
Signed-off-by: Peng Fan <peng.fan@nxp.com>
---
 drivers/regulator/pca9450-regulator.c | 13 +++++--------
 1 file changed, 5 insertions(+), 8 deletions(-)

diff --git a/drivers/regulator/pca9450-regulator.c b/drivers/regulator/pca9450-regulator.c
index feadb21a8f30712b514aa45824e61dde72abb7f7..4be270f4d6c35a37bb26ccf16918ff897146e80f 100644
--- a/drivers/regulator/pca9450-regulator.c
+++ b/drivers/regulator/pca9450-regulator.c
@@ -40,7 +40,6 @@ struct pca9450 {
 	struct device *dev;
 	struct regmap *regmap;
 	struct gpio_desc *sd_vsel_gpio;
-	struct notifier_block restart_nb;
 	enum pca9450_chip_type type;
 	unsigned int rcnt;
 	int irq;
@@ -1100,10 +1099,9 @@ static irqreturn_t pca9450_irq_handler(int irq, void *data)
 	return IRQ_HANDLED;
 }
 
-static int pca9450_i2c_restart_handler(struct notifier_block *nb,
-				unsigned long action, void *data)
+static int pca9450_i2c_restart_handler(struct sys_off_data *data)
 {
-	struct pca9450 *pca9450 = container_of(nb, struct pca9450, restart_nb);
+	struct pca9450 *pca9450 = data->cb_data;
 	struct i2c_client *i2c = container_of(pca9450->dev, struct i2c_client, dev);
 
 	dev_dbg(&i2c->dev, "Restarting device..\n");
@@ -1261,10 +1259,9 @@ static int pca9450_i2c_probe(struct i2c_client *i2c)
 	pca9450->sd_vsel_fixed_low =
 		of_property_read_bool(ldo5->dev.of_node, "nxp,sd-vsel-fixed-low");
 
-	pca9450->restart_nb.notifier_call = pca9450_i2c_restart_handler;
-	pca9450->restart_nb.priority = PCA9450_RESTART_HANDLER_PRIORITY;
-
-	if (register_restart_handler(&pca9450->restart_nb))
+	if (devm_register_sys_off_handler(&i2c->dev, SYS_OFF_MODE_RESTART,
+					  PCA9450_RESTART_HANDLER_PRIORITY,
+					  pca9450_i2c_restart_handler, pca9450))
 		dev_warn(&i2c->dev, "Failed to register restart handler\n");
 
 	dev_info(&i2c->dev, "%s probed.\n",

---
base-commit: 1357b2649c026b51353c84ddd32bc963e8999603
change-id: 20250815-pca9450-e7a73eb95b56

Best regards,
-- 
Peng Fan <peng.fan@nxp.com>
Re: [PATCH] regulator: pca9450: Use devm_register_sys_off_handler
Posted by Mark Brown 4 months ago
On Fri, 15 Aug 2025 12:52:09 +0800, Peng Fan wrote:
> With module test, there is error dump:
> ------------[ cut here ]------------
>   notifier callback pca9450_i2c_restart_handler already registered
>   WARNING: kernel/notifier.c:23 at notifier_chain_register+0x5c/0x88,
>   CPU#0: kworker/u16:3/50
>   Call trace:
>   notifier_chain_register+0x5c/0x88 (P)
>   atomic_notifier_chain_register+0x30/0x58
>   register_restart_handler+0x1c/0x28
>   pca9450_i2c_probe+0x418/0x538
>   i2c_device_probe+0x220/0x3d0
>   really_probe+0x114/0x410
>   __driver_probe_device+0xa0/0x150
>   driver_probe_device+0x40/0x114
>   __device_attach_driver+0xd4/0x12c
> 
> [...]

Applied to

   https://git.kernel.org/pub/scm/linux/kernel/git/broonie/regulator.git for-next

Thanks!

[1/1] regulator: pca9450: Use devm_register_sys_off_handler
      commit: 447be50598c05499f7ccc2b1f6ddb3da30f8099a

All being well this means that it will be integrated into the linux-next
tree (usually sometime in the next 24 hours) and sent to Linus during
the next merge window (or sooner if it is a bug fix), however if
problems are discovered then the patch may be dropped or reverted.

You may get further e-mails resulting from automated or manual testing
and review of the tree, please engage with people reporting problems and
send followup patches addressing any issues that are reported if needed.

If any updates are required or you are submitting further changes they
should be sent as incremental updates against current git, existing
patches will not be replaced.

Please add any relevant lists and maintainers to the CCs when replying
to this mail.

Thanks,
Mark