All of lore.kernel.org
 help / color / mirror / Atom feed
From: Grant Likely <grant.likely@secretlab.ca>
To: Roland Stigge <stigge@antcom.de>, linux-kernel@vger.kernel.org
Cc: Roland Stigge <stigge@antcom.de>
Subject: Re: [PATCH 2/2] gpio: Device tree support for LPC32xx
Date: Fri, 18 May 2012 16:27:29 -0600	[thread overview]
Message-ID: <20120518222729.4A7663E07C8@localhost> (raw)
In-Reply-To: <1337329192-5699-2-git-send-email-stigge@antcom.de>

On Fri, 18 May 2012 10:19:52 +0200, Roland Stigge <stigge@antcom.de> wrote:
> This patch adds device tree support for gpio-lpc32xx.c.
> 
> To register the various GPIO banks as (struct) gpio_chips via the same DT
> gpio-controller, we utilize the adjusted of_xlate API to manipulate the
> actually used struct gpio_chip.
> 
> Signed-off-by: Roland Stigge <stigge@antcom.de>
> Reviewed-by: Arnd Bergmann <arnd@arndb.de>
> Signed-off-by: Grant Likely <grant.likely@secretlab.ca>

Applied, thanks.

g.

> 
> ---
> 
> Thanks to Jean-Christophe PLAGNIOL-VILLARD, Grant Likely, Arnd Bergmann, Jon
> Smirl, Mark Brown for reviewing!
> 
> You can also pull from:
>   git://git.antcom.de/linux-2.6.git dt/gpio
>   http://git.antcom.de/linux-2.6.git dt/gpio
>   http://git.antcom.de/?p=linux-2.6.git;a=shortlog;h=refs/heads/dt/gpio
> 
>  Documentation/devicetree/bindings/gpio/gpio_lpc32xx.txt |   43 +++++++++++++
>  arch/arm/mach-lpc32xx/include/mach/gpio.h               |    9 ++
>  drivers/gpio/gpio-lpc32xx.c                             |   52 +++++++++++++++-
>  3 files changed, 102 insertions(+), 2 deletions(-)
> 
> --- /dev/null
> +++ linux-2.6/Documentation/devicetree/bindings/gpio/gpio_lpc32xx.txt
> @@ -0,0 +1,43 @@
> +NXP LPC32xx SoC GPIO controller
> +
> +Required properties:
> +- compatible: must be "nxp,lpc3220-gpio"
> +- reg: Physical base address and length of the controller's registers.
> +- gpio-controller: Marks the device node as a GPIO controller.
> +- #gpio-cells: Should be 3:
> +   1) bank:
> +      0: GPIO P0
> +      1: GPIO P1
> +      2: GPIO P2
> +      3: GPIO P3
> +      4: GPI P3
> +      5: GPO P3
> +   2) pin number
> +   3) optional parameters:
> +      - bit 0 specifies polarity (0 for normal, 1 for inverted)
> +- reg: Index of the GPIO group
> +
> +Example:
> +
> +	gpio: gpio@40028000 {
> +		compatible = "nxp,lpc3220-gpio";
> +		reg = <0x40028000 0x1000>;
> +		gpio-controller;
> +		#gpio-cells = <3>; /* bank, pin, flags */
> +	};
> +
> +	leds {
> +		compatible = "gpio-leds";
> +
> +		led0 {
> +			gpios = <&gpio 5 1 1>; /* GPO_P3 1, active low */
> +			linux,default-trigger = "heartbeat";
> +			default-state = "off";
> +		};
> +
> +		led1 {
> +			gpios = <&gpio 5 14 1>; /* GPO_P3 14, active low */
> +			linux,default-trigger = "timer";
> +			default-state = "off";
> +		};
> +	};
> --- linux-2.6.orig/arch/arm/mach-lpc32xx/include/mach/gpio.h
> +++ linux-2.6/arch/arm/mach-lpc32xx/include/mach/gpio.h
> @@ -1 +1,8 @@
> -/* empty */
> +#ifndef __MACH_GPIO_H
> +#define __MACH_GPIO_H
> +
> +#include "gpio-lpc32xx.h"
> +
> +#define ARCH_NR_GPIOS (LPC32XX_GPO_P3_GRP + LPC32XX_GPO_P3_MAX)
> +
> +#endif /* __MACH_GPIO_H */
> --- linux-2.6.orig/drivers/gpio/gpio-lpc32xx.c
> +++ linux-2.6/drivers/gpio/gpio-lpc32xx.c
> @@ -21,6 +21,9 @@
>  #include <linux/io.h>
>  #include <linux/errno.h>
>  #include <linux/gpio.h>
> +#include <linux/of_gpio.h>
> +#include <linux/platform_device.h>
> +#include <linux/module.h>
>  
>  #include <mach/hardware.h>
>  #include <mach/platform.h>
> @@ -454,10 +457,57 @@ static struct lpc32xx_gpio_chip lpc32xx_
>  	},
>  };
>  
> +/* Empty now, can be removed later when mach-lpc32xx is finally switched over
> + * to DT support
> + */
>  void __init lpc32xx_gpio_init(void)
>  {
> +}
> +
> +static int lpc32xx_of_xlate(struct gpio_chip *gc,
> +			    const struct of_phandle_args *gpiospec, u32 *flags)
> +{
> +	/* Is this the correct bank? */
> +	u32 bank = gpiospec->args[0];
> +	if ((bank > ARRAY_SIZE(lpc32xx_gpiochip) ||
> +	    (gc != &lpc32xx_gpiochip[bank].chip)))
> +		return -EINVAL;
> +
> +	if (flags)
> +		*flags = gpiospec->args[2];
> +	return gpiospec->args[1];
> +}
> +
> +static int __devinit lpc32xx_gpio_probe(struct platform_device *pdev)
> +{
>  	int i;
>  
> -	for (i = 0; i < ARRAY_SIZE(lpc32xx_gpiochip); i++)
> +	for (i = 0; i < ARRAY_SIZE(lpc32xx_gpiochip); i++) {
> +		if (pdev->dev.of_node) {
> +			lpc32xx_gpiochip[i].chip.of_xlate = lpc32xx_of_xlate;
> +			lpc32xx_gpiochip[i].chip.of_gpio_n_cells = 3;
> +			lpc32xx_gpiochip[i].chip.of_node = pdev->dev.of_node;
> +		}
>  		gpiochip_add(&lpc32xx_gpiochip[i].chip);
> +	}
> +
> +	return 0;
>  }
> +
> +#ifdef CONFIG_OF
> +static struct of_device_id lpc32xx_gpio_of_match[] __devinitdata = {
> +	{ .compatible = "nxp,lpc3220-gpio", },
> +	{ },
> +};
> +#endif
> +
> +static struct platform_driver lpc32xx_gpio_driver = {
> +	.driver		= {
> +		.name	= "lpc32xx-gpio",
> +		.owner	= THIS_MODULE,
> +		.of_match_table = of_match_ptr(lpc32xx_gpio_of_match),
> +	},
> +	.probe		= lpc32xx_gpio_probe,
> +};
> +
> +module_platform_driver(lpc32xx_gpio_driver);

-- 
Grant Likely, B.Sc, P.Eng.
Secret Lab Technologies, Ltd.

  reply	other threads:[~2012-05-18 22:27 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-05-18  8:19 [PATCH 1/2] gpio: Adjust of_xlate API to support multiple GPIO chips Roland Stigge
2012-05-18  8:19 ` [PATCH 2/2] gpio: Device tree support for LPC32xx Roland Stigge
2012-05-18 22:27   ` Grant Likely [this message]
2012-05-18  9:36 ` [PATCH 1/2] gpio: Adjust of_xlate API to support multiple GPIO chips Arnd Bergmann
  -- strict thread matches above, loose matches on Subject: below --
2012-05-17 20:04 [PATCH 1/3] " Grant Likely
2012-05-18  8:17 ` [PATCH 2/2] gpio: Device tree support for LPC32xx Roland Stigge
2012-05-18  8:18 ` Roland Stigge

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=20120518222729.4A7663E07C8@localhost \
    --to=grant.likely@secretlab.ca \
    --cc=linux-kernel@vger.kernel.org \
    --cc=stigge@antcom.de \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.