Merge branch 'next' of git://git.infradead.org/users/vkoul/slave-dma
[pandora-kernel.git] / drivers / regulator / max1586.c
index 282d2ee..b9444ee 100644 (file)
@@ -161,7 +161,7 @@ static struct regulator_ops max1586_v6_ops = {
        .list_voltage = max1586_v6_list,
 };
 
-static struct regulator_desc max1586_reg[] = {
+static const struct regulator_desc max1586_reg[] = {
        {
                .name = "Output_V3",
                .id = MAX1586_V3,
@@ -185,21 +185,21 @@ static int __devinit max1586_pmic_probe(struct i2c_client *client,
 {
        struct regulator_dev **rdev;
        struct max1586_platform_data *pdata = client->dev.platform_data;
+       struct regulator_config config = { };
        struct max1586_data *max1586;
        int i, id, ret = -ENOMEM;
 
-       max1586 = kzalloc(sizeof(struct max1586_data) +
+       max1586 = devm_kzalloc(&client->dev, sizeof(struct max1586_data) +
                        sizeof(struct regulator_dev *) * (MAX1586_V6 + 1),
                        GFP_KERNEL);
        if (!max1586)
-               goto out;
+               return -ENOMEM;
 
        max1586->client = client;
 
-       if (!pdata->v3_gain) {
-               ret = -EINVAL;
-               goto out_unmap;
-       }
+       if (!pdata->v3_gain)
+               return -EINVAL;
+
        max1586->min_uV = MAX1586_V3_MIN_UV / 1000 * pdata->v3_gain / 1000;
        max1586->max_uV = MAX1586_V3_MAX_UV / 1000 * pdata->v3_gain / 1000;
 
@@ -212,9 +212,12 @@ static int __devinit max1586_pmic_probe(struct i2c_client *client,
                        dev_err(&client->dev, "invalid regulator id %d\n", id);
                        goto err;
                }
-               rdev[i] = regulator_register(&max1586_reg[id], &client->dev,
-                                            pdata->subdevs[i].platform_data,
-                                            max1586, NULL);
+
+               config.dev = &client->dev;
+               config.init_data = pdata->subdevs[i].platform_data;
+               config.driver_data = max1586;
+
+               rdev[i] = regulator_register(&max1586_reg[id], &config);
                if (IS_ERR(rdev[i])) {
                        ret = PTR_ERR(rdev[i]);
                        dev_err(&client->dev, "failed to register %s\n",
@@ -230,9 +233,6 @@ static int __devinit max1586_pmic_probe(struct i2c_client *client,
 err:
        while (--i >= 0)
                regulator_unregister(rdev[i]);
-out_unmap:
-       kfree(max1586);
-out:
        return ret;
 }
 
@@ -244,8 +244,6 @@ static int __devexit max1586_pmic_remove(struct i2c_client *client)
        for (i = 0; i <= MAX1586_V6; i++)
                if (max1586->rdev[i])
                        regulator_unregister(max1586->rdev[i]);
-       kfree(max1586);
-
        return 0;
 }