Skip to content

Commit

Permalink
leds: lp5562: support the device tree feature
Browse files Browse the repository at this point in the history
The LP55xx DT structure is applicable to the LP5562 device.
The driver and documentation are updated.

Compatible property of the DT
: LP5521 and LP5223 were manufactured by National Semiconductor.
  LP5562 is a new device from Texas Instruments.

Cc: Gabriel Fernandez <[email protected]>
Signed-off-by: Milo(Woogyom) Kim <[email protected]>
Acked-by: Linus Walleij <[email protected]>
Signed-off-by: Bryan Wu <[email protected]>
  • Loading branch information
Kim, Milo authored and cooloney committed Jun 20, 2013
1 parent 2dac912 commit e015050
Show file tree
Hide file tree
Showing 2 changed files with 49 additions and 7 deletions.
37 changes: 35 additions & 2 deletions Documentation/devicetree/bindings/leds/leds-lp55xx.txt
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
Binding for National Semiconductor LP55xx Led Drivers
Binding for TI/National Semiconductor LP55xx Led Drivers

Required properties:
- compatible: "national,lp5521" or "national,lp5523"
- compatible: "national,lp5521" or "national,lp5523" or "ti,lp5562"
- reg: I2C slave address
- clock-mode: Input clock mode, (0: automode, 1: internal, 2: external)

Expand Down Expand Up @@ -112,3 +112,36 @@ lp5523@32 {
max-cur = /bits/ 8 <0x20>;
};
};

example 3) LP5562
4 channels are defined.

lp5562@30 {
compatible = "ti,lp5562";
reg = <0x30>;
clock-mode = /bits/8 <2>;

chan0 {
chan-name = "R";
led-cur = /bits/ 8 <0x20>;
max-cur = /bits/ 8 <0x60>;
};

chan1 {
chan-name = "G";
led-cur = /bits/ 8 <0x20>;
max-cur = /bits/ 8 <0x60>;
};

chan2 {
chan-name = "B";
led-cur = /bits/ 8 <0x20>;
max-cur = /bits/ 8 <0x60>;
};

chan3 {
chan-name = "W";
led-cur = /bits/ 8 <0x20>;
max-cur = /bits/ 8 <0x60>;
};
};
19 changes: 14 additions & 5 deletions drivers/leds/leds-lp5562.c
Original file line number Diff line number Diff line change
Expand Up @@ -515,12 +515,20 @@ static int lp5562_probe(struct i2c_client *client,
int ret;
struct lp55xx_chip *chip;
struct lp55xx_led *led;
struct lp55xx_platform_data *pdata = client->dev.platform_data;

if (!pdata) {
dev_err(&client->dev, "no platform data\n");
return -EINVAL;
struct lp55xx_platform_data *pdata;
struct device_node *np = client->dev.of_node;

if (!client->dev.platform_data) {
if (np) {
ret = lp55xx_of_populate_pdata(&client->dev, np);
if (ret < 0)
return ret;
} else {
dev_err(&client->dev, "no platform data\n");
return -EINVAL;
}
}
pdata = client->dev.platform_data;

chip = devm_kzalloc(&client->dev, sizeof(*chip), GFP_KERNEL);
if (!chip)
Expand Down Expand Up @@ -579,6 +587,7 @@ static int lp5562_remove(struct i2c_client *client)

static const struct i2c_device_id lp5562_id[] = {
{ "lp5562", 0 },
{ "ti,lp5562", 0 }, /* OF compatible */
{ }
};
MODULE_DEVICE_TABLE(i2c, lp5562_id);
Expand Down

0 comments on commit e015050

Please sign in to comment.