devicetree.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v2 1/2] leds/tca6507: Add support for devicetree.
@ 2012-11-07 20:55 Marek Belisko
  2012-11-07 20:55 ` [PATCH v2 2/2] Add documentation for tca6507 devicetree bindings Marek Belisko
  0 siblings, 1 reply; 4+ messages in thread
From: Marek Belisko @ 2012-11-07 20:55 UTC (permalink / raw)
  To: cooloney, rpurdie
  Cc: linux-leds, linux-kernel, devicetree-discuss, Marek Belisko

Support added only for leds (not for gpio's).

Signed-off-by: Marek Belisko <marek.belisko@open-nandra.com>
---

Changes from v1:
- return proper error value not NULL from tca6507_led_dt_init()
- remove empty lines
- remove kfree()

 drivers/leds/leds-tca6507.c |   70 +++++++++++++++++++++++++++++++++++++++++--
 1 file changed, 67 insertions(+), 3 deletions(-)

diff --git a/drivers/leds/leds-tca6507.c b/drivers/leds/leds-tca6507.c
index dabcf7a..e2c01f7 100644
--- a/drivers/leds/leds-tca6507.c
+++ b/drivers/leds/leds-tca6507.c
@@ -667,6 +667,66 @@ static void tca6507_remove_gpio(struct tca6507_chip *tca)
 }
 #endif /* CONFIG_GPIOLIB */
 
+#ifdef CONFIG_OF
+static struct tca6507_platform_data * __devinit tca6507_led_dt_init(struct i2c_client *client)
+{
+	struct device_node *np = client->dev.of_node, *child;
+	struct tca6507_platform_data *pdata;
+	struct led_info *tca_leds;
+	int count = 0;
+
+	for_each_child_of_node(np, child)
+		count++;
+	if (!count)
+		return ERR_PTR(-ENODEV);
+
+	if (count > NUM_LEDS)
+		return ERR_PTR(-ENODEV);
+
+	tca_leds = devm_kzalloc(&client->dev, sizeof(struct led_info) * NUM_LEDS, GFP_KERNEL);
+	if (!tca_leds)
+		return ERR_PTR(-ENOMEM);
+
+	for_each_child_of_node(np, child) {
+		struct led_info led;
+		u32 reg;
+		int ret;
+
+		led.name = of_get_property(child, "label", NULL) ? : child->name;
+		led.default_trigger =
+			of_get_property(child, "linux,default-trigger", NULL);
+
+		ret = of_property_read_u32(child, "reg", &reg);
+
+		if (ret != 0)
+			continue;
+		tca_leds[reg] = led;
+	}
+	pdata = devm_kzalloc(&client->dev, sizeof(struct tca6507_platform_data), GFP_KERNEL);
+	if (!pdata) {
+		return ERR_PTR(-ENOMEM);
+	}
+
+	pdata->leds.leds = tca_leds;
+	pdata->leds.num_leds = NUM_LEDS;
+
+	return pdata;
+}
+
+static const struct of_device_id of_tca6507_leds_match[] = {
+	{ .compatible = "leds-tca6507", },
+	{},
+};
+
+#else
+static int __devinit tca6507_led_dt_init(struct i2c_client *client, struct tca6507_platform_data *data)
+{
+	return -1;
+}
+
+#define of_tca6507_leds_match NULL
+#endif
+
 static int __devinit tca6507_probe(struct i2c_client *client,
 				   const struct i2c_device_id *id)
 {
@@ -683,9 +743,12 @@ static int __devinit tca6507_probe(struct i2c_client *client,
 		return -EIO;
 
 	if (!pdata || pdata->leds.num_leds != NUM_LEDS) {
-		dev_err(&client->dev, "Need %d entries in platform-data list\n",
-			NUM_LEDS);
-		return -ENODEV;
+		pdata = tca6507_led_dt_init(client);
+		if (IS_ERR(pdata)) {
+			dev_err(&client->dev, "Need %d entries in platform-data list\n",
+				NUM_LEDS);
+			return PTR_ERR(pdata);
+		}
 	}
 	tca = devm_kzalloc(&client->dev, sizeof(*tca), GFP_KERNEL);
 	if (!tca)
@@ -750,6 +813,7 @@ static struct i2c_driver tca6507_driver = {
 	.driver   = {
 		.name    = "leds-tca6507",
 		.owner   = THIS_MODULE,
+		.of_match_table = of_tca6507_leds_match,
 	},
 	.probe    = tca6507_probe,
 	.remove   = __devexit_p(tca6507_remove),
-- 
1.7.9.5

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [PATCH v2 2/2] Add documentation for tca6507 devicetree bindings.
  2012-11-07 20:55 [PATCH v2 1/2] leds/tca6507: Add support for devicetree Marek Belisko
@ 2012-11-07 20:55 ` Marek Belisko
  2012-11-07 23:14   ` Stephen Warren
  0 siblings, 1 reply; 4+ messages in thread
From: Marek Belisko @ 2012-11-07 20:55 UTC (permalink / raw)
  To: cooloney, rpurdie
  Cc: linux-leds, linux-kernel, devicetree-discuss, Marek Belisko

Signed-off-by: Marek Belisko <marek.belisko@open-nandra.com>
---
 Documentation/devicetree/bindings/leds/tca6507.txt |   33 ++++++++++++++++++++
 1 file changed, 33 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/leds/tca6507.txt

diff --git a/Documentation/devicetree/bindings/leds/tca6507.txt b/Documentation/devicetree/bindings/leds/tca6507.txt
new file mode 100644
index 0000000..cb0015b9f
--- /dev/null
+++ b/Documentation/devicetree/bindings/leds/tca6507.txt
@@ -0,0 +1,33 @@
+LEDs conected to tca6507
+
+Required properties:
+- compatible : should be : "leds-tca6507".
+
+Each led is represented as a sub-node of the leds-tca6507 device.
+
+LED sub-node properties:
+- label : label for this LED
+- reg : number of LED line (could be from 0 to 6)
+- linux,default-trigger : led default trigger
+
+Examples:
+
+tca6507@45 {
+	compatible = "leds-tca6507";
+	#address-cells = <1>;
+	#size-cells = <0>;
+	reg = <0x45>;
+
+	led0: red_aux@0 {
+		label = "red:aux";
+		reg = <0x0>;
+	};
+
+	led1: green_aux@1 {
+		label = "green:aux";
+		reg = <0x5>;
+		linux,default-trigger = "default-on";
+	};
+
+};
+
-- 
1.7.9.5

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH v2 2/2] Add documentation for tca6507 devicetree bindings.
  2012-11-07 20:55 ` [PATCH v2 2/2] Add documentation for tca6507 devicetree bindings Marek Belisko
@ 2012-11-07 23:14   ` Stephen Warren
       [not found]     ` <509AEB59.7010504-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org>
  0 siblings, 1 reply; 4+ messages in thread
From: Stephen Warren @ 2012-11-07 23:14 UTC (permalink / raw)
  To: Marek Belisko
  Cc: cooloney, rpurdie, linux-leds, linux-kernel, devicetree-discuss

On 11/07/2012 01:55 PM, Marek Belisko wrote:

> diff --git a/Documentation/devicetree/bindings/leds/tca6507.txt b/Documentation/devicetree/bindings/leds/tca6507.txt

> +LEDs conected to tca6507
> +
> +Required properties:
> +- compatible : should be : "leds-tca6507".

"ti,tca6507" would be more typical.

> +Each led is represented as a sub-node of the leds-tca6507 device.
> +
> +LED sub-node properties:
> +- label : label for this LED
> +- reg : number of LED line (could be from 0 to 6)
> +- linux,default-trigger : led default trigger

You probably want to mention which binding document defines the valid
values for that property; ../gpio/led.txt I think.

I wonder if we need to think about representing the blinking/fading/...
capabilities of the chip too? Should that be encoded into the DT, or
should it be controlled at run-time via some LED subsystem?

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH v2 2/2] Add documentation for tca6507 devicetree bindings.
       [not found]     ` <509AEB59.7010504-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org>
@ 2012-11-08 19:51       ` Belisko Marek
  0 siblings, 0 replies; 4+ messages in thread
From: Belisko Marek @ 2012-11-08 19:51 UTC (permalink / raw)
  To: Stephen Warren
  Cc: devicetree-discuss-uLR06cmDAlY/bJ5BZ2RsiQ, Bryan Wu,
	Richard Purdie, LKML, linux-leds-u79uwXL29TY76Z2rM5mHXA


[-- Attachment #1.1: Type: text/plain, Size: 1595 bytes --]

On Thu, Nov 8, 2012 at 12:14 AM, Stephen Warren <swarren-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org>wrote:

> On 11/07/2012 01:55 PM, Marek Belisko wrote:
>
> > diff --git a/Documentation/devicetree/bindings/leds/tca6507.txt
> b/Documentation/devicetree/bindings/leds/tca6507.txt
>
> > +LEDs conected to tca6507
> > +
> > +Required properties:
> > +- compatible : should be : "leds-tca6507".
>
> "ti,tca6507" would be more typical.
>
OK will post update for that

>
> > +Each led is represented as a sub-node of the leds-tca6507 device.
> > +
> > +LED sub-node properties:
> > +- label : label for this LED
> > +- reg : number of LED line (could be from 0 to 6)
> > +- linux,default-trigger : led default trigger
>
> You probably want to mention which binding document defines the valid
> values for that property; ../gpio/led.txt I think.
>
Will add that also. Just an idea this is common for most of the leds cannot
this be put to some common place as reference
to avoid copying same text again?

>
> I wonder if we need to think about representing the blinking/fading/...
> capabilities of the chip too? Should that be encoded into the DT, or
> should it be controlled at run-time via some LED subsystem?
>
I think this is handled internally and current platform data doesn't have
support for that.

Thanks,

marek

-- 
as simple and primitive as possible
-------------------------------------------------
Marek Belisko - OPEN-NANDRA
Freelance Developer

Ruska Nova Ves 219 | Presov, 08005 Slovak Republic
Tel: +421 915 052 184
skype: marekwhite
twitter: #opennandra
web: http://open-nandra.com

[-- Attachment #1.2: Type: text/html, Size: 2524 bytes --]

[-- Attachment #2: Type: text/plain, Size: 192 bytes --]

_______________________________________________
devicetree-discuss mailing list
devicetree-discuss-uLR06cmDAlY/bJ5BZ2RsiQ@public.gmane.org
https://lists.ozlabs.org/listinfo/devicetree-discuss

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2012-11-08 19:51 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-11-07 20:55 [PATCH v2 1/2] leds/tca6507: Add support for devicetree Marek Belisko
2012-11-07 20:55 ` [PATCH v2 2/2] Add documentation for tca6507 devicetree bindings Marek Belisko
2012-11-07 23:14   ` Stephen Warren
     [not found]     ` <509AEB59.7010504-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org>
2012-11-08 19:51       ` Belisko Marek

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).