Mention branches and keyring.
[releases.git] / mach-x3proto / setup.c
1 // SPDX-License-Identifier: GPL-2.0
2 /*
3  * arch/sh/boards/mach-x3proto/setup.c
4  *
5  * Renesas SH-X3 Prototype Board Support.
6  *
7  * Copyright (C) 2007 - 2010  Paul Mundt
8  */
9 #include <linux/init.h>
10 #include <linux/platform_device.h>
11 #include <linux/kernel.h>
12 #include <linux/io.h>
13 #include <linux/smc91x.h>
14 #include <linux/irq.h>
15 #include <linux/interrupt.h>
16 #include <linux/input.h>
17 #include <linux/usb/r8a66597.h>
18 #include <linux/usb/m66592.h>
19 #include <linux/gpio/driver.h>
20 #include <linux/gpio_keys.h>
21 #include <mach/ilsel.h>
22 #include <mach/hardware.h>
23 #include <asm/smp-ops.h>
24
25 static struct resource heartbeat_resources[] = {
26         [0] = {
27                 .start  = 0xb8140020,
28                 .end    = 0xb8140020,
29                 .flags  = IORESOURCE_MEM,
30         },
31 };
32
33 static struct platform_device heartbeat_device = {
34         .name           = "heartbeat",
35         .id             = -1,
36         .num_resources  = ARRAY_SIZE(heartbeat_resources),
37         .resource       = heartbeat_resources,
38 };
39
40 static struct smc91x_platdata smc91x_info = {
41         .flags  = SMC91X_USE_16BIT | SMC91X_NOWAIT,
42 };
43
44 static struct resource smc91x_resources[] = {
45         [0] = {
46                 .start          = 0x18000300,
47                 .end            = 0x18000300 + 0x10 - 1,
48                 .flags          = IORESOURCE_MEM,
49         },
50         [1] = {
51                 /* Filled in by ilsel */
52                 .flags          = IORESOURCE_IRQ,
53         },
54 };
55
56 static struct platform_device smc91x_device = {
57         .name           = "smc91x",
58         .id             = -1,
59         .resource       = smc91x_resources,
60         .num_resources  = ARRAY_SIZE(smc91x_resources),
61         .dev    = {
62                 .platform_data = &smc91x_info,
63         },
64 };
65
66 static struct r8a66597_platdata r8a66597_data = {
67         .xtal = R8A66597_PLATDATA_XTAL_12MHZ,
68         .vif = 1,
69 };
70
71 static struct resource r8a66597_usb_host_resources[] = {
72         [0] = {
73                 .start  = 0x18040000,
74                 .end    = 0x18080000 - 1,
75                 .flags  = IORESOURCE_MEM,
76         },
77         [1] = {
78                 /* Filled in by ilsel */
79                 .flags  = IORESOURCE_IRQ | IRQF_TRIGGER_LOW,
80         },
81 };
82
83 static struct platform_device r8a66597_usb_host_device = {
84         .name           = "r8a66597_hcd",
85         .id             = -1,
86         .dev = {
87                 .dma_mask               = NULL,         /* don't use dma */
88                 .coherent_dma_mask      = 0xffffffff,
89                 .platform_data          = &r8a66597_data,
90         },
91         .num_resources  = ARRAY_SIZE(r8a66597_usb_host_resources),
92         .resource       = r8a66597_usb_host_resources,
93 };
94
95 static struct m66592_platdata usbf_platdata = {
96         .xtal = M66592_PLATDATA_XTAL_24MHZ,
97         .vif = 1,
98 };
99
100 static struct resource m66592_usb_peripheral_resources[] = {
101         [0] = {
102                 .name   = "m66592_udc",
103                 .start  = 0x18080000,
104                 .end    = 0x180c0000 - 1,
105                 .flags  = IORESOURCE_MEM,
106         },
107         [1] = {
108                 .name   = "m66592_udc",
109                 /* Filled in by ilsel */
110                 .flags  = IORESOURCE_IRQ,
111         },
112 };
113
114 static struct platform_device m66592_usb_peripheral_device = {
115         .name           = "m66592_udc",
116         .id             = -1,
117         .dev = {
118                 .dma_mask               = NULL,         /* don't use dma */
119                 .coherent_dma_mask      = 0xffffffff,
120                 .platform_data          = &usbf_platdata,
121         },
122         .num_resources  = ARRAY_SIZE(m66592_usb_peripheral_resources),
123         .resource       = m66592_usb_peripheral_resources,
124 };
125
126 static struct gpio_keys_button baseboard_buttons[NR_BASEBOARD_GPIOS] = {
127         {
128                 .desc           = "key44",
129                 .code           = KEY_POWER,
130                 .active_low     = 1,
131                 .wakeup         = 1,
132         }, {
133                 .desc           = "key43",
134                 .code           = KEY_SUSPEND,
135                 .active_low     = 1,
136                 .wakeup         = 1,
137         }, {
138                 .desc           = "key42",
139                 .code           = KEY_KATAKANAHIRAGANA,
140                 .active_low     = 1,
141         }, {
142                 .desc           = "key41",
143                 .code           = KEY_SWITCHVIDEOMODE,
144                 .active_low     = 1,
145         }, {
146                 .desc           = "key34",
147                 .code           = KEY_F12,
148                 .active_low     = 1,
149         }, {
150                 .desc           = "key33",
151                 .code           = KEY_F11,
152                 .active_low     = 1,
153         }, {
154                 .desc           = "key32",
155                 .code           = KEY_F10,
156                 .active_low     = 1,
157         }, {
158                 .desc           = "key31",
159                 .code           = KEY_F9,
160                 .active_low     = 1,
161         }, {
162                 .desc           = "key24",
163                 .code           = KEY_F8,
164                 .active_low     = 1,
165         }, {
166                 .desc           = "key23",
167                 .code           = KEY_F7,
168                 .active_low     = 1,
169         }, {
170                 .desc           = "key22",
171                 .code           = KEY_F6,
172                 .active_low     = 1,
173         }, {
174                 .desc           = "key21",
175                 .code           = KEY_F5,
176                 .active_low     = 1,
177         }, {
178                 .desc           = "key14",
179                 .code           = KEY_F4,
180                 .active_low     = 1,
181         }, {
182                 .desc           = "key13",
183                 .code           = KEY_F3,
184                 .active_low     = 1,
185         }, {
186                 .desc           = "key12",
187                 .code           = KEY_F2,
188                 .active_low     = 1,
189         }, {
190                 .desc           = "key11",
191                 .code           = KEY_F1,
192                 .active_low     = 1,
193         },
194 };
195
196 static struct gpio_keys_platform_data baseboard_buttons_data = {
197         .buttons        = baseboard_buttons,
198         .nbuttons       = ARRAY_SIZE(baseboard_buttons),
199 };
200
201 static struct platform_device baseboard_buttons_device = {
202         .name           = "gpio-keys",
203         .id             = -1,
204         .dev            = {
205                 .platform_data  = &baseboard_buttons_data,
206         },
207 };
208
209 static struct platform_device *x3proto_devices[] __initdata = {
210         &heartbeat_device,
211         &smc91x_device,
212         &r8a66597_usb_host_device,
213         &m66592_usb_peripheral_device,
214         &baseboard_buttons_device,
215 };
216
217 static void __init x3proto_init_irq(void)
218 {
219         plat_irq_setup_pins(IRQ_MODE_IRL3210);
220
221         /* Set ICR0.LVLMODE */
222         __raw_writel(__raw_readl(0xfe410000) | (1 << 21), 0xfe410000);
223 }
224
225 static int __init x3proto_devices_setup(void)
226 {
227         int ret, i;
228
229         /*
230          * IRLs are only needed for ILSEL mappings, so flip over the INTC
231          * pins at a later point to enable the GPIOs to settle.
232          */
233         x3proto_init_irq();
234
235         /*
236          * Now that ILSELs are available, set up the baseboard GPIOs.
237          */
238         ret = x3proto_gpio_setup();
239         if (unlikely(ret))
240                 return ret;
241
242         /*
243          * Propagate dynamic GPIOs for the baseboard button device.
244          */
245         for (i = 0; i < ARRAY_SIZE(baseboard_buttons); i++)
246                 baseboard_buttons[i].gpio = x3proto_gpio_chip.base + i;
247
248         r8a66597_usb_host_resources[1].start =
249                 r8a66597_usb_host_resources[1].end = ilsel_enable(ILSEL_USBH_I);
250
251         m66592_usb_peripheral_resources[1].start =
252                 m66592_usb_peripheral_resources[1].end = ilsel_enable(ILSEL_USBP_I);
253
254         smc91x_resources[1].start =
255                 smc91x_resources[1].end = ilsel_enable(ILSEL_LAN);
256
257         return platform_add_devices(x3proto_devices,
258                                     ARRAY_SIZE(x3proto_devices));
259 }
260 device_initcall(x3proto_devices_setup);
261
262 static void __init x3proto_setup(char **cmdline_p)
263 {
264         register_smp_ops(&shx3_smp_ops);
265 }
266
267 static struct sh_machine_vector mv_x3proto __initmv = {
268         .mv_name                = "x3proto",
269         .mv_setup               = x3proto_setup,
270 };