Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

leds: lm3692x: Disable chip on brightness 0

Otherwise there's a noticeable glow even with brightness 0. Also
turning off the regulator can save additional power.

Signed-off-by: Guido Günther <agx@sigxcpu.org>
Signed-off-by: Pavel Machek <pavel@ucw.cz>

authored by

Guido Günther and committed by
Pavel
260718b3 4a8d2bee

+17 -1
+17 -1
drivers/leds/leds-lm3692x.c
··· 116 116 int led_enable; 117 117 int model_id; 118 118 119 - u8 boost_ctrl; 119 + u8 boost_ctrl, brightness_ctrl; 120 + bool enabled; 120 121 }; 121 122 122 123 static const struct reg_default lm3692x_reg_defs[] = { ··· 170 169 { 171 170 int enable_state; 172 171 int ret, reg_ret; 172 + 173 + if (led->enabled) 174 + return 0; 173 175 174 176 if (led->regulator) { 175 177 ret = regulator_enable(led->regulator); ··· 276 272 ret = regmap_update_bits(led->regmap, LM3692X_EN, LM3692X_ENABLE_MASK, 277 273 enable_state | LM3692X_DEVICE_EN); 278 274 275 + led->enabled = true; 279 276 return ret; 280 277 out: 281 278 dev_err(&led->client->dev, "Fail writing initialization values\n"); ··· 298 293 { 299 294 int ret; 300 295 296 + if (!led->enabled) 297 + return 0; 298 + 301 299 ret = regmap_update_bits(led->regmap, LM3692X_EN, LM3692X_DEVICE_EN, 0); 302 300 if (ret) { 303 301 dev_err(&led->client->dev, "Failed to disable regulator: %d\n", ··· 318 310 "Failed to disable regulator: %d\n", ret); 319 311 } 320 312 313 + led->enabled = false; 321 314 return ret; 322 315 } 323 316 ··· 331 322 int led_brightness_lsb = (brt_val >> 5); 332 323 333 324 mutex_lock(&led->lock); 325 + 326 + if (brt_val == 0) { 327 + ret = lm3692x_leds_disable(led); 328 + goto out; 329 + } else { 330 + lm3692x_leds_enable(led); 331 + } 334 332 335 333 ret = lm3692x_fault_check(led); 336 334 if (ret) {