Imre Kaloz <ka...@openwrt.org> writes:

Hi,

I can't test it but it looks good. Just small nitpicks. See below.

> This patch adds gpiolib support for the IXP4xx platform
>
> Signed-off-by: Imre Kaloz <ka...@openwrt.org>
> ---
>  arch/arm/Kconfig                         |    2 +-
>  arch/arm/mach-ixp4xx/common.c            |   39 +++++++++++++++++++++++++
>  arch/arm/mach-ixp4xx/include/mach/gpio.h |   46 
> ++++++++++--------------------
>  3 files changed, 55 insertions(+), 32 deletions(-)
>
> diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
> index 3269576..e793a75 100644
> --- a/arch/arm/Kconfig
> +++ b/arch/arm/Kconfig
> @@ -481,7 +481,7 @@ config ARCH_IXP4XX
>       depends on MMU
>       select CLKSRC_MMIO
>       select CPU_XSCALE
> -     select GENERIC_GPIO
> +     select ARCH_REQUIRE_GPIOLIB
>       select GENERIC_CLOCKEVENTS
>       select HAVE_SCHED_CLOCK
>       select MIGHT_HAVE_PCI
> diff --git a/arch/arm/mach-ixp4xx/common.c b/arch/arm/mach-ixp4xx/common.c
> index 0777257..7603456 100644
> --- a/arch/arm/mach-ixp4xx/common.c
> +++ b/arch/arm/mach-ixp4xx/common.c
> @@ -36,6 +36,7 @@
>  #include <asm/page.h>
>  #include <asm/irq.h>
>  #include <asm/sched_clock.h>
> +#include <asm/gpio.h>
>  
>  #include <asm/mach/map.h>
>  #include <asm/mach/irq.h>
> @@ -375,12 +376,50 @@ static struct platform_device *ixp46x_devices[] 
> __initdata = {
>  unsigned long ixp4xx_exp_bus_size;
>  EXPORT_SYMBOL(ixp4xx_exp_bus_size);
>  
> +static int ixp4xx_gpio_direction_input(struct gpio_chip *chip, unsigned gpio)
> +{
> +     gpio_line_config(gpio, IXP4XX_GPIO_IN);
> +     return 0;
> +}
> +
> +static int ixp4xx_gpio_direction_output(struct gpio_chip *chip, unsigned 
> gpio, int level)
> +{
> +     gpio_line_set(gpio, level);
> +     gpio_line_config(gpio, IXP4XX_GPIO_OUT);
> +     return 0;
> +}
> +
> +static int ixp4xx_gpio_get_value(struct gpio_chip *chip, unsigned gpio)
> +{
> +     int value;
> +
> +     gpio_line_get(gpio, &value);
> +     return value;
> +}
> +
> +static void ixp4xx_gpio_set_value(struct gpio_chip *chip, unsigned gpio, int 
> value)
> +{
> +     gpio_line_set(gpio, value);
> +}
> +
> +static struct gpio_chip ixp4xx_gpio_chip = {
> +     .label                  = "IXP4XX_GPIO_CHIP",
> +     .direction_input        = ixp4xx_gpio_direction_input,
> +     .direction_output       = ixp4xx_gpio_direction_output,
> +     .get                    = ixp4xx_gpio_get_value,
> +     .set                    = ixp4xx_gpio_set_value,
> +     .base                   = 0,
> +     .ngpio                  = 16,

Use NR_BUILTIN_GPIO instead of 16 ?

> +};
> +
>  void __init ixp4xx_sys_init(void)
>  {
>       ixp4xx_exp_bus_size = SZ_16M;
>  
>       platform_add_devices(ixp4xx_devices, ARRAY_SIZE(ixp4xx_devices));
>  
> +     gpiochip_add(&ixp4xx_gpio_chip);
> +
>       if (cpu_is_ixp46x()) {
>               int region;
>  
> diff --git a/arch/arm/mach-ixp4xx/include/mach/gpio.h 
> b/arch/arm/mach-ixp4xx/include/mach/gpio.h
> index a5f87de..86f3596 100644
> --- a/arch/arm/mach-ixp4xx/include/mach/gpio.h
> +++ b/arch/arm/mach-ixp4xx/include/mach/gpio.h
> @@ -27,47 +27,31 @@
>  
>  #include <linux/kernel.h>
>  #include <mach/hardware.h>
> +#include <asm-generic/gpio.h>                        /* cansleep wrappers */
>  
> -static inline int gpio_request(unsigned gpio, const char *label)
> -{
> -     return 0;
> -}
> -
> -static inline void gpio_free(unsigned gpio)
> -{
> -     might_sleep();
> -
> -     return;
> -}
> -
> -static inline int gpio_direction_input(unsigned gpio)
> -{
> -     gpio_line_config(gpio, IXP4XX_GPIO_IN);
> -     return 0;
> -}
> -
> -static inline int gpio_direction_output(unsigned gpio, int level)
> -{
> -     gpio_line_set(gpio, level);
> -     gpio_line_config(gpio, IXP4XX_GPIO_OUT);
> -     return 0;
> -}
> +#define NR_BUILTIN_GPIO 16
>  
>  static inline int gpio_get_value(unsigned gpio)
>  {
> -     int value;
> -
> -     gpio_line_get(gpio, &value);
> -
> -     return value;
> +     if (gpio < NR_BUILTIN_GPIO)
> +     {
> +             int value;
> +             gpio_line_get(gpio, &value);
> +             return value;
> +     }
> +     else
> +             return __gpio_get_value(gpio);

Please use 
       if () {
       } else
I would also put the 'int value' declaration outside the if ().


Thanks,
Arnaud


-- 
To UNSUBSCRIBE, email to debian-kernel-requ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org
Archive: http://lists.debian.org/871uvu6u89....@lebrac.rtp-net.org

Reply via email to