source: trunk/target/linux/ixp4xx/patches-3.0/402-ixp4xx_gpiolib.patch @ 27493

Last change on this file since 27493 was 27493, checked in by kaloz, 5 years ago

[ixp4xx]: add 3.0 support

File size: 3.0 KB
  • arch/arm/mach-ixp4xx/common.c

    a b  
    3636#include <asm/page.h> 
    3737#include <asm/irq.h> 
    3838#include <asm/sched_clock.h> 
     39#include <asm/gpio.h> 
    3940 
    4041#include <asm/mach/map.h> 
    4142#include <asm/mach/irq.h> 
    static struct platform_device *ixp46x_de 
    375376unsigned long ixp4xx_exp_bus_size; 
    376377EXPORT_SYMBOL(ixp4xx_exp_bus_size); 
    377378 
     379static int ixp4xx_gpio_direction_input(struct gpio_chip *chip, unsigned gpio) 
     380{ 
     381        gpio_line_config(gpio, IXP4XX_GPIO_IN); 
     382        return 0; 
     383} 
     384 
     385static int ixp4xx_gpio_direction_output(struct gpio_chip *chip, unsigned gpio, int level) 
     386{ 
     387        gpio_line_set(gpio, level); 
     388        gpio_line_config(gpio, IXP4XX_GPIO_OUT); 
     389        return 0; 
     390} 
     391 
     392static int ixp4xx_gpio_get_value(struct gpio_chip *chip, unsigned gpio) 
     393{ 
     394        int value; 
     395 
     396        gpio_line_get(gpio, &value); 
     397        return value; 
     398} 
     399 
     400static void ixp4xx_gpio_set_value(struct gpio_chip *chip, unsigned gpio, int value) 
     401{ 
     402        gpio_line_set(gpio, value); 
     403} 
     404 
     405static struct gpio_chip ixp4xx_gpio_chip = { 
     406        .label                  = "IXP4XX_GPIO_CHIP", 
     407        .direction_input        = ixp4xx_gpio_direction_input, 
     408        .direction_output       = ixp4xx_gpio_direction_output, 
     409        .get                    = ixp4xx_gpio_get_value, 
     410        .set                    = ixp4xx_gpio_set_value, 
     411        .base                   = 0, 
     412        .ngpio                  = 16, 
     413}; 
     414 
    378415void __init ixp4xx_sys_init(void) 
    379416{ 
    380417        ixp4xx_exp_bus_size = SZ_16M; 
    381418 
    382419        platform_add_devices(ixp4xx_devices, ARRAY_SIZE(ixp4xx_devices)); 
    383420 
     421        gpiochip_add(&ixp4xx_gpio_chip); 
     422 
    384423        if (cpu_is_ixp46x()) { 
    385424                int region; 
    386425 
  • arch/arm/Kconfig

    a b config ARCH_IXP4XX 
    462462        depends on MMU 
    463463        select CLKSRC_MMIO 
    464464        select CPU_XSCALE 
    465         select GENERIC_GPIO 
     465        select ARCH_REQUIRE_GPIOLIB 
    466466        select GENERIC_CLOCKEVENTS 
    467467        select HAVE_SCHED_CLOCK 
    468468        select MIGHT_HAVE_PCI 
  • arch/arm/mach-ixp4xx/include/mach/gpio.h

    a b  
    2727 
    2828#include <linux/kernel.h> 
    2929#include <mach/hardware.h> 
     30#include <asm-generic/gpio.h>                   /* cansleep wrappers */ 
    3031 
    31 static inline int gpio_request(unsigned gpio, const char *label) 
    32 { 
    33         return 0; 
    34 } 
    35  
    36 static inline void gpio_free(unsigned gpio) 
    37 { 
    38         might_sleep(); 
    39  
    40         return; 
    41 } 
    42  
    43 static inline int gpio_direction_input(unsigned gpio) 
    44 { 
    45         gpio_line_config(gpio, IXP4XX_GPIO_IN); 
    46         return 0; 
    47 } 
    48  
    49 static inline int gpio_direction_output(unsigned gpio, int level) 
    50 { 
    51         gpio_line_set(gpio, level); 
    52         gpio_line_config(gpio, IXP4XX_GPIO_OUT); 
    53         return 0; 
    54 } 
     32#define NR_BUILTIN_GPIO 16 
    5533 
    5634static inline int gpio_get_value(unsigned gpio) 
    5735{ 
    58         int value; 
    59  
    60         gpio_line_get(gpio, &value); 
    61  
    62         return value; 
     36        if (gpio < NR_BUILTIN_GPIO) 
     37        { 
     38                int value; 
     39                gpio_line_get(gpio, &value); 
     40                return value; 
     41        } 
     42        else 
     43                return __gpio_get_value(gpio); 
    6344} 
    6445 
    6546static inline void gpio_set_value(unsigned gpio, int value) 
    6647{ 
    67         gpio_line_set(gpio, value); 
     48        if (gpio < NR_BUILTIN_GPIO) 
     49                gpio_line_set(gpio, value); 
     50        else 
     51                __gpio_set_value(gpio, value); 
    6852} 
    6953 
    70 #include <asm-generic/gpio.h>                   /* cansleep wrappers */ 
     54#define gpio_cansleep __gpio_cansleep 
    7155 
    7256extern int gpio_to_irq(int gpio); 
    7357extern int irq_to_gpio(unsigned int irq); 
Note: See TracBrowser for help on using the repository browser.