Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f6524808 authored by Milo(Woogyom) Kim's avatar Milo(Woogyom) Kim Committed by Bryan Wu
Browse files

leds-lp55xx: clean up init leds in lp5521/5523



 To make LED initialization code simple, new function, _register_leds()
 is added at each driver.
 This patch is a preceding step for lp55xx common driver architecture.

Signed-off-by: default avatarMilo(Woogyom) Kim <milo.kim@ti.com>
Signed-off-by: default avatarBryan Wu <cooloney@gmail.com>
parent 1a991485
Loading
Loading
Loading
Loading
+42 −27
Original line number Diff line number Diff line
@@ -799,12 +799,50 @@ static int lp5521_init_led(struct lp5521_led *led,
	return 0;
}

static int lp5521_register_leds(struct lp5521_chip *chip)
{
	struct lp5521_platform_data *pdata = chip->pdata;
	struct i2c_client *client = chip->client;
	int i;
	int led;
	int ret;

	/* Initialize leds */
	chip->num_channels = pdata->num_channels;
	chip->num_leds = 0;
	led = 0;
	for (i = 0; i < pdata->num_channels; i++) {
		/* Do not initialize channels that are not connected */
		if (pdata->led_config[i].led_current == 0)
			continue;

		ret = lp5521_init_led(&chip->leds[led], client, i, pdata);
		if (ret) {
			dev_err(&client->dev, "error initializing leds\n");
			return ret;
		}
		chip->num_leds++;

		chip->leds[led].id = led;
		/* Set initial LED current */
		lp5521_set_led_current(chip, led,
				chip->leds[led].led_current);

		INIT_WORK(&(chip->leds[led].brightness_work),
			lp5521_led_brightness_work);

		led++;
	}

	return 0;
}

static int lp5521_probe(struct i2c_client *client,
			const struct i2c_device_id *id)
{
	struct lp5521_chip		*chip;
	struct lp5521_platform_data	*pdata;
	int ret, i, led;
	int ret, i;

	chip = devm_kzalloc(&client->dev, sizeof(*chip), GFP_KERNEL);
	if (!chip)
@@ -836,32 +874,9 @@ static int lp5521_probe(struct i2c_client *client,
		goto fail1;
	}

	/* Initialize leds */
	chip->num_channels = pdata->num_channels;
	chip->num_leds = 0;
	led = 0;
	for (i = 0; i < pdata->num_channels; i++) {
		/* Do not initialize channels that are not connected */
		if (pdata->led_config[i].led_current == 0)
			continue;

		ret = lp5521_init_led(&chip->leds[led], client, i, pdata);
		if (ret) {
			dev_err(&client->dev, "error initializing leds\n");
	ret = lp5521_register_leds(chip);
	if (ret)
		goto fail2;
		}
		chip->num_leds++;

		chip->leds[led].id = led;
		/* Set initial LED current */
		lp5521_set_led_current(chip, led,
				chip->leds[led].led_current);

		INIT_WORK(&(chip->leds[led].brightness_work),
			lp5521_led_brightness_work);

		led++;
	}

	ret = lp5521_register_sysfs(client);
	if (ret) {
+44 −29
Original line number Diff line number Diff line
@@ -896,6 +896,46 @@ static int lp5523_init_led(struct lp5523_led *led, struct device *dev,
	return 0;
}

static int lp5523_register_leds(struct lp5523_chip *chip, const char *name)
{
	struct lp5523_platform_data *pdata = chip->pdata;
	struct i2c_client *client = chip->client;
	int i;
	int led;
	int ret;

	/* Initialize leds */
	chip->num_channels = pdata->num_channels;
	chip->num_leds = 0;
	led = 0;
	for (i = 0; i < pdata->num_channels; i++) {
		/* Do not initialize channels that are not connected */
		if (pdata->led_config[i].led_current == 0)
			continue;

		INIT_WORK(&chip->leds[led].brightness_work,
			lp5523_led_brightness_work);

		ret = lp5523_init_led(&chip->leds[led], &client->dev, i, pdata,
				name);
		if (ret) {
			dev_err(&client->dev, "error initializing leds\n");
			return ret;
		}
		chip->num_leds++;

		chip->leds[led].id = led;
		/* Set LED current */
		lp5523_write(client,
			  LP5523_REG_LED_CURRENT_BASE + chip->leds[led].chan_nr,
			  chip->leds[led].led_current);

		led++;
	}

	return 0;
}

static int lp5523_init_device(struct lp5523_chip *chip)
{
	struct lp5523_platform_data *pdata = chip->pdata;
@@ -938,7 +978,7 @@ static int lp5523_probe(struct i2c_client *client,
{
	struct lp5523_chip		*chip;
	struct lp5523_platform_data	*pdata;
	int ret, i, led;
	int ret, i;

	chip = devm_kzalloc(&client->dev, sizeof(*chip), GFP_KERNEL);
	if (!chip)
@@ -978,34 +1018,9 @@ static int lp5523_probe(struct i2c_client *client,
		goto fail1;
	}

	/* Initialize leds */
	chip->num_channels = pdata->num_channels;
	chip->num_leds = 0;
	led = 0;
	for (i = 0; i < pdata->num_channels; i++) {
		/* Do not initialize channels that are not connected */
		if (pdata->led_config[i].led_current == 0)
			continue;

		INIT_WORK(&chip->leds[led].brightness_work,
			lp5523_led_brightness_work);

		ret = lp5523_init_led(&chip->leds[led], &client->dev, i, pdata,
				id->name);
		if (ret) {
			dev_err(&client->dev, "error initializing leds\n");
	ret = lp5523_register_leds(chip, id->name);
	if (ret)
		goto fail2;
		}
		chip->num_leds++;

		chip->leds[led].id = led;
		/* Set LED current */
		lp5523_write(client,
			  LP5523_REG_LED_CURRENT_BASE + chip->leds[led].chan_nr,
			  chip->leds[led].led_current);

		led++;
	}

	ret = lp5523_register_sysfs(client);
	if (ret) {