Re: [PATCH v4 4/8] mfd: mc13xxx: Use devm_mfd_add_devices and devm_regmap_add_irq_chip
From: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Date: 2025-09-16 18:09:11
Also in:
linux-input, lkml
Hi Alexander, On Sun, Sep 14, 2025 at 07:37:19PM +0000, Alexander Kurz wrote:
quoted hunk ↗ jump to hunk
Use devm_mfd_add_devices() for adding MFD child devices and devm_regmap_add_irq_chip() for IRQ chip registration. This reduces the amount of required cleanup. Signed-off-by: Alexander Kurz <redacted> --- drivers/mfd/mc13xxx-core.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-)diff --git a/drivers/mfd/mc13xxx-core.c b/drivers/mfd/mc13xxx-core.c index 920797b806ce..091c9171b2b7 100644 --- a/drivers/mfd/mc13xxx-core.c +++ b/drivers/mfd/mc13xxx-core.c@@ -381,7 +381,7 @@ static int mc13xxx_add_subdevice_pdata(struct mc13xxx *mc13xxx, if (!cell.name) return -ENOMEM; - return mfd_add_devices(mc13xxx->dev, -1, &cell, 1, NULL, 0, + return devm_mfd_add_devices(mc13xxx->dev, -1, &cell, 1, NULL, 0, regmap_irq_get_domain(mc13xxx->irq_data)); }@@ -455,8 +455,9 @@ int mc13xxx_common_init(struct device *dev) mc13xxx->irq_chip.irqs = mc13xxx->irqs; mc13xxx->irq_chip.num_irqs = ARRAY_SIZE(mc13xxx->irqs); - ret = regmap_add_irq_chip(mc13xxx->regmap, mc13xxx->irq, IRQF_ONESHOT, - 0, &mc13xxx->irq_chip, &mc13xxx->irq_data); + ret = devm_regmap_add_irq_chip(dev, mc13xxx->regmap, mc13xxx->irq, + IRQF_ONESHOT, 0, &mc13xxx->irq_chip, + &mc13xxx->irq_data); if (ret) return ret;@@ -502,8 +503,6 @@ void mc13xxx_common_exit(struct device *dev) { struct mc13xxx *mc13xxx = dev_get_drvdata(dev); - mfd_remove_devices(dev); - regmap_del_irq_chip(mc13xxx->irq, mc13xxx->irq_data); mutex_destroy(&mc13xxx->lock);
This causes the mutex be destroyed while the sub-devices are still present. The power button will try to call mc13xxx_lock() and mc13xxx_unlock() and of mutex debugging is enabled you'll get errors. I'd remove mutex_destroy() as well (and transitively get rid of mc13xxx_common_exit()) and then look into getting rid of mc13xxx_lock() and mc13xxx_unlock() because, as I mentioned in another email, they are IMO not needed. But this version of the patch is broken as far as I can tell. Thanks. -- Dmitry