summaryrefslogtreecommitdiffstats
path: root/arch/alpha/kernel/sys_takara.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/alpha/kernel/sys_takara.c')
-rw-r--r--arch/alpha/kernel/sys_takara.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/arch/alpha/kernel/sys_takara.c b/arch/alpha/kernel/sys_takara.c
index 360f135b6..a0bc57125 100644
--- a/arch/alpha/kernel/sys_takara.c
+++ b/arch/alpha/kernel/sys_takara.c
@@ -66,6 +66,13 @@ takara_startup_irq(unsigned int irq)
return 0; /* never anything pending */
}
+static void
+takara_end_irq(unsigned int irq)
+{
+ if (!(irq_desc[irq].status & (IRQ_DISABLED|IRQ_INPROGRESS)))
+ takara_enable_irq(irq);
+}
+
static struct hw_interrupt_type takara_irq_type = {
typename: "TAKARA",
startup: takara_startup_irq,
@@ -73,7 +80,7 @@ static struct hw_interrupt_type takara_irq_type = {
enable: takara_enable_irq,
disable: takara_disable_irq,
ack: takara_disable_irq,
- end: takara_enable_irq,
+ end: takara_end_irq,
};
static void
@@ -126,7 +133,6 @@ takara_init_irq(void)
long i;
init_i8259a_irqs();
- init_rtc_irq();
if (alpha_using_srm) {
alpha_mv.device_interrupt = takara_srm_device_interrupt;
@@ -146,7 +152,7 @@ takara_init_irq(void)
takara_update_irq_hw(i, -1);
for (i = 16; i < 128; ++i) {
- irq_desc[i].status = IRQ_DISABLED;
+ irq_desc[i].status = IRQ_DISABLED | IRQ_LEVEL;
irq_desc[i].handler = &takara_irq_type;
}