diff options
Diffstat (limited to 'arch/sh/kernel/cpu/sh3/setup-sh7709.c')
-rw-r--r-- | arch/sh/kernel/cpu/sh3/setup-sh7709.c | 84 |
1 files changed, 59 insertions, 25 deletions
diff --git a/arch/sh/kernel/cpu/sh3/setup-sh7709.c b/arch/sh/kernel/cpu/sh3/setup-sh7709.c index c7d7c35fc834..c0265a96e7d3 100644 --- a/arch/sh/kernel/cpu/sh3/setup-sh7709.c +++ b/arch/sh/kernel/cpu/sh3/setup-sh7709.c | |||
@@ -52,32 +52,66 @@ static int __init sh7709_devices_setup(void) | |||
52 | } | 52 | } |
53 | __initcall(sh7709_devices_setup); | 53 | __initcall(sh7709_devices_setup); |
54 | 54 | ||
55 | #define IPRx(A,N) .addr=A, .shift=N | 55 | static struct ipr_data ipr_irq_table[] = { |
56 | #define IPRA(N) IPRx(0xfffffee2UL,N) | 56 | { 16, 0, 12, 2 }, /* TMU TUNI0 */ |
57 | #define IPRB(N) IPRx(0xfffffee4UL,N) | 57 | { 17, 0, 8, 4 }, /* TMU TUNI1 */ |
58 | #define IPRC(N) IPRx(0xa4000016UL,N) | 58 | { 18, 0, 4, 1 }, /* TMU TUNI1 */ |
59 | #define IPRD(N) IPRx(0xa4000018UL,N) | 59 | { 19, 0, 4, 1 }, /* TMU TUNI1 */ |
60 | #define IPRE(N) IPRx(0xa400001aUL,N) | 60 | { 20, 0, 0, 2 }, /* RTC CUI */ |
61 | 61 | { 21, 0, 0, 2 }, /* RTC CUI */ | |
62 | static struct ipr_data sh7709_ipr_map[] = { | 62 | { 22, 0, 0, 2 }, /* RTC CUI */ |
63 | [16] = { IPRA(12), 2 }, /* TMU TUNI0 */ | 63 | |
64 | [17] = { IPRA(8), 4 }, /* TMU TUNI1 */ | 64 | { 23, 1, 4, 3 }, /* SCI */ |
65 | [18 ... 19] = { IPRA(4), 1 }, /* TMU TUNI1 */ | 65 | { 24, 1, 4, 3 }, /* SCI */ |
66 | [20 ... 22] = { IPRA(0), 2 }, /* RTC CUI */ | 66 | { 25, 1, 4, 3 }, /* SCI */ |
67 | [23 ... 26] = { IPRB(4), 3 }, /* SCI */ | 67 | { 26, 1, 4, 3 }, /* SCI */ |
68 | [27] = { IPRB(12), 2 }, /* WDT ITI */ | 68 | { 27, 1, 12, 3 }, /* WDT ITI */ |
69 | [32] = { IPRC(0), 1 }, /* IRQ 0 */ | 69 | |
70 | [33] = { IPRC(4), 1 }, /* IRQ 1 */ | 70 | { 32, 2, 0, 1 }, /* IRQ 0 */ |
71 | [34] = { IPRC(8), 1 }, /* IRQ 2 APM */ | 71 | { 33, 2, 4, 1 }, /* IRQ 1 */ |
72 | [35] = { IPRC(12), 1 }, /* IRQ 3 TOUCHSCREEN */ | 72 | { 34, 2, 8, 1 }, /* IRQ 2 APM */ |
73 | [36] = { IPRD(0), 1 }, /* IRQ 4 */ | 73 | { 35, 2, 12, 1 }, /* IRQ 3 TOUCHSCREEN */ |
74 | [37] = { IPRD(4), 1 }, /* IRQ 5 */ | 74 | |
75 | [48 ... 51] = { IPRE(12), 7 }, /* DMA */ | 75 | { 36, 3, 0, 1 }, /* IRQ 4 */ |
76 | [52 ... 55] = { IPRE(8), 3 }, /* IRDA */ | 76 | { 37, 3, 4, 1 }, /* IRQ 5 */ |
77 | [56 ... 59] = { IPRE(4), 3 }, /* SCIF */ | 77 | |
78 | { 48, 4, 12, 7 }, /* DMA */ | ||
79 | { 49, 4, 12, 7 }, /* DMA */ | ||
80 | { 50, 4, 12, 7 }, /* DMA */ | ||
81 | { 51, 4, 12, 7 }, /* DMA */ | ||
82 | |||
83 | { 52, 4, 8, 3 }, /* IRDA */ | ||
84 | { 53, 4, 8, 3 }, /* IRDA */ | ||
85 | { 54, 4, 8, 3 }, /* IRDA */ | ||
86 | { 55, 4, 8, 3 }, /* IRDA */ | ||
87 | |||
88 | { 56, 4, 4, 3 }, /* SCIF */ | ||
89 | { 57, 4, 4, 3 }, /* SCIF */ | ||
90 | { 58, 4, 4, 3 }, /* SCIF */ | ||
91 | { 59, 4, 4, 3 }, /* SCIF */ | ||
92 | }; | ||
93 | |||
94 | static unsigned long ipr_offsets[] = { | ||
95 | 0xfffffee2, /* 0: IPRA */ | ||
96 | 0xfffffee4, /* 1: IPRB */ | ||
97 | 0xa4000016, /* 2: IPRC */ | ||
98 | 0xa4000018, /* 3: IPRD */ | ||
99 | 0xa400001a, /* 4: IPRE */ | ||
100 | }; | ||
101 | |||
102 | static struct ipr_desc ipr_irq_desc = { | ||
103 | .ipr_offsets = ipr_offsets, | ||
104 | .nr_offsets = ARRAY_SIZE(ipr_offsets), | ||
105 | |||
106 | .ipr_data = ipr_irq_table, | ||
107 | .nr_irqs = ARRAY_SIZE(ipr_irq_table), | ||
108 | |||
109 | .chip = { | ||
110 | .name = "IPR-sh7709", | ||
111 | }, | ||
78 | }; | 112 | }; |
79 | 113 | ||
80 | void __init init_IRQ_ipr() | 114 | void __init init_IRQ_ipr(void) |
81 | { | 115 | { |
82 | make_ipr_irq(sh7709_ipr_map, ARRAY_SIZE(sh7709_ipr_map)); | 116 | register_ipr_controller(&ipr_irq_desc); |
83 | } | 117 | } |