diff options
Diffstat (limited to 'cpu/mpc512x/iopin.c')
-rw-r--r-- | cpu/mpc512x/iopin.c | 25 |
1 files changed, 20 insertions, 5 deletions
diff --git a/cpu/mpc512x/iopin.c b/cpu/mpc512x/iopin.c index 78f4fa1e8c..4067eb2141 100644 --- a/cpu/mpc512x/iopin.c +++ b/cpu/mpc512x/iopin.c @@ -24,26 +24,41 @@ #include <common.h> #include <linux/types.h> #include <mpc512x.h> +#include <asm/io.h> void iopin_initialize(iopin_t *ioregs_init, int len) { short i, j, p; - u_long *reg; immap_t *im = (immap_t *)CONFIG_SYS_IMMR; +#ifdef CONFIG_ADS5125 + u_char *reg; +#else + u_long *reg; +#endif - reg = (u_long *)&(im->io_ctrl.regs[0]); - + reg = &im->io_ctrl.regs[0]; if (sizeof(ioregs_init) == 0) return; for (i = 0; i < len; i++) { +#ifdef CONFIG_ADS5125 + for (p = 0, j = ioregs_init[i].p_offset; + p < ioregs_init[i].nr_pins; p++, j++) { + if (ioregs_init[i].bit_or) + setbits(8, &(reg[j]), ioregs_init[i].val); + else + out_8(®[j], ioregs_init[i].val); + } +#else for (p = 0, j = ioregs_init[i].p_offset / sizeof(u_long); p < ioregs_init[i].nr_pins; p++, j++) { if (ioregs_init[i].bit_or) - reg[j] |= ioregs_init[i].val; + setbits(be32, &(reg[j]), ioregs_init[i].val); else - reg[j] = ioregs_init[i].val; + out_be32(®[j], ioregs_init[i].val); } +#endif } + return; } |