In case mfd_add_devices() fails, da9063_irq_exit() is not called to undo the IRQchip setup done by da9063_irq_init(). Fix this by adding the missing fail path. Signed-off-by: Marek Vasut <marek.vasut+renesas@xxxxxxxxx> Cc: Geert Uytterhoeven <geert+renesas@xxxxxxxxx> Cc: Lee Jones <lee.jones@xxxxxxxxxx> Cc: Mark Brown <broonie@xxxxxxxxxx> Cc: Steve Twiss <stwiss.opensource@xxxxxxxxxxx> Cc: Wolfram Sang <wsa+renesas@xxxxxxxxxxxxxxxxxxxx> Cc: linux-renesas-soc@xxxxxxxxxxxxxxx --- V3: New patch V4: No change --- drivers/mfd/da9063-core.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/drivers/mfd/da9063-core.c b/drivers/mfd/da9063-core.c index 6c2870d4e754..8226ebd8b96d 100644 --- a/drivers/mfd/da9063-core.c +++ b/drivers/mfd/da9063-core.c @@ -229,10 +229,16 @@ int da9063_device_init(struct da9063 *da9063, unsigned int irq) ret = mfd_add_devices(da9063->dev, -1, da9063_devs, ARRAY_SIZE(da9063_devs), NULL, da9063->irq_base, NULL); - if (ret) + if (ret) { dev_err(da9063->dev, "Cannot add MFD cells\n"); + goto err_irq_exit; + } return ret; + +err_irq_exit: + da9063_irq_exit(da9063); + return ret; } void da9063_device_exit(struct da9063 *da9063) -- 2.16.2