public inbox for linux-arm-kernel@lists.infradead.org
 help / color / mirror / Atom feed
* [PATCH] leds: Add DT support for leds-pca9532
@ 2012-06-16 14:10 Roland Stigge
  2012-06-16 15:06 ` Stephen Warren
  0 siblings, 1 reply; 5+ messages in thread
From: Roland Stigge @ 2012-06-16 14:10 UTC (permalink / raw)
  To: linux-arm-kernel

This patch adds DT support for leds-pca9532.

Signed-off-by: Roland Stigge <stigge@antcom.de>

---
 Documentation/devicetree/bindings/leds/leds-pca9532.txt |   43 ++++++++++++++
 drivers/leds/leds-pca9532.c                             |   47 ++++++++++++++++
 2 files changed, 90 insertions(+)

--- /dev/null
+++ linux-2.6/Documentation/devicetree/bindings/leds/leds-pca9532.txt
@@ -0,0 +1,43 @@
+NXP PCA9532 LED (incl. GPIO) controller
+
+Required properties:
+- compatible: must be "nxp,pca9532"
+- reg: I2C address
+- gpio-controller: Marks the device node as a GPIO controller.
+- #gpio-cells: Should be 2:
+   1) pin number
+   2) optional parameters:
+      - bit 0 specifies polarity (0 for normal, 1 for inverted)
+- nxp,typecodes: groups of 2 bits for each of the 16 pins:
+  0: None
+  1: LED
+  2: Beep
+  3: GPIO
+- nxp,statecodes: groups of 2 bits for each of the 16 pins:
+  0: off
+  1: on
+  2: pwm0
+  3: pwm1
+
+Optional properties:
+- nxp,psc: array of 2 numbers: PSC values for the two PWM channels (see datasheet)
+- nxp,pwm: array of 2 numbers: PWM values for the two PWM channels (see datasheet)
+
+Example:
+
+	pca9532: pca9532 at 60 {
+		compatible = "nxp,pca9532";
+		gpio-controller;
+		#gpio-cells = <2>;
+		nxp,typecodes = <0xffffffff>;
+		nxp,statecodes = <0x00000000>;
+		reg = <0x60>;
+	};
+
+	sd at 20098000 {
+		wp-gpios = <&pca9532 5 0>;
+		cd-gpios = <&pca9532 4 0>;
+		cd-inverted;
+		bus-width = <4>;
+		status = "okay";
+	};
--- linux-2.6.orig/drivers/leds/leds-pca9532.c
+++ linux-2.6/drivers/leds/leds-pca9532.c
@@ -21,6 +21,7 @@
 #include <linux/workqueue.h>
 #include <linux/leds-pca9532.h>
 #include <linux/gpio.h>
+#include <linux/of.h>
 
 /* m =  num_leds*/
 #define PCA9532_REG_INPUT(i)	((i) >> 3)
@@ -444,6 +445,47 @@ exit:
 	return err;
 }
 
+#ifdef CONFIG_OF
+static struct pca9532_platform_data *pca9532_parse_dt(struct device *dev)
+{
+	struct device_node *np = dev->of_node;
+	struct pca9532_platform_data *pca9532_pdata;
+	u32 typecodes, statecodes;
+	u32 pwm[2];
+	u32 psc[2];
+	int i;
+
+	pca9532_pdata = devm_kzalloc(dev, sizeof(*pca9532_pdata), GFP_KERNEL);
+	if (!pca9532_pdata) {
+		dev_err(dev, "could not allocate memory for platform data\n");
+		return NULL;
+	}
+
+	if (!of_property_read_u32(np, "nxp,typecodes", &typecodes)) {
+		for (i = 0; i < 16; i++)
+			pca9532_pdata->leds[i].type =
+				(typecodes >> (2 * i)) & 0x3;
+	}
+	if (!of_property_read_u32(np, "nxp,statecodes", &statecodes)) {
+		for (i = 0; i < 16; i++)
+			pca9532_pdata->leds[i].state =
+				(statecodes >> (2 * i)) & 0x3;
+	}
+	if (!of_property_read_u32_array(np, "nxp,pwm", &pwm[0], 2)) {
+		for (i = 0; i < 2; i++)
+			pca9532_pdata->pwm[i] = pwm[i];
+	}
+	if (!of_property_read_u32_array(np, "nxp,psc", &psc[0], 2)) {
+		for (i = 0; i < 2; i++)
+			pca9532_pdata->psc[i] = psc[i];
+	}
+
+	pca9532_pdata->gpio_base = -1; /* dynamically assign gpio base */
+
+	return pca9532_pdata;
+}
+#endif
+
 static int pca9532_probe(struct i2c_client *client,
 	const struct i2c_device_id *id)
 {
@@ -451,6 +493,11 @@ static int pca9532_probe(struct i2c_clie
 	struct pca9532_platform_data *pca9532_pdata = client->dev.platform_data;
 	int err;
 
+#ifdef CONFIG_OF
+	if (!pca9532_pdata && client->dev.of_node)
+		pca9532_pdata = pca9532_parse_dt(&client->dev);
+#endif
+
 	if (!pca9532_pdata)
 		return -EIO;
 

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

* [PATCH] leds: Add DT support for leds-pca9532
  2012-06-16 14:10 [PATCH] leds: Add DT support for leds-pca9532 Roland Stigge
@ 2012-06-16 15:06 ` Stephen Warren
  2012-06-17 11:51   ` Roland Stigge
  0 siblings, 1 reply; 5+ messages in thread
From: Stephen Warren @ 2012-06-16 15:06 UTC (permalink / raw)
  To: linux-arm-kernel

On 06/16/2012 08:10 AM, Roland Stigge wrote:
> This patch adds DT support for leds-pca9532.

> +++ linux-2.6/Documentation/devicetree/bindings/leds/leds-pca9532.txt

> +- nxp,typecodes: groups of 2 bits for each of the 16 pins:
> +  0: None
> +  1: LED
> +  2: Beep
> +  3: GPIO
> +- nxp,statecodes: groups of 2 bits for each of the 16 pins:
> +  0: off
> +  1: on
> +  2: pwm0
> +  3: pwm1
> +
> +Optional properties:
> +- nxp,psc: array of 2 numbers: PSC values for the two PWM channels (see datasheet)
> +- nxp,pwm: array of 2 numbers: PWM values for the two PWM channels (see datasheet)

Shouldn't that all be exposed using a combination of the pinctrl
bindings that are in 3.5, and the PWM bindings that should be coming in 3.6?

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

* [PATCH] leds: Add DT support for leds-pca9532
  2012-06-16 15:06 ` Stephen Warren
@ 2012-06-17 11:51   ` Roland Stigge
  2012-06-17 18:02     ` Stephen Warren
  0 siblings, 1 reply; 5+ messages in thread
From: Roland Stigge @ 2012-06-17 11:51 UTC (permalink / raw)
  To: linux-arm-kernel

Hi,

On 16/06/12 17:06, Stephen Warren wrote:
>> +- nxp,typecodes: groups of 2 bits for each of the 16 pins:
>> +  0: None
>> +  1: LED
>> +  2: Beep
>> +  3: GPIO
>> +- nxp,statecodes: groups of 2 bits for each of the 16 pins:
>> +  0: off
>> +  1: on
>> +  2: pwm0
>> +  3: pwm1
>> +
>> +Optional properties:
>> +- nxp,psc: array of 2 numbers: PSC values for the two PWM channels (see datasheet)
>> +- nxp,pwm: array of 2 numbers: PWM values for the two PWM channels (see datasheet)
> 
> Shouldn't that all be exposed using a combination of the pinctrl
> bindings that are in 3.5, and the PWM bindings that should be coming in 3.6?

Thanks for the note! I found a pwm tree that should have this at

http://gitorious.org/linux-pwm/linux-pwm

but it gives me server errors. Is there a place where I can have a look?

Thanks in advance,

Roland

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

* [PATCH] leds: Add DT support for leds-pca9532
  2012-06-17 11:51   ` Roland Stigge
@ 2012-06-17 18:02     ` Stephen Warren
  2012-06-19  6:16       ` Thierry Reding
  0 siblings, 1 reply; 5+ messages in thread
From: Stephen Warren @ 2012-06-17 18:02 UTC (permalink / raw)
  To: linux-arm-kernel

On 06/17/2012 05:51 AM, Roland Stigge wrote:
> Hi,
> 
> On 16/06/12 17:06, Stephen Warren wrote:
>>> +- nxp,typecodes: groups of 2 bits for each of the 16 pins:
>>> +  0: None
>>> +  1: LED
>>> +  2: Beep
>>> +  3: GPIO
>>> +- nxp,statecodes: groups of 2 bits for each of the 16 pins:
>>> +  0: off
>>> +  1: on
>>> +  2: pwm0
>>> +  3: pwm1
>>> +
>>> +Optional properties:
>>> +- nxp,psc: array of 2 numbers: PSC values for the two PWM channels (see datasheet)
>>> +- nxp,pwm: array of 2 numbers: PWM values for the two PWM channels (see datasheet)
>>
>> Shouldn't that all be exposed using a combination of the pinctrl
>> bindings that are in 3.5, and the PWM bindings that should be coming in 3.6?
> 
> Thanks for the note! I found a pwm tree that should have this at
> 
> http://gitorious.org/linux-pwm/linux-pwm
> 
> but it gives me server errors. Is there a place where I can have a look?

That URL (with http:// replace with git://) did work for me. It seemed a
little slow at first, but did work without issue. I Cc'd Thierry in case
there's any other location available.

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

* [PATCH] leds: Add DT support for leds-pca9532
  2012-06-17 18:02     ` Stephen Warren
@ 2012-06-19  6:16       ` Thierry Reding
  0 siblings, 0 replies; 5+ messages in thread
From: Thierry Reding @ 2012-06-19  6:16 UTC (permalink / raw)
  To: linux-arm-kernel

On Sun, Jun 17, 2012 at 12:02:55PM -0600, Stephen Warren wrote:
> On 06/17/2012 05:51 AM, Roland Stigge wrote:
> > Hi,
> > 
> > On 16/06/12 17:06, Stephen Warren wrote:
> >>> +- nxp,typecodes: groups of 2 bits for each of the 16 pins:
> >>> +  0: None
> >>> +  1: LED
> >>> +  2: Beep
> >>> +  3: GPIO
> >>> +- nxp,statecodes: groups of 2 bits for each of the 16 pins:
> >>> +  0: off
> >>> +  1: on
> >>> +  2: pwm0
> >>> +  3: pwm1
> >>> +
> >>> +Optional properties:
> >>> +- nxp,psc: array of 2 numbers: PSC values for the two PWM channels (see datasheet)
> >>> +- nxp,pwm: array of 2 numbers: PWM values for the two PWM channels (see datasheet)
> >>
> >> Shouldn't that all be exposed using a combination of the pinctrl
> >> bindings that are in 3.5, and the PWM bindings that should be coming in 3.6?
> > 
> > Thanks for the note! I found a pwm tree that should have this at
> > 
> > http://gitorious.org/linux-pwm/linux-pwm
> > 
> > but it gives me server errors. Is there a place where I can have a look?
> 
> That URL (with http:// replace with git://) did work for me. It seemed a
> little slow at first, but did work without issue. I Cc'd Thierry in case
> there's any other location available.

There isn't. IIRC, back when I finalized the PWM subsystem during the last
cycle, Arnd Bergmann suggested that I request an account and repository on
kernel.org back when the subsystem was ready. At the time I didn't think
it necessary, but reading this, perhaps it wouldn't be such a bad idea.
kernel.org should have better availability than gitorious.

Thierry
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 198 bytes
Desc: not available
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20120619/f2625929/attachment.sig>

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

end of thread, other threads:[~2012-06-19  6:16 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-06-16 14:10 [PATCH] leds: Add DT support for leds-pca9532 Roland Stigge
2012-06-16 15:06 ` Stephen Warren
2012-06-17 11:51   ` Roland Stigge
2012-06-17 18:02     ` Stephen Warren
2012-06-19  6:16       ` Thierry Reding

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox