mfd: 88pm80x: Remove redundant devm_* calls
authorYi Zhang <yizhang@marvell.com>
Tue, 22 Jan 2013 02:43:45 +0000 (10:43 +0800)
committerSamuel Ortiz <sameo@linux.intel.com>
Wed, 13 Feb 2013 23:22:54 +0000 (00:22 +0100)
devm_* functions are device managed and make error handling
and code simpler; it also fix error exit paths

Signed-off-by: Yi Zhang <yizhang@marvell.com>
Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
drivers/mfd/88pm800.c
drivers/mfd/88pm805.c
drivers/mfd/88pm80x.c
include/linux/mfd/88pm80x.h

index 391e23e6a6470e26ea68d47bce622280f00bce70..582bda543520dcbde0f6baaae86d5f9b626787f0 100644 (file)
@@ -531,7 +531,7 @@ static int pm800_probe(struct i2c_client *client,
        ret = device_800_init(chip, pdata);
        if (ret) {
                dev_err(chip->dev, "%s id 0x%x failed!\n", __func__, chip->id);
-               goto err_800_init;
+               goto err_subchip_alloc;
        }
 
        ret = pm800_pages_init(chip);
@@ -546,10 +546,8 @@ static int pm800_probe(struct i2c_client *client,
 err_page_init:
        mfd_remove_devices(chip->dev);
        device_irq_exit_800(chip);
-err_800_init:
-       devm_kfree(&client->dev, subchip);
 err_subchip_alloc:
-       pm80x_deinit(client);
+       pm80x_deinit();
 out_init:
        return ret;
 }
@@ -562,9 +560,7 @@ static int pm800_remove(struct i2c_client *client)
        device_irq_exit_800(chip);
 
        pm800_pages_exit(chip);
-       devm_kfree(&client->dev, chip->subchip);
-
-       pm80x_deinit(client);
+       pm80x_deinit();
 
        return 0;
 }
index e671230be2b150fb104c9a30a5f19131020e8239..65d7ac099b2065d1945b936d634d2416a78f26cd 100644 (file)
@@ -257,7 +257,7 @@ static int pm805_probe(struct i2c_client *client,
                pdata->plat_config(chip, pdata);
 
 err_805_init:
-       pm80x_deinit(client);
+       pm80x_deinit();
 out_init:
        return ret;
 }
@@ -269,7 +269,7 @@ static int pm805_remove(struct i2c_client *client)
        mfd_remove_devices(chip->dev);
        device_irq_exit_805(chip);
 
-       pm80x_deinit(client);
+       pm80x_deinit();
 
        return 0;
 }
index 1adb355d86d1a5782c8c3d8bf1513a176c2e8519..f736a46eb8c0e41e3785e76dc0e89d17d1306068 100644 (file)
@@ -48,14 +48,12 @@ int pm80x_init(struct i2c_client *client,
                ret = PTR_ERR(map);
                dev_err(&client->dev, "Failed to allocate register map: %d\n",
                        ret);
-               goto err_regmap_init;
+               return ret;
        }
 
        chip->id = id->driver_data;
-       if (chip->id < CHIP_PM800 || chip->id > CHIP_PM805) {
-               ret = -EINVAL;
-               goto err_chip_id;
-       }
+       if (chip->id < CHIP_PM800 || chip->id > CHIP_PM805)
+               return -EINVAL;
 
        chip->client = client;
        chip->regmap = map;
@@ -82,19 +80,11 @@ int pm80x_init(struct i2c_client *client,
        }
 
        return 0;
-
-err_chip_id:
-       regmap_exit(map);
-err_regmap_init:
-       devm_kfree(&client->dev, chip);
-       return ret;
 }
 EXPORT_SYMBOL_GPL(pm80x_init);
 
-int pm80x_deinit(struct i2c_client *client)
+int pm80x_deinit(void)
 {
-       struct pm80x_chip *chip = i2c_get_clientdata(client);
-
        /*
         * workaround: clear the dependency between pm800 and pm805.
         * would remove it after HW chip fixes the issue.
@@ -103,10 +93,6 @@ int pm80x_deinit(struct i2c_client *client)
                g_pm80x_chip->companion = NULL;
        else
                g_pm80x_chip = NULL;
-
-       regmap_exit(chip->regmap);
-       devm_kfree(&client->dev, chip);
-
        return 0;
 }
 EXPORT_SYMBOL_GPL(pm80x_deinit);
index 478672ed0c3d5d45793935a913f2f9a59a9de6a3..e94537befabd018a4d8128bd7134594e59b120f1 100644 (file)
@@ -365,5 +365,5 @@ static inline int pm80x_dev_resume(struct device *dev)
 
 extern int pm80x_init(struct i2c_client *client,
                      const struct i2c_device_id *id);
-extern int pm80x_deinit(struct i2c_client *client);
+extern int pm80x_deinit(void);
 #endif /* __LINUX_MFD_88PM80X_H */