Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d4033b54 authored by Jani Nikula's avatar Jani Nikula Committed by Liam Girdwood
Browse files

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: default avatarJani Nikula <ext-jani.1.nikula@nokia.com>
Acked-by: default avatarMark Brown <broonie@opensource.wolfsonmicro.com>
Signed-off-by: default avatarLiam Girdwood <lrg@slimlogic.co.uk>
parent 47bd53f0
Loading
Loading
Loading
Loading
+5 −30
Original line number Diff line number Diff line
@@ -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 @@ struct regulator_dev *regulator_register(struct regulator_desc *regulator_desc,
	mutex_unlock(&regulator_list_mutex);
	return rdev;

unset_supplies:
	unset_regulator_supplies(rdev);

scrub:
	device_unregister(&rdev->dev);
	/* device core frees rdev */