]> git.hungrycats.org Git - linux/commitdiff
[ARM PATCH] 1660/1: misc PXA/Lubbock fixes
authorNicolas Pitre <nico@org.rmk.(none)>
Sat, 4 Oct 2003 22:59:41 +0000 (23:59 +0100)
committerRussell King <rmk@flint.arm.linux.org.uk>
Sat, 4 Oct 2003 22:59:41 +0000 (23:59 +0100)
Patch from Nicolas Pitre

arch/arm/mach-pxa/irq.c
arch/arm/mach-pxa/lubbock.c
include/asm-arm/arch-pxa/irqs.h
include/asm-arm/arch-pxa/lubbock.h

index 674cb381f8c0f4cfc5ec1a56981ee2ec29eed503..c771e43761e284dc09d22af21ec1fec95758e81b 100644 (file)
@@ -58,7 +58,19 @@ static int pxa_gpio_irq_type(unsigned int irq, unsigned int type)
 {
        int gpio, idx;
 
-       gpio = irq - ((irq >= IRQ_GPIO(2)) ? IRQ_GPIO(2) + 2 : IRQ_GPIO(0));
+       gpio = IRQ_TO_GPIO(irq);
+       idx = gpio >> 5;
+
+       if (type == IRQT_PROBE) {
+           /* Don't mess with enabled GPIOs using preconfigured edges or
+              GPIOs set to alternate function during probe */
+               if ((GPIO_IRQ_rising_edge[idx] | GPIO_IRQ_falling_edge[idx]) &
+                   GPIO_bit(gpio))
+                       return 0;
+               if (GAFR(gpio) & (0x3 << (((gpio) & 0xf)*2)))
+                       return 0;
+               type = __IRQT_RISEDGE | __IRQT_FALEDGE;
+       }
 
        printk(KERN_DEBUG "IRQ%d (GPIO%d): ", irq, gpio);
 
@@ -78,10 +90,8 @@ static int pxa_gpio_irq_type(unsigned int irq, unsigned int type)
 
        printk("edges\n");
 
-       idx = gpio >> 5;
        GRER(gpio) = GPIO_IRQ_rising_edge[idx] & GPIO_IRQ_mask[idx];
        GFER(gpio) = GPIO_IRQ_falling_edge[idx] & GPIO_IRQ_mask[idx];
-
        return 0;
 }
 
index cf1e86aee3d4708236b3a85f637ea133f383bb70..b61d88f5eaa514ed79b24c2f03b8eac1ea647c91 100644 (file)
@@ -78,7 +78,7 @@ static void __init lubbock_init_irq(void)
        pxa_init_irq();
 
        /* setup extra lubbock irqs */
-       for (irq = LUBBOCK_IRQ(0); irq <= LUBBOCK_IRQ(5); irq++) {
+       for (irq = LUBBOCK_IRQ(0); irq <= LUBBOCK_LAST_IRQ; irq++) {
                set_irq_chip(irq, &lubbock_irq_chip);
                set_irq_handler(irq, do_level_IRQ);
                set_irq_flags(irq, IRQF_VALID | IRQF_PROBE);
@@ -124,6 +124,7 @@ static struct map_desc lubbock_io_desc[] __initdata = {
   { 0xf0000000, 0x08000000, 0x00100000, MT_DEVICE }, /* CPLD */
   { 0xf1000000, 0x0c000000, 0x00100000, MT_DEVICE }, /* LAN91C96 IO */
   { 0xf1100000, 0x0e000000, 0x00100000, MT_DEVICE }, /* LAN91C96 Attr */
+  { 0xf4000000, 0x10000000, 0x00800000, MT_DEVICE }, /* SA1111 */
 };
 
 static void __init lubbock_map_io(void)
index 6d452434eabc224d1b98d1738721895b0bd189d6..170dcf464459f85ad23909b76c616db6c418097f 100644 (file)
@@ -11,7 +11,7 @@
  */
 
 #define PXA_IRQ_SKIP   7       /* The first 7 IRQs are not yet used */
-#define PXA_IRQ(x)             ((x) - PXA_IRQ_SKIP)
+#define PXA_IRQ(x)     ((x) - PXA_IRQ_SKIP)
 
 #define IRQ_HWUART     PXA_IRQ(7)      /* HWUART Transmit/Receive/Error */
 #define        IRQ_GPIO0       PXA_IRQ(8)      /* GPIO0 Edge Detect */
@@ -45,7 +45,7 @@
 
 #define IRQ_TO_GPIO_2_80(i)    \
                        ((i) - PXA_IRQ(32) + 2)
-#define IRQ_TO_GPIO(i) ((i) - (((i) > IRQ_GPIO1) ? IRQ_GPIO(2) : IRQ_GPIO(0)))
+#define IRQ_TO_GPIO(i) ((i) - (((i) > IRQ_GPIO1) ? IRQ_GPIO(2) - 2 : IRQ_GPIO(0)))
 
 /*
  * The next 16 interrupts are for board specific purposes.  Since
 #define LUBBOCK_IRQ(x)         (IRQ_BOARD_START + (x))
 #define LUBBOCK_SD_IRQ         LUBBOCK_IRQ(0)
 #define LUBBOCK_SA1111_IRQ     LUBBOCK_IRQ(1)
-#define LUBBOCK_USB_IRQ                LUBBOCK_IRQ(2)
+#define LUBBOCK_USB_IRQ                LUBBOCK_IRQ(2)  /* usb connect */
 #define LUBBOCK_ETH_IRQ                LUBBOCK_IRQ(3)
 #define LUBBOCK_UCB1400_IRQ    LUBBOCK_IRQ(4)
 #define LUBBOCK_BB_IRQ         LUBBOCK_IRQ(5)
+#define LUBBOCK_USB_DISC_IRQ   LUBBOCK_IRQ(6)  /* usb disconnect */
+#define LUBBOCK_LAST_IRQ       LUBBOCK_IRQ(6)
 
index 1ff2872cb5b13e66ccdd0c3626650d8e2082073c..b6244d2521a8fca00d1420d3b1b442f35685f868 100644 (file)
@@ -12,7 +12,8 @@
 
 #define LUBBOCK_FPGA_PHYS      PXA_CS2_PHYS
 #define LUBBOCK_FPGA_VIRT      (0xf0000000)    /* phys 0x08000000 */
-#define LUBBOCK_ETH_BASE       (0xf1000000)    /* phys 0x0c000000 */
+#define LUBBOCK_ETH_PHYS       PXA_CS3_PHYS
+#define LUBBOCK_ETH_VIRT       (0xf1000000)
 
 #define LUB_P2V(x)             ((x) - LUBBOCK_FPGA_PHYS + LUBBOCK_FPGA_VIRT)
 #define LUB_V2P(x)             ((x) - LUBBOCK_FPGA_VIRT + LUBBOCK_FPGA_PHYS)