summaryrefslogtreecommitdiff
path: root/drivers/regulator
diff options
context:
space:
mode:
authorDavid Collins <collinsd@codeaurora.org>2010-10-26 16:22:06 -0700
committerRohit Vaswani <rvaswani@codeaurora.org>2016-03-01 12:22:35 -0800
commit16fbe2a1d3a35e5d76966528de0e15eef8ce959e (patch)
tree7964b014f0d233f8b7d7cdd664f1bcd638e5c699 /drivers/regulator
parent001d62d43ebbd9c006658765d936aab83c155786 (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.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)