regulator: core: Pull non-DT supply mapping into regulator_dev_lookup()
authorMark Brown <broonie@opensource.wolfsonmicro.com>
Fri, 30 Mar 2012 11:24:37 +0000 (12:24 +0100)
committerMark Brown <broonie@opensource.wolfsonmicro.com>
Tue, 3 Apr 2012 13:00:49 +0000 (14:00 +0100)
Ensure we always apply the supply mapping when doing a lookup rather than
only doing it in non-DT cases, ensuring that regulators with supplies
specified in the regulator_desc can find their supplies on non-DT systems
and generally making the code more obvious.

Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
drivers/regulator/core.c

index 7b11979d79d1dbccede57b7b0437bed588104f59..f032823caa982ebe214709f40873e0bcad4d6dc2 100644 (file)
@@ -1174,6 +1174,8 @@ static struct regulator_dev *regulator_dev_lookup(struct device *dev,
 {
        struct regulator_dev *r;
        struct device_node *node;
+       struct regulator_map *map;
+       const char *devname = NULL;
 
        /* first do a dt based lookup */
        if (dev && dev->of_node) {
@@ -1195,10 +1197,24 @@ static struct regulator_dev *regulator_dev_lookup(struct device *dev,
        }
 
        /* if not found, try doing it non-dt way */
+       if (dev)
+               devname = dev_name(dev);
+
        list_for_each_entry(r, &regulator_list, list)
                if (strcmp(rdev_get_name(r), supply) == 0)
                        return r;
 
+       list_for_each_entry(map, &regulator_map_list, list) {
+               /* If the mapping has a device set up it must match */
+               if (map->dev_name &&
+                   (!devname || strcmp(map->dev_name, devname)))
+                       continue;
+
+               if (strcmp(map->supply, supply) == 0)
+                       return map->regulator;
+       }
+
+
        return NULL;
 }
 
@@ -1207,7 +1223,6 @@ static struct regulator *_regulator_get(struct device *dev, const char *id,
                                        int exclusive)
 {
        struct regulator_dev *rdev;
-       struct regulator_map *map;
        struct regulator *regulator = ERR_PTR(-EPROBE_DEFER);
        const char *devname = NULL;
        int ret;
@@ -1226,18 +1241,6 @@ static struct regulator *_regulator_get(struct device *dev, const char *id,
        if (rdev)
                goto found;
 
-       list_for_each_entry(map, &regulator_map_list, list) {
-               /* If the mapping has a device set up it must match */
-               if (map->dev_name &&
-                   (!devname || strcmp(map->dev_name, devname)))
-                       continue;
-
-               if (strcmp(map->supply, id) == 0) {
-                       rdev = map->regulator;
-                       goto found;
-               }
-       }
-
        if (board_wants_dummy_regulator) {
                rdev = dummy_regulator_rdev;
                goto found;