diff options
Diffstat (limited to 'drivers/regulator')
-rw-r--r-- | drivers/regulator/core.c | 25 |
1 files changed, 22 insertions, 3 deletions
diff --git a/drivers/regulator/core.c b/drivers/regulator/core.c index 7d0c0d7d90ca..2dab0d9e11f5 100644 --- a/drivers/regulator/core.c +++ b/drivers/regulator/core.c | |||
@@ -581,10 +581,29 @@ static int suspend_set_state(struct regulator_dev *rdev, | |||
581 | struct regulator_state *rstate) | 581 | struct regulator_state *rstate) |
582 | { | 582 | { |
583 | int ret = 0; | 583 | int ret = 0; |
584 | bool can_set_state; | ||
584 | 585 | ||
585 | /* enable & disable are mandatory for suspend control */ | 586 | can_set_state = rdev->desc->ops->set_suspend_enable && |
586 | if (!rdev->desc->ops->set_suspend_enable || | 587 | rdev->desc->ops->set_suspend_disable; |
587 | !rdev->desc->ops->set_suspend_disable) { | 588 | |
589 | /* If we have no suspend mode configration don't set anything; | ||
590 | * only warn if the driver actually makes the suspend mode | ||
591 | * configurable. | ||
592 | */ | ||
593 | if (!rstate->enabled && !rstate->disabled) { | ||
594 | if (can_set_state) | ||
595 | printk(KERN_WARNING "%s: No configuration for %s\n", | ||
596 | __func__, rdev_get_name(rdev)); | ||
597 | return 0; | ||
598 | } | ||
599 | |||
600 | if (rstate->enabled && rstate->disabled) { | ||
601 | printk(KERN_ERR "%s: invalid configuration for %s\n", | ||
602 | __func__, rdev_get_name(rdev)); | ||
603 | return -EINVAL; | ||
604 | } | ||
605 | |||
606 | if (!can_set_state) { | ||
588 | printk(KERN_ERR "%s: no way to set suspend state\n", | 607 | printk(KERN_ERR "%s: no way to set suspend state\n", |
589 | __func__); | 608 | __func__); |
590 | return -EINVAL; | 609 | return -EINVAL; |