/* * linux/arch/arm/mach-nuc93x/irq.c * * Copyright (c) 2008 Nuvoton technology corporation. * * Wan ZongShun * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation;version 2 of the License. * */ #include #include #include #include #include #include #include #include #include #include #include static void nuc93x_irq_mask(struct irq_data *d) { __raw_writel(1 << d->irq, REG_AIC_MDCR); } /* * By the w90p910 spec,any irq,only write 1 * to REG_AIC_EOSCR for ACK */ static void nuc93x_irq_ack(struct irq_data *d) { __raw_writel(0x01, REG_AIC_EOSCR); } static void nuc93x_irq_unmask(struct irq_data *d) { __raw_writel(1 << d->irq, REG_AIC_MECR); } static struct irq_chip nuc93x_irq_chip = { .irq_ack = nuc93x_irq_ack, .irq_mask = nuc93x_irq_mask, .irq_unmask = nuc93x_irq_unmask, }; void __init nuc93x_init_irq(void) { int irqno; __raw_writel(0xFFFFFFFE, REG_AIC_MDCR); for (irqno = IRQ_WDT; irqno <= NR_IRQS; irqno++) { irq_set_chip(irqno, &nuc93x_irq_chip); irq_set_handler(irqno, handle_level_irq); set_irq_flags(irqno, IRQF_VALID); } }