mfd: Fix max77693 irq leak and wrong kfree call
authorAxel Lin <axel.lin@gmail.com>
Fri, 8 Jun 2012 00:35:37 +0000 (08:35 +0800)
committerSamuel Ortiz <sameo@linux.intel.com>
Sun, 8 Jul 2012 22:16:11 +0000 (00:16 +0200)
We need to call max77693_irq_exit() in max77693_i2c_probe error patch and
max77693_i2c_remove.

Current code already uses devm_kzalloc() to allocate memory for max77693.
Thus we should not call kfree(max77693), otherwise we got double free.

Signed-off-by: Axel Lin <axel.lin@gmail.com>
Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
drivers/mfd/max77693.c

index 8eed0c47ade65221e83eefe6290438752963bd1d..a1811cb50ec75fc7c1dffd02aca98f132d7e4810 100644 (file)
@@ -154,7 +154,7 @@ static int max77693_i2c_probe(struct i2c_client *i2c,
 
        ret = max77693_irq_init(max77693);
        if (ret < 0)
-               goto err_mfd;
+               goto err_irq;
 
        pm_runtime_set_active(max77693->dev);
 
@@ -168,11 +168,11 @@ static int max77693_i2c_probe(struct i2c_client *i2c,
        return ret;
 
 err_mfd:
+       max77693_irq_exit(max77693);
+err_irq:
        i2c_unregister_device(max77693->muic);
        i2c_unregister_device(max77693->haptic);
 err_regmap:
-       kfree(max77693);
-
        return ret;
 }
 
@@ -181,6 +181,7 @@ static int max77693_i2c_remove(struct i2c_client *i2c)
        struct max77693_dev *max77693 = i2c_get_clientdata(i2c);
 
        mfd_remove_devices(max77693->dev);
+       max77693_irq_exit(max77693);
        i2c_unregister_device(max77693->muic);
        i2c_unregister_device(max77693->haptic);