Commit 8ebdd122 authored by Markus Pargmann's avatar Markus Pargmann Committed by Jiri Slaby

regulator: core: Replace direct ops->disable usage

commit 66fda75f 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 avatarJiri Slaby <jslaby@suse.cz>
parent f615b037
...@@ -1806,8 +1806,6 @@ static int _regulator_do_disable(struct regulator_dev *rdev) ...@@ -1806,8 +1806,6 @@ static int _regulator_do_disable(struct regulator_dev *rdev)
trace_regulator_disable_complete(rdev_get_name(rdev)); trace_regulator_disable_complete(rdev_get_name(rdev));
_notifier_call_chain(rdev, REGULATOR_EVENT_DISABLE,
NULL);
return 0; return 0;
} }
...@@ -1831,6 +1829,8 @@ static int _regulator_disable(struct regulator_dev *rdev) ...@@ -1831,6 +1829,8 @@ static int _regulator_disable(struct regulator_dev *rdev)
rdev_err(rdev, "failed to disable\n"); rdev_err(rdev, "failed to disable\n");
return ret; return ret;
} }
_notifier_call_chain(rdev, REGULATOR_EVENT_DISABLE,
NULL);
} }
rdev->use_count = 0; rdev->use_count = 0;
...@@ -1883,20 +1883,16 @@ static int _regulator_force_disable(struct regulator_dev *rdev) ...@@ -1883,20 +1883,16 @@ static int _regulator_force_disable(struct regulator_dev *rdev)
{ {
int ret = 0; int ret = 0;
/* force disable */ ret = _regulator_do_disable(rdev);
if (rdev->desc->ops->disable) { if (ret < 0) {
/* ah well, who wants to live forever... */ rdev_err(rdev, "failed to force disable\n");
ret = rdev->desc->ops->disable(rdev); return ret;
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; _notifier_call_chain(rdev, REGULATOR_EVENT_FORCE_DISABLE |
REGULATOR_EVENT_DISABLE, NULL);
return 0;
} }
/** /**
...@@ -3569,8 +3565,6 @@ int regulator_suspend_finish(void) ...@@ -3569,8 +3565,6 @@ int regulator_suspend_finish(void)
mutex_lock(&regulator_list_mutex); mutex_lock(&regulator_list_mutex);
list_for_each_entry(rdev, &regulator_list, list) { list_for_each_entry(rdev, &regulator_list, list) {
struct regulator_ops *ops = rdev->desc->ops;
mutex_lock(&rdev->mutex); mutex_lock(&rdev->mutex);
if (rdev->use_count > 0 || rdev->constraints->always_on) { if (rdev->use_count > 0 || rdev->constraints->always_on) {
error = _regulator_do_enable(rdev); error = _regulator_do_enable(rdev);
...@@ -3579,12 +3573,10 @@ int regulator_suspend_finish(void) ...@@ -3579,12 +3573,10 @@ int regulator_suspend_finish(void)
} else { } else {
if (!has_full_constraints) if (!has_full_constraints)
goto unlock; goto unlock;
if (!ops->disable)
goto unlock;
if (!_regulator_is_enabled(rdev)) if (!_regulator_is_enabled(rdev))
goto unlock; goto unlock;
error = ops->disable(rdev); error = _regulator_do_disable(rdev);
if (error) if (error)
ret = error; ret = error;
} }
...@@ -3774,7 +3766,7 @@ static int __init regulator_init_complete(void) ...@@ -3774,7 +3766,7 @@ static int __init regulator_init_complete(void)
ops = rdev->desc->ops; ops = rdev->desc->ops;
c = rdev->constraints; c = rdev->constraints;
if (!ops->disable || (c && c->always_on)) if (c && c->always_on)
continue; continue;
mutex_lock(&rdev->mutex); mutex_lock(&rdev->mutex);
...@@ -3795,7 +3787,7 @@ static int __init regulator_init_complete(void) ...@@ -3795,7 +3787,7 @@ static int __init regulator_init_complete(void)
/* We log since this may kill the system if it /* We log since this may kill the system if it
* goes wrong. */ * goes wrong. */
rdev_info(rdev, "disabling\n"); rdev_info(rdev, "disabling\n");
ret = ops->disable(rdev); ret = _regulator_do_disable(rdev);
if (ret != 0) { if (ret != 0) {
rdev_err(rdev, "couldn't disable: %d\n", ret); rdev_err(rdev, "couldn't disable: %d\n", ret);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment