#define MPP_CTRL(i) (DEV_BUS_VIRT_BASE + (i) * 4)
#define MPP_NR_REGS (1 + MPP_MAX/8)
+static unsigned char hgpio[] = {
+ 0, 1, 2, 3, 4, 5, 6, 7, /* GPIO[0..7] on AD[24..31] */
+ 17, 18, 19, 20, 21, 22, 23, /* GPIO[17..23] on AD[9..15] */
+ 16, /* GPIO[16] on WEn[1] */
+ 8, 9 /* GPIO[8..9] on WEn[2..3] */
+};
+
void __init mv78xx0_mpp_conf(unsigned int *mpp_list)
{
u32 mpp_ctrl[MPP_NR_REGS];
return;
/* Initialize gpiolib. */
- orion_gpio_init();
+ // orion_gpio_init(); /* already been done in irq.c */
printk(KERN_DEBUG "initial MPP regs:");
for (i = 0; i < MPP_NR_REGS; i++) {
gpio_mode |= GPIO_INPUT_OK;
if (*mpp_list & MPP_OUTPUT_MASK)
gpio_mode |= GPIO_OUTPUT_OK;
- if (sel != 0)
- gpio_mode = 0;
- orion_gpio_set_valid(num, gpio_mode);
+ if (num > 31 && sel == 0x01) {
+ /* printk(KERN_ERR "high GPIO %d -> %d\n", num, hgpio[num-32]); */
+ orion_gpio_set_valid(hgpio[num-32], gpio_mode);
+ } else {
+ if (sel != 0)
+ gpio_mode = 0;
+ orion_gpio_set_valid(num, gpio_mode);
+ }
+
+ mpp_list++;
}
printk(KERN_DEBUG " final MPP regs:");