From d24e45f896fe957e3dbaebf61382473d3259fb66 Mon Sep 17 00:00:00 2001 From: Nicolas Pitre Date: Sat, 4 Oct 2003 23:59:41 +0100 Subject: [PATCH] [ARM PATCH] 1660/1: misc PXA/Lubbock fixes Patch from Nicolas Pitre --- arch/arm/mach-pxa/irq.c | 16 +++++++++++++--- arch/arm/mach-pxa/lubbock.c | 3 ++- include/asm-arm/arch-pxa/irqs.h | 8 +++++--- include/asm-arm/arch-pxa/lubbock.h | 3 ++- 4 files changed, 22 insertions(+), 8 deletions(-) diff --git a/arch/arm/mach-pxa/irq.c b/arch/arm/mach-pxa/irq.c index 674cb381f8c0f..c771e43761e28 100644 --- a/arch/arm/mach-pxa/irq.c +++ b/arch/arm/mach-pxa/irq.c @@ -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; } diff --git a/arch/arm/mach-pxa/lubbock.c b/arch/arm/mach-pxa/lubbock.c index cf1e86aee3d47..b61d88f5eaa51 100644 --- a/arch/arm/mach-pxa/lubbock.c +++ b/arch/arm/mach-pxa/lubbock.c @@ -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) diff --git a/include/asm-arm/arch-pxa/irqs.h b/include/asm-arm/arch-pxa/irqs.h index 6d452434eabc2..170dcf464459f 100644 --- a/include/asm-arm/arch-pxa/irqs.h +++ b/include/asm-arm/arch-pxa/irqs.h @@ -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 @@ -129,8 +129,10 @@ #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) diff --git a/include/asm-arm/arch-pxa/lubbock.h b/include/asm-arm/arch-pxa/lubbock.h index 1ff2872cb5b13..b6244d2521a8f 100644 --- a/include/asm-arm/arch-pxa/lubbock.h +++ b/include/asm-arm/arch-pxa/lubbock.h @@ -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) -- 2.53.0