diff options
-rw-r--r-- | drivers/regulator/core.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/drivers/regulator/core.c b/drivers/regulator/core.c index 98e5d14f94f3..2248087b9be2 100644 --- a/drivers/regulator/core.c +++ b/drivers/regulator/core.c | |||
@@ -1745,6 +1745,7 @@ int regulator_set_mode(struct regulator *regulator, unsigned int mode) | |||
1745 | { | 1745 | { |
1746 | struct regulator_dev *rdev = regulator->rdev; | 1746 | struct regulator_dev *rdev = regulator->rdev; |
1747 | int ret; | 1747 | int ret; |
1748 | int regulator_curr_mode; | ||
1748 | 1749 | ||
1749 | mutex_lock(&rdev->mutex); | 1750 | mutex_lock(&rdev->mutex); |
1750 | 1751 | ||
@@ -1754,6 +1755,15 @@ int regulator_set_mode(struct regulator *regulator, unsigned int mode) | |||
1754 | goto out; | 1755 | goto out; |
1755 | } | 1756 | } |
1756 | 1757 | ||
1758 | /* return if the same mode is requested */ | ||
1759 | if (rdev->desc->ops->get_mode) { | ||
1760 | regulator_curr_mode = rdev->desc->ops->get_mode(rdev); | ||
1761 | if (regulator_curr_mode == mode) { | ||
1762 | ret = 0; | ||
1763 | goto out; | ||
1764 | } | ||
1765 | } | ||
1766 | |||
1757 | /* constraints check */ | 1767 | /* constraints check */ |
1758 | ret = regulator_check_mode(rdev, mode); | 1768 | ret = regulator_check_mode(rdev, mode); |
1759 | if (ret < 0) | 1769 | if (ret < 0) |