The problem is that mfd_add_devices() calls mfd_remove_devices() on
failure and then the probe function will also call mfd_remove_devices().
I don't know exactly what problems this will cause but I'm pretty sure
that it will trigger the BUG_ON() at the start of ida_free().

One thing that this patch changes is that it adds a check for if
max8998_irq_init() fails.

Fixes: 156f252857df ("drivers: regulator: add Maxim 8998 driver")
Signed-off-by: Dan Carpenter <[email protected]>
---
Checking max8998_irq_init() is slightly risky because sometimes these
functions have been failing and we didn't know.

 drivers/mfd/max8998.c | 12 +++++++-----
 1 file changed, 7 insertions(+), 5 deletions(-)

diff --git a/drivers/mfd/max8998.c b/drivers/mfd/max8998.c
index 785f8e9841b7..9713c3ea4a63 100644
--- a/drivers/mfd/max8998.c
+++ b/drivers/mfd/max8998.c
@@ -202,7 +202,9 @@ static int max8998_i2c_probe(struct i2c_client *i2c,
        }
        i2c_set_clientdata(max8998->rtc, max8998);
 
-       max8998_irq_init(max8998);
+       ret = max8998_irq_init(max8998);
+       if (ret)
+               goto unregister_dummy;
 
        pm_runtime_set_active(max8998->dev);
 
@@ -222,15 +224,15 @@ static int max8998_i2c_probe(struct i2c_client *i2c,
        }
 
        if (ret < 0)
-               goto err;
+               goto release_irq;
 
        device_init_wakeup(max8998->dev, max8998->wakeup);
 
-       return ret;
+       return 0;
 
-err:
-       mfd_remove_devices(max8998->dev);
+release_irq:
        max8998_irq_exit(max8998);
+unregister_dummy:
        i2c_unregister_device(max8998->rtc);
        return ret;
 }
-- 
2.28.0

Reply via email to