mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-11-24 11:30:53 +07: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 led_enable;
|
||||||
int model_id;
|
int model_id;
|
||||||
|
|
||||||
u8 boost_ctrl;
|
u8 boost_ctrl, brightness_ctrl;
|
||||||
|
bool enabled;
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct reg_default lm3692x_reg_defs[] = {
|
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 enable_state;
|
||||||
int ret, reg_ret;
|
int ret, reg_ret;
|
||||||
|
|
||||||
|
if (led->enabled)
|
||||||
|
return 0;
|
||||||
|
|
||||||
if (led->regulator) {
|
if (led->regulator) {
|
||||||
ret = regulator_enable(led->regulator);
|
ret = regulator_enable(led->regulator);
|
||||||
if (ret) {
|
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,
|
ret = regmap_update_bits(led->regmap, LM3692X_EN, LM3692X_ENABLE_MASK,
|
||||||
enable_state | LM3692X_DEVICE_EN);
|
enable_state | LM3692X_DEVICE_EN);
|
||||||
|
|
||||||
|
led->enabled = true;
|
||||||
return ret;
|
return ret;
|
||||||
out:
|
out:
|
||||||
dev_err(&led->client->dev, "Fail writing initialization values\n");
|
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;
|
int ret;
|
||||||
|
|
||||||
|
if (!led->enabled)
|
||||||
|
return 0;
|
||||||
|
|
||||||
ret = regmap_update_bits(led->regmap, LM3692X_EN, LM3692X_DEVICE_EN, 0);
|
ret = regmap_update_bits(led->regmap, LM3692X_EN, LM3692X_DEVICE_EN, 0);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
dev_err(&led->client->dev, "Failed to disable regulator: %d\n",
|
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);
|
"Failed to disable regulator: %d\n", ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
led->enabled = false;
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -323,6 +332,13 @@ static int lm3692x_brightness_set(struct led_classdev *led_cdev,
|
|||||||
|
|
||||||
mutex_lock(&led->lock);
|
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);
|
ret = lm3692x_fault_check(led);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
dev_err(&led->client->dev, "Cannot read/clear faults: %d\n",
|
dev_err(&led->client->dev, "Cannot read/clear faults: %d\n",
|
||||||
|
Loading…
Reference in New Issue
Block a user