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: Markus Pargmann <mpa@pengutronix.de> Signed-off-by: Mark Brown <broonie@linaro.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
d30a14a3f0
commit
0f79475d04
|
@ -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);
|
||||
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);
|
||||
ret = _regulator_do_disable(rdev);
|
||||
if (ret < 0) {
|
||||
rdev_err(rdev, "failed to force disable\n");
|
||||
return ret;
|
||||
}
|
||||
|
||||
return ret;
|
||||
_notifier_call_chain(rdev, REGULATOR_EVENT_FORCE_DISABLE |
|
||||
REGULATOR_EVENT_DISABLE, NULL);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -3788,8 +3784,6 @@ int regulator_suspend_finish(void)
|
|||
|
||||
mutex_lock(®ulator_list_mutex);
|
||||
list_for_each_entry(rdev, ®ulator_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);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue