diff options
author | David Collins <collinsd@codeaurora.org> | 2010-10-26 16:22:06 -0700 |
---|---|---|
committer | Rohit Vaswani <rvaswani@codeaurora.org> | 2016-03-01 12:22:35 -0800 |
commit | 16fbe2a1d3a35e5d76966528de0e15eef8ce959e (patch) | |
tree | 7964b014f0d233f8b7d7cdd664f1bcd638e5c699 /drivers/regulator | |
parent | 001d62d43ebbd9c006658765d936aab83c155786 (diff) |
regulator: Remove redundant set_mode call in drms_uA_update
The regulator framework checks if the current mode is the same as the
one being requested inside of regulator_set_mode. However, when
DRMS changing is allowed, regulator_enable calls drms_uA_update.
This function does not check the value of get_mode before calling
set_mode.
Modify drms_uA_update so that set_mode is only called if the requested
mode is different from the current mode returned by get_mode.
Change-Id: Ifb4f3069cf946e8474565ee82508c1ff45b36543
Signed-off-by: David Collins <collinsd@codeaurora.org>
[adharmap: resolved merge conflicts]
Signed-off-by: Abhijeet Dharmapurikar <adharmap@codeaurora.org>
Diffstat (limited to 'drivers/regulator')
-rw-r--r-- | drivers/regulator/core.c | 10 |
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) |