From 98323c3d530be8391ca7a8daf6e4f05dca487368 Mon Sep 17 00:00:00 2001 From: Marek Vasut Date: Fri, 21 Aug 2009 02:14:56 +0200 Subject: [PATCH 10/10] Move all GPIO configuration at one place Moreover, configure serial ports properly. --- sys/arch/palm/dev/palm_kpc.c | 9 ----- sys/arch/palm/palm/palm_machdep.c | 62 ++++++++++++++++++++++++------------- 2 files changed, 40 insertions(+), 31 deletions(-) diff --git a/sys/arch/palm/dev/palm_kpc.c b/sys/arch/palm/dev/palm_kpc.c index 632caca..8c0a395 100644 --- a/sys/arch/palm/dev/palm_kpc.c +++ b/sys/arch/palm/dev/palm_kpc.c @@ -69,15 +69,6 @@ palm_kpc_attach(struct device *parent, struct device *self, void *aux) { struct pxa27x_kpc_softc *sc = (struct pxa27x_kpc_softc *)self; - pxa2x0_gpio_set_function(100, GPIO_ALT_FN_1_IN); - pxa2x0_gpio_set_function(101, GPIO_ALT_FN_1_IN); - pxa2x0_gpio_set_function(102, GPIO_ALT_FN_1_IN); - pxa2x0_gpio_set_function(97, GPIO_ALT_FN_3_IN); - - pxa2x0_gpio_set_function(103, GPIO_ALT_FN_2_OUT); - pxa2x0_gpio_set_function(104, GPIO_ALT_FN_2_OUT); - pxa2x0_gpio_set_function(105, GPIO_ALT_FN_2_OUT); - sc->sc_rows = 4; sc->sc_cols = 3; sc->sc_kmap = palmkpc_keymap; diff --git a/sys/arch/palm/palm/palm_machdep.c b/sys/arch/palm/palm/palm_machdep.c index 501cf2b..a2f55ad 100644 --- a/sys/arch/palm/palm/palm_machdep.c +++ b/sys/arch/palm/palm/palm_machdep.c @@ -263,6 +263,39 @@ bs_protos(bs_notimpl); int comcnspeed = CONSPEED; int comcnmode = CONMODE; +struct gpio_map { + int gpio; + int fn; +}; + +struct gpio_map palm_gpio_map[] = { + /* FFUART aka serial port on the connector */ + {34, GPIO_ALT_FN_1_IN}, + {39, GPIO_ALT_FN_2_OUT}, + + /* STUART aka. IrDA */ + {46, GPIO_ALT_FN_2_IN}, + {47, GPIO_ALT_FN_1_OUT}, + + /* Keypad controller */ + {100, GPIO_ALT_FN_1_IN}, + {101, GPIO_ALT_FN_1_IN}, + {102, GPIO_ALT_FN_1_IN}, + {97, GPIO_ALT_FN_3_IN}, + {103, GPIO_ALT_FN_2_OUT}, + {104, GPIO_ALT_FN_2_OUT}, + {105, GPIO_ALT_FN_2_OUT}, +}; + +inline void gpio_setup(struct gpio_map *map, int size); + +inline void +gpio_setup(struct gpio_map *map, int size) +{ + int i; + for (i = 0; i < size; i++) + pxa2x0_gpio_set_function(map[i].gpio, map[i].fn); +} /* * void boot(int howto) @@ -598,30 +631,15 @@ initarm(void *arg) * This test will work for now but has to be revised when support * for other models is added. */ -/* if ((cputype & ~CPU_ID_XSCALE_COREREV_MASK) == CPU_ID_PXA27X) - palmmod = PALM_C3000; - else - palmmod = PALM_C860; -*/ + /* setup GPIO for BTUART, in case bootloader doesn't take care of it */ pxa2x0_gpio_bootstrap(PALM_GPIO_VBASE); -#if 0 - pxa2x0_gpio_set_function(42, GPIO_ALT_FN_1_IN); - pxa2x0_gpio_set_function(43, GPIO_ALT_FN_2_OUT); - pxa2x0_gpio_set_function(44, GPIO_ALT_FN_1_IN); - pxa2x0_gpio_set_function(45, GPIO_ALT_FN_2_OUT); - - /* FFUART */ - pxa2x0_gpio_set_function(34, GPIO_ALT_FN_1_IN); - pxa2x0_gpio_set_function(39, GPIO_ALT_FN_2_OUT); - pxa2x0_gpio_set_function(35, GPIO_ALT_FN_1_IN); - pxa2x0_gpio_set_function(40, GPIO_ALT_FN_2_OUT); - pxa2x0_gpio_set_function(41, GPIO_ALT_FN_2_OUT); - - /* STUART */ - pxa2x0_gpio_set_function(46, GPIO_ALT_FN_2_IN); - pxa2x0_gpio_set_function(47, GPIO_ALT_FN_1_OUT); -#endif + + /* + * Do GPIO setup + */ + gpio_setup(palm_gpio_map, sizeof(palm_gpio_map)/sizeof(struct gpio_map)); + #ifdef COM_PXA2X0 /* tell com to drive STUART in slow infrared mode */ comsiraddr = (bus_addr_t)PXA2X0_STUART_BASE; -- 1.6.3.4