linux-leds.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: NeilBrown <neilb@suse.de>
To: Mark Rutland <mark.rutland@arm.com>
Cc: Bryan Wu <cooloney@gmail.com>, Richard Purdie <rpurdie@rpsys.net>,
	"rob.herring@calxeda.com" <rob.herring@calxeda.com>,
	Pawel Moll <Pawel.Moll@arm.com>,
	Stephen Warren <swarren@wwwdotorg.org>,
	Ian Campbell <ijc+devicetree@hellion.org.uk>,
	"grant.likely@linaro.org" <grant.likely@linaro.org>,
	"linux-leds@vger.kernel.org" <linux-leds@vger.kernel.org>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
	Belisko Marek <marek.belisko@gmail.com>,
	"Dr. H. Nikolaus Schaller" <hns@goldelico.com>,
	"devicetree@vger.kernel.org" <devicetree@vger.kernel.org>
Subject: Re: [PATCH 2/2] LEDS: tca6502: add device-tree support for GPIO configuration.
Date: Tue, 19 Nov 2013 09:50:01 +1100	[thread overview]
Message-ID: <20131119095001.610e47c5@notabene.brown> (raw)
In-Reply-To: <20131118115512.GF30853@e106331-lin.cambridge.arm.com>

[-- Attachment #1: Type: text/plain, Size: 4652 bytes --]

On Mon, 18 Nov 2013 11:55:12 +0000 Mark Rutland <mark.rutland@arm.com> wrote:

> On Fri, Nov 01, 2013 at 02:41:20AM +0000, NeilBrown wrote:
> > 
> > The 7 lines driven by the TCA6507 can either drive LEDs or act as output-only
> > GPIOs.
> > 
> > To make this distinction in devicetree we use the "compatible" property.
> > 
> > If the device attached to a line is "compatible" with "gpio", we treat it
> > like a GPIO.  If it is "compatible" with "led" (or if no "compatible" value
> > is set) we treat it like an LED.
> 
> I'm nto sure I understand the purpose of this.
> 
> Are these lines all GPIOs, some of which happen to by attached to LEDs?
> 
> If so, why is handlnig the device as a gpio-controller and using the
> gpio-leds binding not sufficient?

No, all the lines are designed to drives LEDs but can happen to be wired up
like GPIOs.  This configuration is explicitly described in the data sheets
for the chip, and is actually used in my board.

The 7 pins either float or sink current. They can switch between the two
modes in various ways under hardware control with a PWM which can have a
varying duty cycle.
So they are very suitable for driving LEDs as the PWM can adjust the apparent
brightness and the varying duty cycle can effect a 'blink' pattern.

But the pins can also be fixed in one state of the other - either never on or
always on.  Floating or constantly sinking current.

This mode combined with a pull-up resistor makes an effective output-only
GPIO.  The same action that would turn the LED on, will pull the GPIO low.
The action that would turn the LED off, will allow the GPIO to go high.

So the device connected to each pin can be treated as an LED or as a GPIO.

I hope that clarifies the situation.

Thanks,
NeilBrown


> 
> THanksm
> Mark.
> 
> > 
> > Signed-off-by: NeilBrown <neilb@suse.de>
> > 
> > diff --git a/Documentation/devicetree/bindings/leds/tca6507.txt b/Documentation/devicetree/bindings/leds/tca6507.txt
> > index 80ff3dfb1f32..d7221b84987c 100644
> > --- a/Documentation/devicetree/bindings/leds/tca6507.txt
> > +++ b/Documentation/devicetree/bindings/leds/tca6507.txt
> > @@ -2,6 +2,13 @@ LEDs connected to tca6507
> >  
> >  Required properties:
> >  - compatible : should be : "ti,tca6507".
> > +- #address-cells: must be 1
> > +- #size-cells: must be 0
> > +- reg: typically 0x45.
> > +
> > +Optional properties:
> > +- gpio-controller: allows lines to be used as output-only GPIOs.
> > +- #gpio-cells: if present, must be 0.
> >  
> >  Each led is represented as a sub-node of the ti,tca6507 device.
> >  
> > @@ -10,6 +17,7 @@ LED sub-node properties:
> >  - reg : number of LED line (could be from 0 to 6)
> >  - linux,default-trigger : (optional)
> >     see Documentation/devicetree/bindings/leds/common.txt
> > +- compatible: either "led" (the default) or "gpio".
> >  
> >  Examples:
> >  
> > @@ -19,6 +27,9 @@ tca6507@45 {
> >  	#size-cells = <0>;
> >  	reg = <0x45>;
> >  
> > +	gpio-controller;
> > +	#gpio-cells = <2>;
> > +
> >  	led0: red-aux@0 {
> >  		label = "red:aux";
> >  		reg = <0x0>;
> > @@ -29,5 +40,10 @@ tca6507@45 {
> >  		reg = <0x5>;
> >  		linux,default-trigger = "default-on";
> >  	};
> > +
> > +	wifi-reset@6 {
> > +		reg = <0x6>;
> > +		compatible = "gpio";
> > +	};
> >  };
> >  
> > diff --git a/drivers/leds/leds-tca6507.c b/drivers/leds/leds-tca6507.c
> > index f5063f447463..93a2b1759054 100644
> > --- a/drivers/leds/leds-tca6507.c
> > +++ b/drivers/leds/leds-tca6507.c
> > @@ -638,6 +638,9 @@ static int tca6507_probe_gpios(struct i2c_client *client,
> >  	tca->gpio.direction_output = tca6507_gpio_direction_output;
> >  	tca->gpio.set = tca6507_gpio_set_value;
> >  	tca->gpio.dev = &client->dev;
> > +#ifdef CONFIG_OF_GPIO
> > +	tca->gpio.of_node = of_node_get(client->dev.of_node);
> > +#endif
> >  	err = gpiochip_add(&tca->gpio);
> >  	if (err) {
> >  		tca->gpio.ngpio = 0;
> > @@ -696,6 +699,8 @@ tca6507_led_dt_init(struct i2c_client *client)
> >  		led.default_trigger =
> >  			of_get_property(child, "linux,default-trigger", NULL);
> >  		led.flags = 0;
> > +		if (of_property_match_string(child, "compatible", "gpio") >= 0)
> > +			led.flags |= TCA6507_MAKE_GPIO;
> >  		ret = of_property_read_u32(child, "reg", &reg);
> >  		if (ret != 0 || reg < 0 || reg >= NUM_LEDS)
> >  			continue;
> > @@ -709,6 +714,7 @@ tca6507_led_dt_init(struct i2c_client *client)
> >  
> >  	pdata->leds.leds = tca_leds;
> >  	pdata->leds.num_leds = NUM_LEDS;
> > +	pdata->gpio_base = -1;
> >  
> >  	return pdata;
> >  }
> 


[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 828 bytes --]

      reply	other threads:[~2013-11-18 22:50 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-11-01  2:41 [PATCH 2/2] LEDS: tca6502: add device-tree support for GPIO configuration NeilBrown
2013-11-07 23:39 ` Bryan Wu
2013-11-07 23:46   ` NeilBrown
2013-11-07 23:46   ` Bryan Wu
2013-11-08  3:20   ` PATCH] LEDS: tca6507 - fix up some comments NeilBrown
2013-11-08  3:24     ` Joe Perches
2013-11-12  1:06       ` Bryan Wu
2013-11-13  5:52         ` [PATCH - v2] " NeilBrown
2013-11-18 11:55 ` [PATCH 2/2] LEDS: tca6502: add device-tree support for GPIO configuration Mark Rutland
2013-11-18 22:50   ` NeilBrown [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20131119095001.610e47c5@notabene.brown \
    --to=neilb@suse.de \
    --cc=Pawel.Moll@arm.com \
    --cc=cooloney@gmail.com \
    --cc=devicetree@vger.kernel.org \
    --cc=grant.likely@linaro.org \
    --cc=hns@goldelico.com \
    --cc=ijc+devicetree@hellion.org.uk \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-leds@vger.kernel.org \
    --cc=marek.belisko@gmail.com \
    --cc=mark.rutland@arm.com \
    --cc=rob.herring@calxeda.com \
    --cc=rpurdie@rpsys.net \
    --cc=swarren@wwwdotorg.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).