From f652480802b636f86e194f9680347676b655d856 Mon Sep 17 00:00:00 2001 From: "Milo(Woogyom) Kim" Date: Tue, 5 Feb 2013 17:53:40 +0900 Subject: 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: Milo(Woogyom) Kim Signed-off-by: Bryan Wu --- drivers/leds/leds-lp5521.c | 69 ++++++++++++++++++++++++++----------------- drivers/leds/leds-lp5523.c | 73 ++++++++++++++++++++++++++++------------------ 2 files changed, 86 insertions(+), 56 deletions(-) diff --git a/drivers/leds/leds-lp5521.c b/drivers/leds/leds-lp5521.c index fd963fe0a944..f4cd0fe67fef 100644 --- a/drivers/leds/leds-lp5521.c +++ b/drivers/leds/leds-lp5521.c @@ -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"); - 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_leds(chip); + if (ret) + goto fail2; ret = lp5521_register_sysfs(client); if (ret) { diff --git a/drivers/leds/leds-lp5523.c b/drivers/leds/leds-lp5523.c index ddb482aebe14..f5e893289816 100644 --- a/drivers/leds/leds-lp5523.c +++ b/drivers/leds/leds-lp5523.c @@ -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"); - 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_leds(chip, id->name); + if (ret) + goto fail2; ret = lp5523_register_sysfs(client); if (ret) { -- cgit v1.2.3