c0265a96e7d3c35e2b22d9053e336a7935e5bbb6
[linux-3.10.git] / arch / sh / kernel / cpu / sh3 / setup-sh7709.c
1 /*
2  * SH7707/SH7709 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 plat_sci_port sci_platform_data[] = {
16         {
17                 .mapbase        = 0xfffffe80,
18                 .flags          = UPF_BOOT_AUTOCONF,
19                 .type           = PORT_SCI,
20                 .irqs           = { 23, 24, 25, 0 },
21         }, {
22                 .mapbase        = 0xa4000150,
23                 .flags          = UPF_BOOT_AUTOCONF,
24                 .type           = PORT_SCIF,
25                 .irqs           = { 56, 57, 59, 58 },
26         }, {
27                 .mapbase        = 0xa4000140,
28                 .flags          = UPF_BOOT_AUTOCONF,
29                 .type           = PORT_IRDA,
30                 .irqs           = { 52, 53, 55, 54 },
31         }, {
32                 .flags = 0,
33         }
34 };
35
36 static struct platform_device sci_device = {
37         .name           = "sh-sci",
38         .id             = -1,
39         .dev            = {
40                 .platform_data  = sci_platform_data,
41         },
42 };
43
44 static struct platform_device *sh7709_devices[] __initdata = {
45         &sci_device,
46 };
47
48 static int __init sh7709_devices_setup(void)
49 {
50         return platform_add_devices(sh7709_devices,
51                 ARRAY_SIZE(sh7709_devices));
52 }
53 __initcall(sh7709_devices_setup);
54
55 static struct ipr_data ipr_irq_table[] = {
56         { 16, 0, 12, 2 }, /* TMU TUNI0 */
57         { 17, 0, 8,  4 }, /* TMU TUNI1 */
58         { 18, 0, 4,  1 }, /* TMU TUNI1 */
59         { 19, 0, 4,  1 }, /* TMU TUNI1 */
60         { 20, 0, 0,  2 }, /* RTC CUI */
61         { 21, 0, 0,  2 }, /* RTC CUI */
62         { 22, 0, 0,  2 }, /* RTC CUI */
63
64         { 23, 1, 4,  3 }, /* SCI */
65         { 24, 1, 4,  3 }, /* SCI */
66         { 25, 1, 4,  3 }, /* SCI */
67         { 26, 1, 4,  3 }, /* SCI */
68         { 27, 1, 12, 3 }, /* WDT ITI */
69
70         { 32, 2, 0,  1 }, /* IRQ 0 */
71         { 33, 2, 4,  1 }, /* IRQ 1 */
72         { 34, 2, 8,  1 }, /* IRQ 2 APM */
73         { 35, 2, 12, 1 }, /* IRQ 3 TOUCHSCREEN */
74
75         { 36, 3, 0,  1 }, /* IRQ 4 */
76         { 37, 3, 4,  1 }, /* IRQ 5 */
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         },
112 };
113
114 void __init init_IRQ_ipr(void)
115 {
116         register_ipr_controller(&ipr_irq_desc);
117 }