diff options
Diffstat (limited to 'arch/arm/mach-shmobile/board-g3evm.c')
-rw-r--r-- | arch/arm/mach-shmobile/board-g3evm.c | 59 |
1 files changed, 50 insertions, 9 deletions
diff --git a/arch/arm/mach-shmobile/board-g3evm.c b/arch/arm/mach-shmobile/board-g3evm.c index 9247503296c4..a5525901e91f 100644 --- a/arch/arm/mach-shmobile/board-g3evm.c +++ b/arch/arm/mach-shmobile/board-g3evm.c | |||
@@ -37,6 +37,15 @@ | |||
37 | #include <asm/mach-types.h> | 37 | #include <asm/mach-types.h> |
38 | #include <asm/mach/arch.h> | 38 | #include <asm/mach/arch.h> |
39 | #include <asm/mach/map.h> | 39 | #include <asm/mach/map.h> |
40 | #include <asm/mach/time.h> | ||
41 | |||
42 | /* | ||
43 | * IrDA | ||
44 | * | ||
45 | * S67: 5bit : ON power | ||
46 | * : 6bit : ON remote control | ||
47 | * OFF IrDA | ||
48 | */ | ||
40 | 49 | ||
41 | static struct mtd_partition nor_flash_partitions[] = { | 50 | static struct mtd_partition nor_flash_partitions[] = { |
42 | { | 51 | { |
@@ -91,7 +100,7 @@ static struct platform_device nor_flash_device = { | |||
91 | }; | 100 | }; |
92 | 101 | ||
93 | /* USBHS */ | 102 | /* USBHS */ |
94 | void usb_host_port_power(int port, int power) | 103 | static void usb_host_port_power(int port, int power) |
95 | { | 104 | { |
96 | if (!power) /* only power-on supported for now */ | 105 | if (!power) /* only power-on supported for now */ |
97 | return; | 106 | return; |
@@ -113,7 +122,7 @@ static struct resource usb_host_resources[] = { | |||
113 | .flags = IORESOURCE_MEM, | 122 | .flags = IORESOURCE_MEM, |
114 | }, | 123 | }, |
115 | [1] = { | 124 | [1] = { |
116 | .start = 65, | 125 | .start = evt2irq(0xa20), /* USBHS_USHI0 */ |
117 | .flags = IORESOURCE_IRQ, | 126 | .flags = IORESOURCE_IRQ, |
118 | }, | 127 | }, |
119 | }; | 128 | }; |
@@ -153,7 +162,7 @@ static struct resource keysc_resources[] = { | |||
153 | .flags = IORESOURCE_MEM, | 162 | .flags = IORESOURCE_MEM, |
154 | }, | 163 | }, |
155 | [1] = { | 164 | [1] = { |
156 | .start = 79, | 165 | .start = evt2irq(0xbe0), /* KEYSC_KEY */ |
157 | .flags = IORESOURCE_IRQ, | 166 | .flags = IORESOURCE_IRQ, |
158 | }, | 167 | }, |
159 | }; | 168 | }; |
@@ -209,11 +218,31 @@ static struct platform_device nand_flash_device = { | |||
209 | }, | 218 | }, |
210 | }; | 219 | }; |
211 | 220 | ||
221 | static struct resource irda_resources[] = { | ||
222 | [0] = { | ||
223 | .start = 0xE6D00000, | ||
224 | .end = 0xE6D01FD4 - 1, | ||
225 | .flags = IORESOURCE_MEM, | ||
226 | }, | ||
227 | [1] = { | ||
228 | .start = evt2irq(0x480), /* IRDA */ | ||
229 | .flags = IORESOURCE_IRQ, | ||
230 | }, | ||
231 | }; | ||
232 | |||
233 | static struct platform_device irda_device = { | ||
234 | .name = "sh_irda", | ||
235 | .id = -1, | ||
236 | .resource = irda_resources, | ||
237 | .num_resources = ARRAY_SIZE(irda_resources), | ||
238 | }; | ||
239 | |||
212 | static struct platform_device *g3evm_devices[] __initdata = { | 240 | static struct platform_device *g3evm_devices[] __initdata = { |
213 | &nor_flash_device, | 241 | &nor_flash_device, |
214 | &usb_host_device, | 242 | &usb_host_device, |
215 | &keysc_device, | 243 | &keysc_device, |
216 | &nand_flash_device, | 244 | &nand_flash_device, |
245 | &irda_device, | ||
217 | }; | 246 | }; |
218 | 247 | ||
219 | static struct map_desc g3evm_io_desc[] __initdata = { | 248 | static struct map_desc g3evm_io_desc[] __initdata = { |
@@ -232,9 +261,8 @@ static void __init g3evm_map_io(void) | |||
232 | { | 261 | { |
233 | iotable_init(g3evm_io_desc, ARRAY_SIZE(g3evm_io_desc)); | 262 | iotable_init(g3evm_io_desc, ARRAY_SIZE(g3evm_io_desc)); |
234 | 263 | ||
235 | /* setup early devices, clocks and console here as well */ | 264 | /* setup early devices and console here as well */ |
236 | sh7367_add_early_devices(); | 265 | sh7367_add_early_devices(); |
237 | sh7367_clock_init(); | ||
238 | shmobile_setup_console(); | 266 | shmobile_setup_console(); |
239 | } | 267 | } |
240 | 268 | ||
@@ -271,9 +299,6 @@ static void __init g3evm_init(void) | |||
271 | gpio_request(GPIO_FN_EXTLP, NULL); | 299 | gpio_request(GPIO_FN_EXTLP, NULL); |
272 | gpio_request(GPIO_FN_IDIN, NULL); | 300 | gpio_request(GPIO_FN_IDIN, NULL); |
273 | 301 | ||
274 | /* enable clock in SYMSTPCR2 */ | ||
275 | __raw_writel(__raw_readl(0xe6158048) & ~(1 << 22), 0xe6158048); | ||
276 | |||
277 | /* setup USB phy */ | 302 | /* setup USB phy */ |
278 | __raw_writew(0x0300, 0xe605810a); /* USBCR1 */ | 303 | __raw_writew(0x0300, 0xe605810a); /* USBCR1 */ |
279 | __raw_writew(0x00e0, 0xe60581c0); /* CPFCH */ | 304 | __raw_writew(0x00e0, 0xe60581c0); /* CPFCH */ |
@@ -318,16 +343,32 @@ static void __init g3evm_init(void) | |||
318 | /* FOE, FCDE, FSC on dedicated pins */ | 343 | /* FOE, FCDE, FSC on dedicated pins */ |
319 | __raw_writel(__raw_readl(0xe6158048) & ~(1 << 15), 0xe6158048); | 344 | __raw_writel(__raw_readl(0xe6158048) & ~(1 << 15), 0xe6158048); |
320 | 345 | ||
346 | /* IrDA */ | ||
347 | gpio_request(GPIO_FN_IRDA_OUT, NULL); | ||
348 | gpio_request(GPIO_FN_IRDA_IN, NULL); | ||
349 | gpio_request(GPIO_FN_IRDA_FIRSEL, NULL); | ||
350 | set_irq_type(evt2irq(0x480), IRQ_TYPE_LEVEL_LOW); | ||
351 | |||
321 | sh7367_add_standard_devices(); | 352 | sh7367_add_standard_devices(); |
322 | 353 | ||
323 | platform_add_devices(g3evm_devices, ARRAY_SIZE(g3evm_devices)); | 354 | platform_add_devices(g3evm_devices, ARRAY_SIZE(g3evm_devices)); |
324 | } | 355 | } |
325 | 356 | ||
357 | static void __init g3evm_timer_init(void) | ||
358 | { | ||
359 | sh7367_clock_init(); | ||
360 | shmobile_timer.init(); | ||
361 | } | ||
362 | |||
363 | static struct sys_timer g3evm_timer = { | ||
364 | .init = g3evm_timer_init, | ||
365 | }; | ||
366 | |||
326 | MACHINE_START(G3EVM, "g3evm") | 367 | MACHINE_START(G3EVM, "g3evm") |
327 | .phys_io = 0xe6000000, | 368 | .phys_io = 0xe6000000, |
328 | .io_pg_offst = ((0xe6000000) >> 18) & 0xfffc, | 369 | .io_pg_offst = ((0xe6000000) >> 18) & 0xfffc, |
329 | .map_io = g3evm_map_io, | 370 | .map_io = g3evm_map_io, |
330 | .init_irq = sh7367_init_irq, | 371 | .init_irq = sh7367_init_irq, |
331 | .init_machine = g3evm_init, | 372 | .init_machine = g3evm_init, |
332 | .timer = &shmobile_timer, | 373 | .timer = &g3evm_timer, |
333 | MACHINE_END | 374 | MACHINE_END |