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

Commit 66fda75f authored by Markus Pargmann's avatar Markus Pargmann Committed by Mark Brown
Browse files

regulator: core: Replace direct ops->disable usage



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.

Cc: <stable@vger.kernel.org> # 3.10+
Signed-off-by: default avatarMarkus Pargmann <mpa@pengutronix.de>
Signed-off-by: default avatarMark Brown <broonie@linaro.org>
parent 30c21971
Loading
Loading
Loading
Loading
+13 −21
Original line number Diff line number Diff line
@@ -1901,8 +1901,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;
}

@@ -1926,6 +1924,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;
@@ -1978,20 +1978,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;
}

/**
@@ -3624,8 +3620,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);
@@ -3634,12 +3628,10 @@ int regulator_suspend_finish(void)
		} else {
			if (!have_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;
		}
@@ -3813,7 +3805,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);
@@ -3834,7 +3826,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);
		} else {