Commit 6559ac32 authored by Dan Murphy's avatar Dan Murphy Committed by Jacek Anaszewski
Browse files

leds: lm3532: Fixes for the driver for stability



Fixed misspelled words, added error check during probe
on the init of the registers, and fixed ALS/I2C control
mode.

Fixes: bc1b8492 ("leds: lm3532: Introduce the lm3532 LED driver")
Reported-by: default avatarPavel Machek <pavel@ucw.cz>
Signed-off-by: default avatarDan Murphy <dmurphy@ti.com>
Acked-by: default avatarPavel Machek <pavel@ucw.cz>
Signed-off-by: default avatarJacek Anaszewski <jacek.anaszewski@gmail.com>
parent 4c905450
Loading
Loading
Loading
Loading
+13 −4
Original line number Diff line number Diff line
@@ -43,7 +43,7 @@
#define LM3532_REG_ZONE_TRGT_C	0x7a
#define LM3532_REG_MAX		0x7e

/* Contorl Enable */
/* Control Enable */
#define LM3532_CTRL_A_ENABLE	BIT(0)
#define LM3532_CTRL_B_ENABLE	BIT(1)
#define LM3532_CTRL_C_ENABLE	BIT(2)
@@ -307,7 +307,7 @@ static int lm3532_led_disable(struct lm3532_led *led_data)
	int ret;

	ret = regmap_update_bits(led_data->priv->regmap, LM3532_REG_ENABLE,
					 ctrl_en_val, ~ctrl_en_val);
					 ctrl_en_val, 0);
	if (ret) {
		dev_err(led_data->priv->dev, "Failed to set ctrl:%d\n", ret);
		return ret;
@@ -326,7 +326,7 @@ static int lm3532_brightness_set(struct led_classdev *led_cdev,

	mutex_lock(&led->priv->lock);

	if (led->mode == LM3532_BL_MODE_ALS) {
	if (led->mode == LM3532_ALS_CTRL) {
		if (brt_val > LED_OFF)
			ret = lm3532_led_enable(led);
		else
@@ -561,11 +561,14 @@ static int lm3532_parse_node(struct lm3532_data *priv)
		}

		if (led->mode == LM3532_BL_MODE_ALS) {
			led->mode = LM3532_ALS_CTRL;
			ret = lm3532_parse_als(priv);
			if (ret)
				dev_err(&priv->client->dev, "Failed to parse als\n");
			else
				lm3532_als_configure(priv, led);
		} else {
			led->mode = LM3532_I2C_CTRL;
		}

		led->num_leds = fwnode_property_count_u32(child, "led-sources");
@@ -606,7 +609,13 @@ static int lm3532_parse_node(struct lm3532_data *priv)
			goto child_out;
		}

		lm3532_init_registers(led);
		ret = lm3532_init_registers(led);
		if (ret) {
			dev_err(&priv->client->dev, "register init err: %d\n",
				ret);
			fwnode_handle_put(child);
			goto child_out;
		}

		i++;
	}