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

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
Loading
Loading
Loading
Loading
+17 −1
Original line number Diff line number Diff line
@@ -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",