summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--drivers/regulator/core.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/drivers/regulator/core.c b/drivers/regulator/core.c
index 37db0c96eab8..cae41f1d96da 100644
--- a/drivers/regulator/core.c
+++ b/drivers/regulator/core.c
@@ -684,7 +684,7 @@ static int drms_uA_update(struct regulator_dev *rdev)
{
struct regulator *sibling;
int current_uA = 0, output_uV, input_uV, err;
- unsigned int mode;
+ unsigned int regulator_curr_mode, mode;
lockdep_assert_held_once(&rdev->mutex);
@@ -745,6 +745,14 @@ static int drms_uA_update(struct regulator_dev *rdev)
current_uA, input_uV, output_uV);
return err;
}
+ /* return if the same mode is requested */
+ if (rdev->desc->ops->get_mode) {
+ regulator_curr_mode = rdev->desc->ops->get_mode(rdev);
+ if (regulator_curr_mode == mode)
+ return 0;
+ } else {
+ return 0;
+ }
err = rdev->desc->ops->set_mode(rdev, mode);
if (err < 0)