ARM: S3C2416: Add basic clock support
[linux-2.6-block.git] / arch / arm / mach-s3c2416 / mach-smdk2416.c
CommitLineData
d2413147
YK
1/* linux/arch/arm/mach-s3c2416/mach-hanlin_v3c.c
2 *
3 * Copyright (c) 2009 Yauhen Kharuzhy <jekhor@gmail.com>,
4 * as part of OpenInkpot project
5 * Copyright (c) 2009 Promwad Innovation Company
6 * Yauhen Kharuzhy <yauhen.kharuzhy@promwad.com>
7 *
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License version 2 as
10 * published by the Free Software Foundation.
11 *
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/serial_core.h>
21#include <linux/platform_device.h>
22#include <linux/io.h>
23#include <linux/mtd/partitions.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/irq.h>
31#include <asm/mach-types.h>
32
33#include <plat/regs-serial.h>
34#include <mach/regs-gpio.h>
35#include <mach/regs-lcd.h>
36
37#include <mach/idle.h>
38#include <mach/fb.h>
39#include <mach/leds-gpio.h>
40#include <plat/iic.h>
41
42#include <plat/s3c2416.h>
43#include <plat/clock.h>
44#include <plat/devs.h>
45#include <plat/cpu.h>
46#include <plat/nand.h>
47
48#include <plat/common-smdk.h>
49
50static struct map_desc smdk2416_iodesc[] __initdata = {
51 /* ISA IO Space map (memory space selected by A24) */
52
53 {
54 .virtual = (u32)S3C24XX_VA_ISA_WORD,
55 .pfn = __phys_to_pfn(S3C2410_CS2),
56 .length = 0x10000,
57 .type = MT_DEVICE,
58 }, {
59 .virtual = (u32)S3C24XX_VA_ISA_WORD + 0x10000,
60 .pfn = __phys_to_pfn(S3C2410_CS2 + (1<<24)),
61 .length = SZ_4M,
62 .type = MT_DEVICE,
63 }, {
64 .virtual = (u32)S3C24XX_VA_ISA_BYTE,
65 .pfn = __phys_to_pfn(S3C2410_CS2),
66 .length = 0x10000,
67 .type = MT_DEVICE,
68 }, {
69 .virtual = (u32)S3C24XX_VA_ISA_BYTE + 0x10000,
70 .pfn = __phys_to_pfn(S3C2410_CS2 + (1<<24)),
71 .length = SZ_4M,
72 .type = MT_DEVICE,
73 }
74};
75
76#define UCON (S3C2410_UCON_DEFAULT | \
77 S3C2440_UCON_PCLK | \
78 S3C2443_UCON_RXERR_IRQEN)
79
80#define ULCON (S3C2410_LCON_CS8 | S3C2410_LCON_PNONE)
81
82#define UFCON (S3C2410_UFCON_RXTRIG8 | \
83 S3C2410_UFCON_FIFOMODE | \
84 S3C2440_UFCON_TXTRIG16)
85
86static struct s3c2410_uartcfg smdk2416_uartcfgs[] __initdata = {
87 [0] = {
88 .hwport = 0,
89 .flags = 0,
90 .ucon = UCON,
91 .ulcon = ULCON,
92 .ufcon = UFCON,
93 },
94 [1] = {
95 .hwport = 1,
96 .flags = 0,
97 .ucon = UCON,
98 .ulcon = ULCON,
99 .ufcon = UFCON,
100 },
101 /* IR port */
102 [2] = {
103 .hwport = 2,
104 .flags = 0,
105 .ucon = UCON,
106 .ulcon = ULCON | 0x50,
107 .ufcon = UFCON,
108 }
109};
110
111static struct platform_device *smdk2416_devices[] __initdata = {
112 &s3c_device_wdt,
113 &s3c_device_i2c0,
114 &s3c_device_hsmmc0,
115};
116
117static void __init smdk2416_map_io(void)
118{
119
120 s3c24xx_init_io(smdk2416_iodesc, ARRAY_SIZE(smdk2416_iodesc));
121 s3c24xx_init_clocks(12000000);
122 s3c24xx_init_uarts(smdk2416_uartcfgs, ARRAY_SIZE(smdk2416_uartcfgs));
123
124}
125
126static void __init smdk2416_machine_init(void)
127{
128 s3c_i2c0_set_platdata(NULL);
129
130 platform_add_devices(smdk2416_devices, ARRAY_SIZE(smdk2416_devices));
131 smdk_machine_init();
132}
133
134MACHINE_START(SMDK2416, "SMDK2416")
135 /* Maintainer: Yauhen Kharuzhy <jekhor@gmail.com> */
136 .phys_io = S3C2410_PA_UART,
137 .io_pg_offst = (((u32)S3C24XX_VA_UART) >> 18) & 0xfffc,
138 .boot_params = S3C2410_SDRAM_PA + 0x100,
139
140 .init_irq = s3c24xx_init_irq,
141 .map_io = smdk2416_map_io,
142 .init_machine = smdk2416_machine_init,
143 .timer = &s3c24xx_timer,
144MACHINE_END