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

Commit 0f79475d authored by Markus Pargmann's avatar Markus Pargmann Committed by Greg Kroah-Hartman
Browse files

regulator: core: Replace direct ops->disable usage



commit 66fda75f47dc583f1c187556e9a2c082dd64f8c6 upstream.

There are many places where ops->disable is called directly. Instead we
should use _regulator_do_disable() which also handles gpio regulators.

To be able to use the wrapper function from _regulator_force_disable(),
I moved the _notifier_call_chain() call from _regulator_do_disable() to
_regulator_disable(). This way, _regulator_force_disable() can use
different flags for _notifier_call_chain() without calling it twice.

Signed-off-by: default avatarMarkus Pargmann <mpa@pengutronix.de>
Signed-off-by: default avatarMark Brown <broonie@linaro.org>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent d30a14a3
Loading
Loading
Loading
Loading
+13 −21
Original line number Diff line number Diff line
@@ -1712,8 +1712,6 @@ static int _regulator_do_disable(struct regulator_dev *rdev)

	trace_regulator_disable_complete(rdev_get_name(rdev));

	_notifier_call_chain(rdev, REGULATOR_EVENT_DISABLE,
			     NULL);
	return 0;
}

@@ -1737,6 +1735,8 @@ static int _regulator_disable(struct regulator_dev *rdev)
				rdev_err(rdev, "failed to disable\n");
				return ret;
			}
			_notifier_call_chain(rdev, REGULATOR_EVENT_DISABLE,
					NULL);
		}

		rdev->use_count = 0;
@@ -1789,20 +1789,16 @@ static int _regulator_force_disable(struct regulator_dev *rdev)
{
	int ret = 0;

	/* force disable */
	if (rdev->desc->ops->disable) {
		/* ah well, who wants to live forever... */
		ret = rdev->desc->ops->disable(rdev);
	ret = _regulator_do_disable(rdev);
	if (ret < 0) {
		rdev_err(rdev, "failed to force disable\n");
		return ret;
	}
		/* notify other consumers that power has been forced off */

	_notifier_call_chain(rdev, REGULATOR_EVENT_FORCE_DISABLE |
			REGULATOR_EVENT_DISABLE, NULL);
	}

	return ret;
	return 0;
}

/**
@@ -3788,8 +3784,6 @@ int regulator_suspend_finish(void)

	mutex_lock(&regulator_list_mutex);
	list_for_each_entry(rdev, &regulator_list, list) {
		struct regulator_ops *ops = rdev->desc->ops;

		mutex_lock(&rdev->mutex);
		if (rdev->use_count > 0  || rdev->constraints->always_on) {
			error = _regulator_do_enable(rdev);
@@ -3798,12 +3792,10 @@ int regulator_suspend_finish(void)
		} else {
			if (!has_full_constraints)
				goto unlock;
			if (!ops->disable)
				goto unlock;
			if (!_regulator_is_enabled(rdev))
				goto unlock;

			error = ops->disable(rdev);
			error = _regulator_do_disable(rdev);
			if (error)
				ret = error;
		}
@@ -3993,7 +3985,7 @@ static int __init regulator_init_complete(void)
		ops = rdev->desc->ops;
		c = rdev->constraints;

		if (!ops->disable || (c && c->always_on))
		if (c && c->always_on)
			continue;

		mutex_lock(&rdev->mutex);
@@ -4014,7 +4006,7 @@ static int __init regulator_init_complete(void)
			/* We log since this may kill the system if it
			 * goes wrong. */
			rdev_info(rdev, "disabling\n");
			ret = ops->disable(rdev);
			ret = _regulator_do_disable(rdev);
			if (ret != 0) {
				rdev_err(rdev, "couldn't disable: %d\n", ret);
			}