regulator: simplify regulator_register() error handling
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>
This commit is contained in:
committed by
Liam Girdwood
parent
47bd53f0e8
commit
d4033b54fc
@@ -981,29 +981,6 @@ static int set_consumer_device_supply(struct regulator_dev *rdev,
|
|||||||
return 0;
|
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, ®ulator_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)
|
static void unset_regulator_supplies(struct regulator_dev *rdev)
|
||||||
{
|
{
|
||||||
struct regulator_map *node, *n;
|
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,
|
||||||
init_data->consumer_supplies[i].dev_name,
|
init_data->consumer_supplies[i].dev_name,
|
||||||
init_data->consumer_supplies[i].supply);
|
init_data->consumer_supplies[i].supply);
|
||||||
if (ret < 0) {
|
if (ret < 0)
|
||||||
for (--i; i >= 0; i--)
|
goto unset_supplies;
|
||||||
unset_consumer_device_supply(rdev,
|
|
||||||
init_data->consumer_supplies[i].dev_name,
|
|
||||||
init_data->consumer_supplies[i].dev);
|
|
||||||
goto scrub;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
list_add(&rdev->list, ®ulator_list);
|
list_add(&rdev->list, ®ulator_list);
|
||||||
@@ -2389,6 +2361,9 @@ out:
|
|||||||
mutex_unlock(®ulator_list_mutex);
|
mutex_unlock(®ulator_list_mutex);
|
||||||
return rdev;
|
return rdev;
|
||||||
|
|
||||||
|
unset_supplies:
|
||||||
|
unset_regulator_supplies(rdev);
|
||||||
|
|
||||||
scrub:
|
scrub:
|
||||||
device_unregister(&rdev->dev);
|
device_unregister(&rdev->dev);
|
||||||
/* device core frees rdev */
|
/* device core frees rdev */
|
||||||
|
Reference in New Issue
Block a user