Commit 5e3b7c6b1cb1a579a65fa77c7f785d94013025be
Committed by
Bryan Wu
1 parent
a1932edf8b
Exists in
smarc-l5.0.0_1.0.0-ga
and in
5 other branches
leds: lm3530: Ensure drvdata->enable has correct status if regulator_disable fails
Add lm3530_led_enable() and lm3530_led_disable() helper functions. This ensures setting drvdata->enable to correct status if regulator_disable fails. Signed-off-by: Axel Lin <axel.lin@ingics.com> Acked-by: Shreshtha Kumar SAHU <shreshthakumar.sahu@stericsson.com> Acked-by: Milo Kim <milo.kim@ti.com> Tested-by: Milo Kim <milo.kim@ti.com> Signed-off-by: Bryan Wu <cooloney@gmail.com>
Showing 1 changed file with 40 additions and 18 deletions Side-by-side Diff
drivers/leds/leds-lm3530.c
... | ... | @@ -187,6 +187,40 @@ |
187 | 187 | (pdata->als2_resistor_sel << LM3530_ALS2_IMP_SHIFT); |
188 | 188 | } |
189 | 189 | |
190 | +static int lm3530_led_enable(struct lm3530_data *drvdata) | |
191 | +{ | |
192 | + int ret; | |
193 | + | |
194 | + if (drvdata->enable) | |
195 | + return 0; | |
196 | + | |
197 | + ret = regulator_enable(drvdata->regulator); | |
198 | + if (ret) { | |
199 | + dev_err(drvdata->led_dev.dev, "Failed to enable vin:%d\n", ret); | |
200 | + return ret; | |
201 | + } | |
202 | + | |
203 | + drvdata->enable = true; | |
204 | + return 0; | |
205 | +} | |
206 | + | |
207 | +static void lm3530_led_disable(struct lm3530_data *drvdata) | |
208 | +{ | |
209 | + int ret; | |
210 | + | |
211 | + if (!drvdata->enable) | |
212 | + return; | |
213 | + | |
214 | + ret = regulator_disable(drvdata->regulator); | |
215 | + if (ret) { | |
216 | + dev_err(drvdata->led_dev.dev, "Failed to disable vin:%d\n", | |
217 | + ret); | |
218 | + return; | |
219 | + } | |
220 | + | |
221 | + drvdata->enable = false; | |
222 | +} | |
223 | + | |
190 | 224 | static int lm3530_init_registers(struct lm3530_data *drvdata) |
191 | 225 | { |
192 | 226 | int ret = 0; |
... | ... | @@ -245,15 +279,9 @@ |
245 | 279 | reg_val[12] = LM3530_DEF_ZT_3; /* LM3530_ALS_Z3T_REG */ |
246 | 280 | reg_val[13] = LM3530_DEF_ZT_4; /* LM3530_ALS_Z4T_REG */ |
247 | 281 | |
248 | - if (!drvdata->enable) { | |
249 | - ret = regulator_enable(drvdata->regulator); | |
250 | - if (ret) { | |
251 | - dev_err(&drvdata->client->dev, | |
252 | - "Enable regulator failed\n"); | |
253 | - return ret; | |
254 | - } | |
255 | - drvdata->enable = true; | |
256 | - } | |
282 | + ret = lm3530_led_enable(drvdata); | |
283 | + if (ret) | |
284 | + return ret; | |
257 | 285 | |
258 | 286 | for (i = 0; i < LM3530_REG_MAX; i++) { |
259 | 287 | /* do not update brightness register when pwm mode */ |
... | ... | @@ -305,13 +333,8 @@ |
305 | 333 | else |
306 | 334 | drvdata->brightness = brt_val; |
307 | 335 | |
308 | - if (brt_val == 0) { | |
309 | - err = regulator_disable(drvdata->regulator); | |
310 | - if (err) | |
311 | - dev_err(&drvdata->client->dev, | |
312 | - "Disable regulator failed\n"); | |
313 | - drvdata->enable = false; | |
314 | - } | |
336 | + if (brt_val == 0) | |
337 | + lm3530_led_disable(drvdata); | |
315 | 338 | break; |
316 | 339 | case LM3530_BL_MODE_ALS: |
317 | 340 | break; |
... | ... | @@ -458,8 +481,7 @@ |
458 | 481 | |
459 | 482 | device_remove_file(drvdata->led_dev.dev, &dev_attr_mode); |
460 | 483 | |
461 | - if (drvdata->enable) | |
462 | - regulator_disable(drvdata->regulator); | |
484 | + lm3530_led_disable(drvdata); | |
463 | 485 | led_classdev_unregister(&drvdata->led_dev); |
464 | 486 | return 0; |
465 | 487 | } |