mirror of
https://github.com/torvalds/linux.git
synced 2024-11-10 14:11:52 +00:00
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>
This commit is contained in:
parent
4a8d2bee20
commit
260718b3a3
@ -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",
|
||||
|
Loading…
Reference in New Issue
Block a user