diff options
author | Russell King <rmk@dyn-67.arm.linux.org.uk> | 2008-10-09 16:33:03 -0400 |
---|---|---|
committer | Russell King <rmk+kernel@arm.linux.org.uk> | 2008-10-09 16:33:03 -0400 |
commit | b1add0480a95b6ceaece5caf6c50614771eae9b2 (patch) | |
tree | 06f969f37bd0f51d9ebcccdb3e3ae983edaad889 /arch/arm/mach-imx | |
parent | 3f30a09a612bac2b531a206c2a58a292dd7ff182 (diff) | |
parent | 58a85f465fb16a918a869eba05addb8f78d9e064 (diff) |
Merge branch 'for-rmk' of git://pasiphae.extern.pengutronix.de/git/imx/linux-2.6.git
Merge branch 'imx-devel' into devel
Diffstat (limited to 'arch/arm/mach-imx')
-rw-r--r-- | arch/arm/mach-imx/include/mach/irqs.h | 5 | ||||
-rw-r--r-- | arch/arm/mach-imx/irq.c | 32 |
2 files changed, 33 insertions, 4 deletions
diff --git a/arch/arm/mach-imx/include/mach/irqs.h b/arch/arm/mach-imx/include/mach/irqs.h index eb8d5bd05d56..67812c5ac1f9 100644 --- a/arch/arm/mach-imx/include/mach/irqs.h +++ b/arch/arm/mach-imx/include/mach/irqs.h | |||
@@ -111,6 +111,11 @@ | |||
111 | /* decode irq number to use with IMR(x), ISR(x) and friends */ | 111 | /* decode irq number to use with IMR(x), ISR(x) and friends */ |
112 | #define IRQ_TO_REG(irq) ((irq - IMX_IRQS) >> 5) | 112 | #define IRQ_TO_REG(irq) ((irq - IMX_IRQS) >> 5) |
113 | 113 | ||
114 | /* all normal IRQs can be FIQs */ | ||
115 | #define FIQ_START 0 | ||
116 | /* switch betwean IRQ and FIQ */ | ||
117 | extern int imx_set_irq_fiq(unsigned int irq, unsigned int type); | ||
118 | |||
114 | #define NR_IRQS (IRQ_GPIOD(32) + 1) | 119 | #define NR_IRQS (IRQ_GPIOD(32) + 1) |
115 | #define IRQ_GPIO(x) | 120 | #define IRQ_GPIO(x) |
116 | #endif | 121 | #endif |
diff --git a/arch/arm/mach-imx/irq.c b/arch/arm/mach-imx/irq.c index 232e3b9f880d..531b95deadc0 100644 --- a/arch/arm/mach-imx/irq.c +++ b/arch/arm/mach-imx/irq.c | |||
@@ -36,10 +36,7 @@ | |||
36 | /* | 36 | /* |
37 | * | 37 | * |
38 | * We simply use the ENABLE DISABLE registers inside of the IMX | 38 | * We simply use the ENABLE DISABLE registers inside of the IMX |
39 | * to turn on/off specific interrupts. FIXME- We should | 39 | * to turn on/off specific interrupts. |
40 | * also add support for the accelerated interrupt controller | ||
41 | * by putting offets to irq jump code in the appropriate | ||
42 | * places. | ||
43 | * | 40 | * |
44 | */ | 41 | */ |
45 | 42 | ||
@@ -102,6 +99,28 @@ imx_unmask_irq(unsigned int irq) | |||
102 | __raw_writel(irq, IMX_AITC_INTENNUM); | 99 | __raw_writel(irq, IMX_AITC_INTENNUM); |
103 | } | 100 | } |
104 | 101 | ||
102 | #ifdef CONFIG_FIQ | ||
103 | int imx_set_irq_fiq(unsigned int irq, unsigned int type) | ||
104 | { | ||
105 | unsigned int irqt; | ||
106 | |||
107 | if (irq >= IMX_IRQS) | ||
108 | return -EINVAL; | ||
109 | |||
110 | if (irq < IMX_IRQS / 2) { | ||
111 | irqt = __raw_readl(IMX_AITC_INTTYPEL) & ~(1 << irq); | ||
112 | __raw_writel(irqt | (!!type << irq), IMX_AITC_INTTYPEL); | ||
113 | } else { | ||
114 | irq -= IMX_IRQS / 2; | ||
115 | irqt = __raw_readl(IMX_AITC_INTTYPEH) & ~(1 << irq); | ||
116 | __raw_writel(irqt | (!!type << irq), IMX_AITC_INTTYPEH); | ||
117 | } | ||
118 | |||
119 | return 0; | ||
120 | } | ||
121 | EXPORT_SYMBOL(imx_set_irq_fiq); | ||
122 | #endif /* CONFIG_FIQ */ | ||
123 | |||
105 | static int | 124 | static int |
106 | imx_gpio_irq_type(unsigned int _irq, unsigned int type) | 125 | imx_gpio_irq_type(unsigned int _irq, unsigned int type) |
107 | { | 126 | { |
@@ -284,4 +303,9 @@ imx_init_irq(void) | |||
284 | 303 | ||
285 | /* Release masking of interrupts according to priority */ | 304 | /* Release masking of interrupts according to priority */ |
286 | __raw_writel(-1, IMX_AITC_NIMASK); | 305 | __raw_writel(-1, IMX_AITC_NIMASK); |
306 | |||
307 | #ifdef CONFIG_FIQ | ||
308 | /* Initialize FIQ */ | ||
309 | init_FIQ(); | ||
310 | #endif | ||
287 | } | 311 | } |