1/* 2 * linux/arch/arm/mach-nuc93x/irq.c 3 * 4 * Copyright (c) 2008 Nuvoton technology corporation. 5 * 6 * Wan ZongShun <mcuos.com@gmail.com> 7 * 8 * This program is free software; you can redistribute it and/or modify 9 * it under the terms of the GNU General Public License as published by 10 * the Free Software Foundation;version 2 of the License. 11 * 12 */ 13 14#include <linux/init.h> 15#include <linux/module.h> 16#include <linux/interrupt.h> 17#include <linux/ioport.h> 18#include <linux/ptrace.h> 19#include <linux/sysdev.h> 20#include <linux/io.h> 21 22#include <asm/irq.h> 23#include <asm/mach/irq.h> 24 25#include <mach/hardware.h> 26#include <mach/regs-irq.h> 27 28static void nuc93x_irq_mask(unsigned int irq) 29{ 30 __raw_writel(1 << irq, REG_AIC_MDCR); 31} 32 33/* 34 * By the w90p910 spec,any irq,only write 1 35 * to REG_AIC_EOSCR for ACK 36 */ 37 38static void nuc93x_irq_ack(unsigned int irq) 39{ 40 __raw_writel(0x01, REG_AIC_EOSCR); 41} 42 43static void nuc93x_irq_unmask(unsigned int irq) 44{ 45 __raw_writel(1 << irq, REG_AIC_MECR); 46 47} 48 49static struct irq_chip nuc93x_irq_chip = { 50 .ack = nuc93x_irq_ack, 51 .mask = nuc93x_irq_mask, 52 .unmask = nuc93x_irq_unmask, 53}; 54 55void __init nuc93x_init_irq(void) 56{ 57 int irqno; 58 59 __raw_writel(0xFFFFFFFE, REG_AIC_MDCR); 60 61 for (irqno = IRQ_WDT; irqno <= NR_IRQS; irqno++) { 62 set_irq_chip(irqno, &nuc93x_irq_chip); 63 set_irq_handler(irqno, handle_level_irq); 64 set_irq_flags(irqno, IRQF_VALID); 65 } 66} 67