• Home
  • History
  • Annotate
  • Line#
  • Navigate
  • Raw
  • Download
  • only in /asuswrt-rt-n18u-9.0.0.4.380.2695/release/src-rt-6.x.4708/linux/linux-2.6.36/arch/arm/mach-s3c2412/
1/* linux/arch/arm/mach-s3c2412/mach-smdk2413.c
2 *
3 * Copyright (c) 2006 Simtec Electronics
4 *	Ben Dooks <ben@simtec.co.uk>
5 *
6 * Thanks to Dimity Andric (TomTom) and Steven Ryu (Samsung) for the
7 * loans of SMDK2413 to work with.
8 *
9 * This program is free software; you can redistribute it and/or modify
10 * it under the terms of the GNU General Public License version 2 as
11 * published by the Free Software Foundation.
12*/
13
14#include <linux/kernel.h>
15#include <linux/types.h>
16#include <linux/interrupt.h>
17#include <linux/list.h>
18#include <linux/timer.h>
19#include <linux/init.h>
20#include <linux/gpio.h>
21#include <linux/serial_core.h>
22#include <linux/platform_device.h>
23#include <linux/io.h>
24
25#include <asm/mach/arch.h>
26#include <asm/mach/map.h>
27#include <asm/mach/irq.h>
28
29#include <mach/hardware.h>
30#include <asm/hardware/iomd.h>
31#include <asm/setup.h>
32#include <asm/irq.h>
33#include <asm/mach-types.h>
34
35//#include <asm/debug-ll.h>
36#include <plat/regs-serial.h>
37#include <mach/regs-gpio.h>
38#include <mach/regs-lcd.h>
39
40#include <mach/idle.h>
41#include <plat/udc.h>
42#include <plat/iic.h>
43#include <mach/fb.h>
44
45#include <plat/s3c2410.h>
46#include <plat/s3c2412.h>
47#include <plat/clock.h>
48#include <plat/devs.h>
49#include <plat/cpu.h>
50
51#include <plat/common-smdk.h>
52
53static struct map_desc smdk2413_iodesc[] __initdata = {
54};
55
56static struct s3c2410_uartcfg smdk2413_uartcfgs[] __initdata = {
57	[0] = {
58		.hwport	     = 0,
59		.flags	     = 0,
60		.ucon	     = 0x3c5,
61		.ulcon	     = 0x03,
62		.ufcon	     = 0x51,
63	},
64	[1] = {
65		.hwport	     = 1,
66		.flags	     = 0,
67		.ucon	     = 0x3c5,
68		.ulcon	     = 0x03,
69		.ufcon	     = 0x51,
70	},
71	/* IR port */
72	[2] = {
73		.hwport	     = 2,
74		.flags	     = 0,
75		.ucon	     = 0x3c5,
76		.ulcon	     = 0x43,
77		.ufcon	     = 0x51,
78	}
79};
80
81static void smdk2413_udc_pullup(enum s3c2410_udc_cmd_e cmd)
82{
83	printk(KERN_DEBUG "udc: pullup(%d)\n",cmd);
84
85	switch (cmd)
86	{
87		case S3C2410_UDC_P_ENABLE :
88			gpio_set_value(S3C2410_GPF(2), 1);
89			break;
90		case S3C2410_UDC_P_DISABLE :
91			gpio_set_value(S3C2410_GPF(2), 0);
92			break;
93		case S3C2410_UDC_P_RESET :
94			break;
95		default:
96			break;
97	}
98}
99
100
101static struct s3c2410_udc_mach_info smdk2413_udc_cfg __initdata = {
102	.udc_command		= smdk2413_udc_pullup,
103};
104
105
106static struct platform_device *smdk2413_devices[] __initdata = {
107	&s3c_device_ohci,
108	&s3c_device_wdt,
109	&s3c_device_i2c0,
110	&s3c_device_iis,
111	&s3c_device_usbgadget,
112};
113
114static void __init smdk2413_fixup(struct machine_desc *desc,
115				  struct tag *tags, char **cmdline,
116				  struct meminfo *mi)
117{
118	if (tags != phys_to_virt(S3C2410_SDRAM_PA + 0x100)) {
119		mi->nr_banks=1;
120		mi->bank[0].start = 0x30000000;
121		mi->bank[0].size = SZ_64M;
122	}
123}
124
125static void __init smdk2413_map_io(void)
126{
127	s3c24xx_init_io(smdk2413_iodesc, ARRAY_SIZE(smdk2413_iodesc));
128	s3c24xx_init_clocks(12000000);
129	s3c24xx_init_uarts(smdk2413_uartcfgs, ARRAY_SIZE(smdk2413_uartcfgs));
130}
131
132static void __init smdk2413_machine_init(void)
133{	/* Turn off suspend on both USB ports, and switch the
134	 * selectable USB port to USB device mode. */
135
136	WARN_ON(gpio_request(S3C2410_GPF(2), "udc pull"));
137	gpio_direction_output(S3C2410_GPF(2), 0);
138
139	s3c2410_modify_misccr(S3C2410_MISCCR_USBHOST |
140			      S3C2410_MISCCR_USBSUSPND0 |
141			      S3C2410_MISCCR_USBSUSPND1, 0x0);
142
143
144 	s3c24xx_udc_set_platdata(&smdk2413_udc_cfg);
145	s3c_i2c0_set_platdata(NULL);
146
147	platform_add_devices(smdk2413_devices, ARRAY_SIZE(smdk2413_devices));
148	smdk_machine_init();
149}
150
151MACHINE_START(S3C2413, "S3C2413")
152	/* Maintainer: Ben Dooks <ben-linux@fluff.org> */
153	.phys_io	= S3C2410_PA_UART,
154	.io_pg_offst	= (((u32)S3C24XX_VA_UART) >> 18) & 0xfffc,
155	.boot_params	= S3C2410_SDRAM_PA + 0x100,
156
157	.fixup		= smdk2413_fixup,
158	.init_irq	= s3c24xx_init_irq,
159	.map_io		= smdk2413_map_io,
160	.init_machine	= smdk2413_machine_init,
161	.timer		= &s3c24xx_timer,
162MACHINE_END
163
164MACHINE_START(SMDK2412, "SMDK2412")
165	/* Maintainer: Ben Dooks <ben-linux@fluff.org> */
166	.phys_io	= S3C2410_PA_UART,
167	.io_pg_offst	= (((u32)S3C24XX_VA_UART) >> 18) & 0xfffc,
168	.boot_params	= S3C2410_SDRAM_PA + 0x100,
169
170	.fixup		= smdk2413_fixup,
171	.init_irq	= s3c24xx_init_irq,
172	.map_io		= smdk2413_map_io,
173	.init_machine	= smdk2413_machine_init,
174	.timer		= &s3c24xx_timer,
175MACHINE_END
176
177MACHINE_START(SMDK2413, "SMDK2413")
178	/* Maintainer: Ben Dooks <ben-linux@fluff.org> */
179	.phys_io	= S3C2410_PA_UART,
180	.io_pg_offst	= (((u32)S3C24XX_VA_UART) >> 18) & 0xfffc,
181	.boot_params	= S3C2410_SDRAM_PA + 0x100,
182
183	.fixup		= smdk2413_fixup,
184	.init_irq	= s3c24xx_init_irq,
185	.map_io		= smdk2413_map_io,
186	.init_machine	= smdk2413_machine_init,
187	.timer		= &s3c24xx_timer,
188MACHINE_END
189