|
@@ -4179,80 +4179,6 @@ void regulator_unregister(struct regulator_dev *rdev)
|
|
|
}
|
|
|
EXPORT_SYMBOL_GPL(regulator_unregister);
|
|
|
|
|
|
-static int _regulator_suspend_prepare(struct device *dev, void *data)
|
|
|
-{
|
|
|
- struct regulator_dev *rdev = dev_to_rdev(dev);
|
|
|
- const suspend_state_t *state = data;
|
|
|
- int ret;
|
|
|
-
|
|
|
- mutex_lock(&rdev->mutex);
|
|
|
- ret = suspend_prepare(rdev, *state);
|
|
|
- mutex_unlock(&rdev->mutex);
|
|
|
-
|
|
|
- return ret;
|
|
|
-}
|
|
|
-
|
|
|
-/**
|
|
|
- * regulator_suspend_prepare - prepare regulators for system wide suspend
|
|
|
- * @state: system suspend state
|
|
|
- *
|
|
|
- * Configure each regulator with it's suspend operating parameters for state.
|
|
|
- * This will usually be called by machine suspend code prior to supending.
|
|
|
- */
|
|
|
-int regulator_suspend_prepare(suspend_state_t state)
|
|
|
-{
|
|
|
- /* ON is handled by regulator active state */
|
|
|
- if (state == PM_SUSPEND_ON)
|
|
|
- return -EINVAL;
|
|
|
-
|
|
|
- return class_for_each_device(®ulator_class, NULL, &state,
|
|
|
- _regulator_suspend_prepare);
|
|
|
-}
|
|
|
-EXPORT_SYMBOL_GPL(regulator_suspend_prepare);
|
|
|
-
|
|
|
-static int _regulator_suspend_finish(struct device *dev, void *data)
|
|
|
-{
|
|
|
- struct regulator_dev *rdev = dev_to_rdev(dev);
|
|
|
- int ret;
|
|
|
-
|
|
|
- mutex_lock(&rdev->mutex);
|
|
|
- if (rdev->use_count > 0 || rdev->constraints->always_on) {
|
|
|
- if (!_regulator_is_enabled(rdev)) {
|
|
|
- ret = _regulator_do_enable(rdev);
|
|
|
- if (ret)
|
|
|
- dev_err(dev,
|
|
|
- "Failed to resume regulator %d\n",
|
|
|
- ret);
|
|
|
- }
|
|
|
- } else {
|
|
|
- if (!have_full_constraints())
|
|
|
- goto unlock;
|
|
|
- if (!_regulator_is_enabled(rdev))
|
|
|
- goto unlock;
|
|
|
-
|
|
|
- ret = _regulator_do_disable(rdev);
|
|
|
- if (ret)
|
|
|
- dev_err(dev, "Failed to suspend regulator %d\n", ret);
|
|
|
- }
|
|
|
-unlock:
|
|
|
- mutex_unlock(&rdev->mutex);
|
|
|
-
|
|
|
- /* Keep processing regulators in spite of any errors */
|
|
|
- return 0;
|
|
|
-}
|
|
|
-
|
|
|
-/**
|
|
|
- * regulator_suspend_finish - resume regulators from system wide suspend
|
|
|
- *
|
|
|
- * Turn on regulators that might be turned off by regulator_suspend_prepare
|
|
|
- * and that should be turned on according to the regulators properties.
|
|
|
- */
|
|
|
-int regulator_suspend_finish(void)
|
|
|
-{
|
|
|
- return class_for_each_device(®ulator_class, NULL, NULL,
|
|
|
- _regulator_suspend_finish);
|
|
|
-}
|
|
|
-EXPORT_SYMBOL_GPL(regulator_suspend_finish);
|
|
|
|
|
|
/**
|
|
|
* regulator_has_full_constraints - the system has fully specified constraints
|