The patch below adds GPIO support to the BCM947xx platform. It will be used by a GPIO LED driver. Signed-off-by: Aurelien Jarno <aurelien@xxxxxxxxxxx> --- a/include/asm-mips/mach-bcm947xx/gpio.h +++ b/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 <aurelien@xxxxxxxxxxx> + */ + +#ifndef __BCM947XX_GPIO_H +#define __BCM947XX_GPIO_H + +#include <linux/ssb/ssb.h> +#include <linux/ssb/ssb_driver_chipcommon.h> +#include <linux/ssb/ssb_driver_extif.h> +#include <asm/mach-bcm947xx/bcm947xx.h> + +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 <asm-generic/gpio.h> + +#endif /* __BCM947XX_GPIO_H */ -- .''`. Aurelien Jarno | GPG: 1024D/F1BCDB73 : :' : Debian developer | Electrical Engineer `. `' aurel32@xxxxxxxxxx | aurelien@xxxxxxxxxxx `- people.debian.org/~aurel32 | www.aurel32.net