regulator: Fix support for deviceless supply mappings
authorMark Brown <broonie@opensource.wolfsonmicro.com>
Tue, 21 Jul 2009 15:00:26 +0000 (16:00 +0100)
committerLiam Girdwood <lrg@slimlogic.co.uk>
Tue, 22 Sep 2009 12:32:39 +0000 (13:32 +0100)
The patch to add support for looking up consumers by device name
had the side effect of causing us to require a device which is
at best premature since at least cpufreq still operates outside
the device model. Remove that requirement.

Reported-by: Haojian Zhuang <haojian.zhuang@gmail.com>
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Signed-off-by: Liam Girdwood <lrg@slimlogic.co.uk>
drivers/regulator/core.c

index 79a6910eb894fc4ebe805ba5b4cd1b0d26d89c10..e38db55600e0d81ec2e9efa8fa07cde7f5fd09f6 100644 (file)
@@ -872,6 +872,7 @@ static int set_consumer_device_supply(struct regulator_dev *rdev,
        const char *supply)
 {
        struct regulator_map *node;
+       int has_dev;
 
        if (consumer_dev && consumer_dev_name)
                return -EINVAL;
@@ -882,6 +883,11 @@ static int set_consumer_device_supply(struct regulator_dev *rdev,
        if (supply == NULL)
                return -EINVAL;
 
+       if (consumer_dev_name != NULL)
+               has_dev = 1;
+       else
+               has_dev = 0;
+
        list_for_each_entry(node, &regulator_map_list, list) {
                if (consumer_dev_name != node->dev_name)
                        continue;
@@ -896,17 +902,19 @@ static int set_consumer_device_supply(struct regulator_dev *rdev,
                return -EBUSY;
        }
 
-       node = kmalloc(sizeof(struct regulator_map), GFP_KERNEL);
+       node = kzalloc(sizeof(struct regulator_map), GFP_KERNEL);
        if (node == NULL)
                return -ENOMEM;
 
        node->regulator = rdev;
-       node->dev_name = kstrdup(consumer_dev_name, GFP_KERNEL);
        node->supply = supply;
 
-       if (node->dev_name == NULL) {
-               kfree(node);
-               return -ENOMEM;
+       if (has_dev) {
+               node->dev_name = kstrdup(consumer_dev_name, GFP_KERNEL);
+               if (node->dev_name == NULL) {
+                       kfree(node);
+                       return -ENOMEM;
+               }
        }
 
        list_add(&node->list, &regulator_map_list);
This page took 0.026513 seconds and 5 git commands to generate.