• Home
  • History
  • Annotate
  • Line#
  • Navigate
  • Raw
  • Download
  • only in /asuswrt-rt-n18u-9.0.0.4.380.2695/release/src-rt-6.x.4708/linux/linux-2.6/arch/h8300/platform/h8300h/
1/*
2 * Interrupt handling H8/300H depend.
3 * Yoshinori Sato <ysato@users.sourceforge.jp>
4 *
5 */
6
7#include <linux/init.h>
8#include <linux/errno.h>
9
10#include <asm/ptrace.h>
11#include <asm/traps.h>
12#include <asm/irq.h>
13#include <asm/io.h>
14#include <asm/gpio.h>
15#include <asm/regs306x.h>
16
17const int __initdata h8300_saved_vectors[] = {
18#if defined(CONFIG_GDB_DEBUG)
19	TRAP3_VEC,	/* TRAPA #3 is GDB breakpoint */
20#endif
21	-1,
22};
23
24const h8300_vector __initdata h8300_trap_table[] = {
25	0, 0, 0, 0, 0, 0, 0, 0,
26	system_call,
27	0,
28	0,
29	trace_break,
30};
31
32int h8300_enable_irq_pin(unsigned int irq)
33{
34	int bitmask;
35	if (irq < EXT_IRQ0 || irq > EXT_IRQ5)
36		return 0;
37
38	/* initialize IRQ pin */
39	bitmask = 1 << (irq - EXT_IRQ0);
40	switch(irq) {
41	case EXT_IRQ0:
42	case EXT_IRQ1:
43	case EXT_IRQ2:
44	case EXT_IRQ3:
45		if (H8300_GPIO_RESERVE(H8300_GPIO_P8, bitmask) == 0)
46			return -EBUSY;
47		H8300_GPIO_DDR(H8300_GPIO_P8, bitmask, H8300_GPIO_INPUT);
48		break;
49	case EXT_IRQ4:
50	case EXT_IRQ5:
51		if (H8300_GPIO_RESERVE(H8300_GPIO_P9, bitmask) == 0)
52			return -EBUSY;
53		H8300_GPIO_DDR(H8300_GPIO_P9, bitmask, H8300_GPIO_INPUT);
54		break;
55	}
56
57	return 0;
58}
59
60void h8300_disable_irq_pin(unsigned int irq)
61{
62	int bitmask;
63	if (irq < EXT_IRQ0 || irq > EXT_IRQ5)
64		return;
65
66	/* disable interrupt & release IRQ pin */
67	bitmask = 1 << (irq - EXT_IRQ0);
68	switch(irq) {
69	case EXT_IRQ0:
70	case EXT_IRQ1:
71	case EXT_IRQ2:
72	case EXT_IRQ3:
73		*(volatile unsigned char *)IER &= ~bitmask;
74		H8300_GPIO_FREE(H8300_GPIO_P8, bitmask);
75		break ;
76	case EXT_IRQ4:
77	case EXT_IRQ5:
78		*(volatile unsigned char *)IER &= ~bitmask;
79		H8300_GPIO_FREE(H8300_GPIO_P9, bitmask);
80		break;
81	}
82}
83