regulator: simplify regulator_register() error handling
authorJani Nikula <ext-jani.1.nikula@nokia.com>
Thu, 29 Apr 2010 07:55:11 +0000 (10:55 +0300)
committerLiam Girdwood <lrg@slimlogic.co.uk>
Tue, 25 May 2010 09:16:01 +0000 (10:16 +0100)
Simply remove all consumer supplies for the regulator on errors. Remove
unset_consumer_device_supply() which is no longer used.

Signed-off-by: Jani Nikula <ext-jani.1.nikula@nokia.com>
Acked-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Signed-off-by: Liam Girdwood <lrg@slimlogic.co.uk>
drivers/regulator/core.c

index a50672f..98e5d14 100644 (file)
@@ -981,29 +981,6 @@ static int set_consumer_device_supply(struct regulator_dev *rdev,
        return 0;
 }
 
-static void unset_consumer_device_supply(struct regulator_dev *rdev,
-       const char *consumer_dev_name, struct device *consumer_dev)
-{
-       struct regulator_map *node, *n;
-
-       if (consumer_dev && !consumer_dev_name)
-               consumer_dev_name = dev_name(consumer_dev);
-
-       list_for_each_entry_safe(node, n, &regulator_map_list, list) {
-               if (rdev != node->regulator)
-                       continue;
-
-               if (consumer_dev_name && node->dev_name &&
-                   strcmp(consumer_dev_name, node->dev_name))
-                       continue;
-
-               list_del(&node->list);
-               kfree(node->dev_name);
-               kfree(node);
-               return;
-       }
-}
-
 static void unset_regulator_supplies(struct regulator_dev *rdev)
 {
        struct regulator_map *node, *n;
@@ -2375,13 +2352,8 @@ struct regulator_dev *regulator_register(struct regulator_desc *regulator_desc,
                        init_data->consumer_supplies[i].dev,
                        init_data->consumer_supplies[i].dev_name,
                        init_data->consumer_supplies[i].supply);
-               if (ret < 0) {
-                       for (--i; i >= 0; i--)
-                               unset_consumer_device_supply(rdev,
-                                   init_data->consumer_supplies[i].dev_name,
-                                   init_data->consumer_supplies[i].dev);
-                       goto scrub;
-               }
+               if (ret < 0)
+                       goto unset_supplies;
        }
 
        list_add(&rdev->list, &regulator_list);
@@ -2389,6 +2361,9 @@ out:
        mutex_unlock(&regulator_list_mutex);
        return rdev;
 
+unset_supplies:
+       unset_regulator_supplies(rdev);
+
 scrub:
        device_unregister(&rdev->dev);
        /* device core frees rdev */