Skip to content

Commit

Permalink
leds-lp55xx: use common lp55xx data structure in _probe()
Browse files Browse the repository at this point in the history
 LP5521 and LP5523 data structures have common features.
 Use common lp55xx data structures rather than chip specific data.
 Legacy code in probe is replaced with this new data structures.

 lp55xx_chip          : Common data between lp5521_chip and lp5523_chip
 lp55xx_led           : Common LED structure between lp5521_led and lp5523_led
 lp55xx_platform_data : Common platform data between lp5521_platform_data and
                        lp5523_platform_data

Signed-off-by: Milo(Woogyom) Kim <milo.kim@ti.com>
Signed-off-by: Bryan Wu <cooloney@gmail.com>
  • Loading branch information
Milo(Woogyom) Kim authored and Bryan Wu committed Feb 6, 2013
1 parent 945c700 commit 6a0c9a4
Show file tree
Hide file tree
Showing 2 changed files with 44 additions and 28 deletions.
36 changes: 22 additions & 14 deletions drivers/leds/leds-lp5521.c
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,9 @@
#include <linux/leds-lp5521.h>
#include <linux/workqueue.h>
#include <linux/slab.h>
#include <linux/platform_data/leds-lp55xx.h>

#include "leds-lp55xx-common.h"

#define LP5521_PROGRAM_LENGTH 32 /* in bytes */

Expand Down Expand Up @@ -872,27 +875,32 @@ static void lp5521_unregister_leds(struct lp5521_chip *chip)
static int lp5521_probe(struct i2c_client *client,
const struct i2c_device_id *id)
{
struct lp5521_chip *old_chip;
struct lp5521_platform_data *old_pdata;
struct lp5521_chip *old_chip = NULL;
int ret;
struct lp55xx_chip *chip;
struct lp55xx_led *led;
struct lp55xx_platform_data *pdata = client->dev.platform_data;

old_chip = devm_kzalloc(&client->dev, sizeof(*old_chip), GFP_KERNEL);
if (!old_chip)
return -ENOMEM;

i2c_set_clientdata(client, old_chip);
old_chip->client = client;

old_pdata = client->dev.platform_data;

if (!old_pdata) {
if (!pdata) {
dev_err(&client->dev, "no platform data\n");
return -EINVAL;
}

mutex_init(&old_chip->lock);
chip = devm_kzalloc(&client->dev, sizeof(*chip), GFP_KERNEL);
if (!chip)
return -ENOMEM;

led = devm_kzalloc(&client->dev,
sizeof(*led) * pdata->num_channels, GFP_KERNEL);
if (!led)
return -ENOMEM;

chip->cl = client;
chip->pdata = pdata;

mutex_init(&chip->lock);

old_chip->pdata = old_pdata;
i2c_set_clientdata(client, led);

ret = lp5521_init_device(old_chip);
if (ret)
Expand Down
36 changes: 22 additions & 14 deletions drivers/leds/leds-lp5523.c
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,9 @@
#include <linux/leds-lp5523.h>
#include <linux/workqueue.h>
#include <linux/slab.h>
#include <linux/platform_data/leds-lp55xx.h>

#include "leds-lp55xx-common.h"

#define LP5523_REG_ENABLE 0x00
#define LP5523_REG_OP_MODE 0x01
Expand Down Expand Up @@ -1010,27 +1013,32 @@ static void lp5523_deinit_device(struct lp5523_chip *chip)
static int lp5523_probe(struct i2c_client *client,
const struct i2c_device_id *id)
{
struct lp5523_chip *old_chip;
struct lp5523_platform_data *old_pdata;
struct lp5523_chip *old_chip = NULL;
int ret, i;
struct lp55xx_chip *chip;
struct lp55xx_led *led;
struct lp55xx_platform_data *pdata = client->dev.platform_data;

old_chip = devm_kzalloc(&client->dev, sizeof(*old_chip), GFP_KERNEL);
if (!old_chip)
return -ENOMEM;

i2c_set_clientdata(client, old_chip);
old_chip->client = client;

old_pdata = client->dev.platform_data;

if (!old_pdata) {
if (!pdata) {
dev_err(&client->dev, "no platform data\n");
return -EINVAL;
}

mutex_init(&old_chip->lock);
chip = devm_kzalloc(&client->dev, sizeof(*chip), GFP_KERNEL);
if (!chip)
return -ENOMEM;

led = devm_kzalloc(&client->dev,
sizeof(*led) * pdata->num_channels, GFP_KERNEL);
if (!led)
return -ENOMEM;

chip->cl = client;
chip->pdata = pdata;

mutex_init(&chip->lock);

old_chip->pdata = old_pdata;
i2c_set_clientdata(client, led);

ret = lp5523_init_device(old_chip);
if (ret)
Expand Down

0 comments on commit 6a0c9a4

Please sign in to comment.