sh: Configurable timer IRQ.
[linux-2.6.git] / arch / sh / kernel / cpu / sh4 / setup-sh7780.c
1 /*
2  * SH7780 Setup
3  *
4  *  Copyright (C) 2006  Paul Mundt
5  *
6  * This file is subject to the terms and conditions of the GNU General Public
7  * License.  See the file "COPYING" in the main directory of this archive
8  * for more details.
9  */
10 #include <linux/platform_device.h>
11 #include <linux/init.h>
12 #include <linux/serial.h>
13 #include <asm/sci.h>
14
15 static struct resource rtc_resources[] = {
16         [0] = {
17                 .start  = 0xffe80000,
18                 .end    = 0xffe80000 + 0x58 - 1,
19                 .flags  = IORESOURCE_IO,
20         },
21         [1] = {
22                 /* Period IRQ */
23                 .start  = 21,
24                 .flags  = IORESOURCE_IRQ,
25         },
26         [2] = {
27                 /* Carry IRQ */
28                 .start  = 22,
29                 .flags  = IORESOURCE_IRQ,
30         },
31         [3] = {
32                 /* Alarm IRQ */
33                 .start  = 23,
34                 .flags  = IORESOURCE_IRQ,
35         },
36 };
37
38 static struct platform_device rtc_device = {
39         .name           = "sh-rtc",
40         .id             = -1,
41         .num_resources  = ARRAY_SIZE(rtc_resources),
42         .resource       = rtc_resources,
43 };
44
45 static struct plat_sci_port sci_platform_data[] = {
46         {
47                 .mapbase        = 0xffe00000,
48                 .flags          = UPF_BOOT_AUTOCONF,
49                 .type           = PORT_SCIF,
50                 .irqs           = { 40, 41, 43, 42 },
51         }, {
52                 .mapbase        = 0xffe10000,
53                 .flags          = UPF_BOOT_AUTOCONF,
54                 .type           = PORT_SCIF,
55                 .irqs           = { 76, 77, 79, 78 },
56         }, {
57                 .flags = 0,
58         }
59 };
60
61 static struct platform_device sci_device = {
62         .name           = "sh-sci",
63         .id             = -1,
64         .dev            = {
65                 .platform_data  = sci_platform_data,
66         },
67 };
68
69 static struct platform_device *sh7780_devices[] __initdata = {
70         &rtc_device,
71         &sci_device,
72 };
73
74 static int __init sh7780_devices_setup(void)
75 {
76         return platform_add_devices(sh7780_devices,
77                                     ARRAY_SIZE(sh7780_devices));
78 }
79 __initcall(sh7780_devices_setup);
80
81 static struct intc2_data intc2_irq_table[] = {
82         { 28, 0, 24, 0, INTC_TMU0_MSK, 2 },
83         { 21, 1, 0, 0, INTC_RTC_MSK, TIMER_PRIORITY },
84         { 22, 1, 1, 0, INTC_RTC_MSK, TIMER_PRIORITY },
85         { 23, 1, 2, 0, INTC_RTC_MSK, TIMER_PRIORITY },
86         { SCIF0_ERI_IRQ, 8, 24, 0, INTC_SCIF0_MSK, SCIF0_PRIORITY },
87         { SCIF0_RXI_IRQ, 8, 24, 0, INTC_SCIF0_MSK, SCIF0_PRIORITY },
88         { SCIF0_BRI_IRQ, 8, 24, 0, INTC_SCIF0_MSK, SCIF0_PRIORITY },
89         { SCIF0_TXI_IRQ, 8, 24, 0, INTC_SCIF0_MSK, SCIF0_PRIORITY },
90
91         { SCIF1_ERI_IRQ, 8, 16, 0, INTC_SCIF1_MSK, SCIF1_PRIORITY },
92         { SCIF1_RXI_IRQ, 8, 16, 0, INTC_SCIF1_MSK, SCIF1_PRIORITY },
93         { SCIF1_BRI_IRQ, 8, 16, 0, INTC_SCIF1_MSK, SCIF1_PRIORITY },
94         { SCIF1_TXI_IRQ, 8, 16, 0, INTC_SCIF1_MSK, SCIF1_PRIORITY },
95
96         { PCIC0_IRQ, 0x10,  8, 0, INTC_PCIC0_MSK, PCIC0_PRIORITY },
97         { PCIC1_IRQ, 0x10,  0, 0, INTC_PCIC1_MSK, PCIC1_PRIORITY },
98         { PCIC2_IRQ, 0x14, 24, 0, INTC_PCIC2_MSK, PCIC2_PRIORITY },
99         { PCIC3_IRQ, 0x14, 16, 0, INTC_PCIC3_MSK, PCIC3_PRIORITY },
100         { PCIC4_IRQ, 0x14,  8, 0, INTC_PCIC4_MSK, PCIC4_PRIORITY },
101 };
102
103 void __init init_IRQ_intc2(void)
104 {
105         make_intc2_irq(intc2_irq_table, ARRAY_SIZE(intc2_irq_table));
106 }