]> git.karo-electronics.de Git - mv-sheeva.git/blobdiff - arch/arm/mach-mv78xx0/mpp.c
Merge branch 'master' into csb1725
[mv-sheeva.git] / arch / arm / mach-mv78xx0 / mpp.c
index 84db2dfc475ca9b24f5b30fad2637ee099de08f6..09c7869b1a030ca871c1e0473fee4d2a8667ebc1 100644 (file)
@@ -34,6 +34,13 @@ static unsigned int __init mv78xx0_variant(void)
 #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];
@@ -45,7 +52,7 @@ void __init mv78xx0_mpp_conf(unsigned int *mpp_list)
                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++) {
@@ -80,9 +87,16 @@ void __init mv78xx0_mpp_conf(unsigned int *mpp_list)
                        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:");