Commit 3ecf198eab145d45624010e03db2e9dfd284cced

Authored by Axel Lin
Committed by Mark Brown
1 parent 60d509fa6a

regulator: max77686: Don't update max77686->opmode if update register fails

Ensure max77686->opmode always has correct status.

Signed-off-by: Axel Lin <axel.lin@ingics.com>
Signed-off-by: Mark Brown <broonie@sirena.org.uk>

Showing 1 changed file with 21 additions and 11 deletions Side-by-side Diff

drivers/regulator/max77686.c
... ... @@ -75,17 +75,20 @@
75 75 {
76 76 unsigned int val;
77 77 struct max77686_data *max77686 = rdev_get_drvdata(rdev);
78   - int id = rdev_get_id(rdev);
  78 + int ret, id = rdev_get_id(rdev);
79 79  
80 80 if (id == MAX77686_BUCK1)
81 81 val = 0x1;
82 82 else
83 83 val = 0x1 << MAX77686_OPMODE_BUCK234_SHIFT;
84 84  
  85 + ret = regmap_update_bits(rdev->regmap, rdev->desc->enable_reg,
  86 + rdev->desc->enable_mask, val);
  87 + if (ret)
  88 + return ret;
  89 +
85 90 max77686->opmode[id] = val;
86   - return regmap_update_bits(rdev->regmap, rdev->desc->enable_reg,
87   - rdev->desc->enable_mask,
88   - val);
  91 + return 0;
89 92 }
90 93  
91 94 /* Some LDOs supports [LPM/Normal]ON mode during suspend state */
... ... @@ -94,7 +97,7 @@
94 97 {
95 98 struct max77686_data *max77686 = rdev_get_drvdata(rdev);
96 99 unsigned int val;
97   - int id = rdev_get_id(rdev);
  100 + int ret, id = rdev_get_id(rdev);
98 101  
99 102 /* BUCK[5-9] doesn't support this feature */
100 103 if (id >= MAX77686_BUCK5)
101 104  
... ... @@ -113,10 +116,13 @@
113 116 return -EINVAL;
114 117 }
115 118  
  119 + ret = regmap_update_bits(rdev->regmap, rdev->desc->enable_reg,
  120 + rdev->desc->enable_mask, val);
  121 + if (ret)
  122 + return ret;
  123 +
116 124 max77686->opmode[id] = val;
117   - return regmap_update_bits(rdev->regmap, rdev->desc->enable_reg,
118   - rdev->desc->enable_mask,
119   - val);
  125 + return 0;
120 126 }
121 127  
122 128 /* Some LDOs supports LPM-ON/OFF/Normal-ON mode during suspend state */
... ... @@ -125,6 +131,7 @@
125 131 {
126 132 unsigned int val;
127 133 struct max77686_data *max77686 = rdev_get_drvdata(rdev);
  134 + int ret;
128 135  
129 136 switch (mode) {
130 137 case REGULATOR_MODE_STANDBY: /* switch off */
131 138  
... ... @@ -142,10 +149,13 @@
142 149 return -EINVAL;
143 150 }
144 151  
  152 + ret = regmap_update_bits(rdev->regmap, rdev->desc->enable_reg,
  153 + rdev->desc->enable_mask, val);
  154 + if (ret)
  155 + return ret;
  156 +
145 157 max77686->opmode[rdev_get_id(rdev)] = val;
146   - return regmap_update_bits(rdev->regmap, rdev->desc->enable_reg,
147   - rdev->desc->enable_mask,
148   - val);
  158 + return 0;
149 159 }
150 160  
151 161 static int max77686_enable(struct regulator_dev *rdev)