Commit 260718b3 authored by Guido Günther's avatar Guido Günther Committed by Pavel

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: default avatarGuido Günther <agx@sigxcpu.org>
Signed-off-by: default avatarPavel Machek <pavel@ucw.cz>
parent 4a8d2bee
......@@ -116,7 +116,8 @@ struct lm3692x_led {
int led_enable;
int model_id;
u8 boost_ctrl;
u8 boost_ctrl, brightness_ctrl;
bool enabled;
};
static const struct reg_default lm3692x_reg_defs[] = {
......@@ -170,6 +171,9 @@ static int lm3692x_leds_enable(struct lm3692x_led *led)
int enable_state;
int ret, reg_ret;
if (led->enabled)
return 0;
if (led->regulator) {
ret = regulator_enable(led->regulator);
if (ret) {
......@@ -272,6 +276,7 @@ static int lm3692x_leds_enable(struct lm3692x_led *led)
ret = regmap_update_bits(led->regmap, LM3692X_EN, LM3692X_ENABLE_MASK,
enable_state | LM3692X_DEVICE_EN);
led->enabled = true;
return ret;
out:
dev_err(&led->client->dev, "Fail writing initialization values\n");
......@@ -293,6 +298,9 @@ static int lm3692x_leds_disable(struct lm3692x_led *led)
{
int ret;
if (!led->enabled)
return 0;
ret = regmap_update_bits(led->regmap, LM3692X_EN, LM3692X_DEVICE_EN, 0);
if (ret) {
dev_err(&led->client->dev, "Failed to disable regulator: %d\n",
......@@ -310,6 +318,7 @@ static int lm3692x_leds_disable(struct lm3692x_led *led)
"Failed to disable regulator: %d\n", ret);
}
led->enabled = false;
return ret;
}
......@@ -323,6 +332,13 @@ static int lm3692x_brightness_set(struct led_classdev *led_cdev,
mutex_lock(&led->lock);
if (brt_val == 0) {
ret = lm3692x_leds_disable(led);
goto out;
} else {
lm3692x_leds_enable(led);
}
ret = lm3692x_fault_check(led);
if (ret) {
dev_err(&led->client->dev, "Cannot read/clear faults: %d\n",
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment