From: Aurelien Jarno Add GPIO support to the BCM947xx platform. It will be used by a GPIO LED driver. Signed-off-by: Aurelien Jarno Cc: Geert Uytterhoeven Cc: Ralf Baechle Cc: David Brownell Cc: Michael Buesch Signed-off-by: Andrew Morton --- include/asm-mips/mach-bcm947xx/gpio.h | 89 ++++++++++++++++++++++++ 1 files changed, 89 insertions(+) diff -puN include/asm-mips/mach-bcm947xx/gpio.h~mips-add-gpio-support-to-the-bcm947xx-platform include/asm-mips/mach-bcm947xx/gpio.h --- a/include/asm-mips/mach-bcm947xx/gpio.h~mips-add-gpio-support-to-the-bcm947xx-platform +++ a/include/asm-mips/mach-bcm947xx/gpio.h @@ -0,0 +1,89 @@ +/* + * This file is subject to the terms and conditions of the GNU General Public + * License. See the file "COPYING" in the main directory of this archive + * for more details. + * + * Copyright (C) 2007 Aurelien Jarno + */ + +#ifndef __BCM947XX_GPIO_H +#define __BCM947XX_GPIO_H + +#include +#include +#include +#include + +static inline int gpio_request(unsigned gpio, const char *label) +{ + return 0; +} + +static inline void gpio_free(unsigned gpio) +{ +} + +static inline int gpio_to_irq(unsigned gpio) +{ + if (ssb_bcm947xx.chipco.dev) + return ssb_mips_irq(ssb_bcm947xx.chipco.dev) + 2; + else if (ssb_bcm947xx.extif.dev) + return ssb_mips_irq(ssb_bcm947xx.extif.dev) + 2; + else + return -EINVAL; +} + +static inline int gpio_get_value(unsigned gpio) +{ + if (ssb_bcm947xx.chipco.dev) + return ssb_chipco_gpio_in(&ssb_bcm947xx.chipco, 1 << gpio); + else if (ssb_bcm947xx.extif.dev) + return ssb_extif_gpio_in(&ssb_bcm947xx.extif, 1 << gpio); + else + return 0; +} + +static inline void gpio_set_value(unsigned gpio, int value) +{ + if (ssb_bcm947xx.chipco.dev) + ssb_chipco_gpio_out(&ssb_bcm947xx.chipco, + 1 << gpio, + value ? 1 << gpio : 0); + else if (ssb_bcm947xx.extif.dev) + ssb_extif_gpio_out(&ssb_bcm947xx.extif, + 1 << gpio, + value ? 1 << gpio : 0); +} + +static inline int gpio_direction_input(unsigned gpio) +{ + if (ssb_bcm947xx.chipco.dev) + ssb_chipco_gpio_outen(&ssb_bcm947xx.chipco, + 1 << gpio, 0); + else if (ssb_bcm947xx.extif.dev) + ssb_extif_gpio_outen(&ssb_bcm947xx.extif, + 1 << gpio, 0); + else + return -EINVAL; + return 0; +} + +static inline int gpio_direction_output(unsigned gpio, int value) +{ + gpio_set_value(gpio, value); + + if (ssb_bcm947xx.chipco.dev) + ssb_chipco_gpio_outen(&ssb_bcm947xx.chipco, + 1 << gpio, 1 << gpio); + else if (ssb_bcm947xx.extif.dev) + ssb_extif_gpio_outen(&ssb_bcm947xx.extif, + 1 << gpio, 1 << gpio); + else + return -EINVAL; + return 0; +} + +/* cansleep wrappers */ +#include + +#endif /* __BCM947XX_GPIO_H */ _