Skip to content

Commit

Permalink
Merge tag 'regulator-v3.14-rc5' of git://git.kernel.org/pub/scm/linux…
Browse files Browse the repository at this point in the history
…/kernel/git/broonie/regulator

Pull regulator fixes from Mark Brown:
 "A couple of fixes here which ensure that regulators using the core
  support for GPIO enables work in all cases by ensuring that helpers
  are used consistently rather than open coding in places and hence not
  having GPIO support in some of them"

* tag 'regulator-v3.14-rc5' of git://git.kernel.org/pub/scm/linux/kernel/git/broonie/regulator:
  regulator: core: Replace direct ops->disable usage
  regulator: core: Replace direct ops->enable usage
  • Loading branch information
Linus Torvalds committed Mar 4, 2014
2 parents 3f803ab + 66fda75 commit 16e3f53
Showing 1 changed file with 20 additions and 28 deletions.
48 changes: 20 additions & 28 deletions drivers/regulator/core.c
Original file line number Diff line number Diff line change
Expand Up @@ -953,6 +953,8 @@ static int machine_constraints_current(struct regulator_dev *rdev,
return 0;
}

static int _regulator_do_enable(struct regulator_dev *rdev);

/**
* set_machine_constraints - sets regulator constraints
* @rdev: regulator source
Expand Down Expand Up @@ -1013,10 +1015,9 @@ static int set_machine_constraints(struct regulator_dev *rdev,
/* If the constraints say the regulator should be on at this point
* and we have control then make sure it is enabled.
*/
if ((rdev->constraints->always_on || rdev->constraints->boot_on) &&
ops->enable) {
ret = ops->enable(rdev);
if (ret < 0) {
if (rdev->constraints->always_on || rdev->constraints->boot_on) {
ret = _regulator_do_enable(rdev);
if (ret < 0 && ret != -EINVAL) {
rdev_err(rdev, "failed to enable\n");
goto out;
}
Expand Down Expand Up @@ -1907,8 +1908,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;
}

Expand All @@ -1932,6 +1931,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;
Expand Down Expand Up @@ -1984,20 +1985,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;
}

/**
Expand Down Expand Up @@ -3630,23 +3627,18 @@ 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) &&
ops->enable) {
error = ops->enable(rdev);
if (rdev->use_count > 0 || rdev->constraints->always_on) {
error = _regulator_do_enable(rdev);
if (error)
ret = error;
} 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;
}
Expand Down Expand Up @@ -3820,7 +3812,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);
Expand All @@ -3841,7 +3833,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 {
Expand Down

0 comments on commit 16e3f53

Please sign in to comment.