Commit 3ecf198eab145d45624010e03db2e9dfd284cced
Committed by
Mark Brown
1 parent
60d509fa6a
Exists in
smarc-l5.0.0_1.0.0-ga
and in
5 other branches
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) |