Path: blob/master/arch/h8300/platform/h8300h/irq.c
10819 views
/*1* Interrupt handling H8/300H depend.2* Yoshinori Sato <[email protected]>3*4*/56#include <linux/init.h>7#include <linux/errno.h>89#include <asm/ptrace.h>10#include <asm/traps.h>11#include <asm/irq.h>12#include <asm/io.h>13#include <asm/gpio.h>14#include <asm/regs306x.h>1516const int __initdata h8300_saved_vectors[] = {17#if defined(CONFIG_GDB_DEBUG)18TRAP3_VEC, /* TRAPA #3 is GDB breakpoint */19#endif20-1,21};2223const h8300_vector __initdata h8300_trap_table[] = {240, 0, 0, 0, 0, 0, 0, 0,25system_call,260,270,28trace_break,29};3031int h8300_enable_irq_pin(unsigned int irq)32{33int bitmask;34if (irq < EXT_IRQ0 || irq > EXT_IRQ5)35return 0;3637/* initialize IRQ pin */38bitmask = 1 << (irq - EXT_IRQ0);39switch(irq) {40case EXT_IRQ0:41case EXT_IRQ1:42case EXT_IRQ2:43case EXT_IRQ3:44if (H8300_GPIO_RESERVE(H8300_GPIO_P8, bitmask) == 0)45return -EBUSY;46H8300_GPIO_DDR(H8300_GPIO_P8, bitmask, H8300_GPIO_INPUT);47break;48case EXT_IRQ4:49case EXT_IRQ5:50if (H8300_GPIO_RESERVE(H8300_GPIO_P9, bitmask) == 0)51return -EBUSY;52H8300_GPIO_DDR(H8300_GPIO_P9, bitmask, H8300_GPIO_INPUT);53break;54}5556return 0;57}5859void h8300_disable_irq_pin(unsigned int irq)60{61int bitmask;62if (irq < EXT_IRQ0 || irq > EXT_IRQ5)63return;6465/* disable interrupt & release IRQ pin */66bitmask = 1 << (irq - EXT_IRQ0);67switch(irq) {68case EXT_IRQ0:69case EXT_IRQ1:70case EXT_IRQ2:71case EXT_IRQ3:72*(volatile unsigned char *)IER &= ~bitmask;73H8300_GPIO_FREE(H8300_GPIO_P8, bitmask);74break ;75case EXT_IRQ4:76case EXT_IRQ5:77*(volatile unsigned char *)IER &= ~bitmask;78H8300_GPIO_FREE(H8300_GPIO_P9, bitmask);79break;80}81}828384