blob: 2358ed5ed7be23c66f9f47a8171102b20ce6dbdd [file] [log] [blame]
Krzysztof Kozlowski84b21702017-12-25 20:54:32 +01001// SPDX-License-Identifier: GPL-2.0
2//
3// Copyright (c) 2007 Simtec Electronics
4// Ben Dooks <ben@simtec.co.uk>
5//
6// http://www.fluff.org/ben/smdk2443/
7//
8// Thanks to Samsung for the loan of an SMDK2443
Ben Dooks285f4932007-02-15 16:48:58 +01009
10#include <linux/kernel.h>
11#include <linux/types.h>
12#include <linux/interrupt.h>
13#include <linux/list.h>
14#include <linux/timer.h>
15#include <linux/init.h>
16#include <linux/serial_core.h>
Tushar Behera334a1c72014-02-14 10:32:45 +090017#include <linux/serial_s3c.h>
Ben Dooks285f4932007-02-15 16:48:58 +010018#include <linux/platform_device.h>
Russell Kingfced80c2008-09-06 12:10:45 +010019#include <linux/io.h>
Ben Dooks285f4932007-02-15 16:48:58 +010020
21#include <asm/mach/arch.h>
22#include <asm/mach/map.h>
23#include <asm/mach/irq.h>
24
Russell Kinga09e64f2008-08-05 16:14:15 +010025#include <mach/hardware.h>
Ben Dooks285f4932007-02-15 16:48:58 +010026#include <asm/irq.h>
27#include <asm/mach-types.h>
28
Russell Kinga09e64f2008-08-05 16:14:15 +010029#include <mach/regs-gpio.h>
30#include <mach/regs-lcd.h>
Ben Dooks285f4932007-02-15 16:48:58 +010031
Russell Kinga09e64f2008-08-05 16:14:15 +010032#include <mach/fb.h>
Arnd Bergmann436d42c2012-08-24 15:22:12 +020033#include <linux/platform_data/i2c-s3c2410.h>
Ben Dooks285f4932007-02-15 16:48:58 +010034
Ben Dooksa2b7ba92008-10-07 22:26:09 +010035#include <plat/devs.h>
36#include <plat/cpu.h>
Romain Naour7f78b6e2013-01-09 18:47:04 -080037#include <plat/samsung-time.h>
Ben Dooks285f4932007-02-15 16:48:58 +010038
Heiko Stuebnere1a621d2013-02-08 10:31:28 -080039#include "common.h"
Kukjin Kim4d512a92013-02-08 10:18:48 -080040#include "common-smdk.h"
Ben Dooks285f4932007-02-15 16:48:58 +010041
42static struct map_desc smdk2443_iodesc[] __initdata = {
43 /* ISA IO Space map (memory space selected by A24) */
44
45 {
46 .virtual = (u32)S3C24XX_VA_ISA_WORD,
47 .pfn = __phys_to_pfn(S3C2410_CS2),
48 .length = 0x10000,
49 .type = MT_DEVICE,
50 }, {
51 .virtual = (u32)S3C24XX_VA_ISA_WORD + 0x10000,
52 .pfn = __phys_to_pfn(S3C2410_CS2 + (1<<24)),
53 .length = SZ_4M,
54 .type = MT_DEVICE,
55 }, {
56 .virtual = (u32)S3C24XX_VA_ISA_BYTE,
57 .pfn = __phys_to_pfn(S3C2410_CS2),
58 .length = 0x10000,
59 .type = MT_DEVICE,
60 }, {
61 .virtual = (u32)S3C24XX_VA_ISA_BYTE + 0x10000,
62 .pfn = __phys_to_pfn(S3C2410_CS2 + (1<<24)),
63 .length = SZ_4M,
64 .type = MT_DEVICE,
65 }
66};
67
68#define UCON S3C2410_UCON_DEFAULT | S3C2410_UCON_UCLK
69#define ULCON S3C2410_LCON_CS8 | S3C2410_LCON_PNONE | S3C2410_LCON_STOPB
70#define UFCON S3C2410_UFCON_RXTRIG8 | S3C2410_UFCON_FIFOMODE
71
72static struct s3c2410_uartcfg smdk2443_uartcfgs[] __initdata = {
73 [0] = {
74 .hwport = 0,
75 .flags = 0,
76 .ucon = 0x3c5,
77 .ulcon = 0x03,
78 .ufcon = 0x51,
79 },
80 [1] = {
81 .hwport = 1,
82 .flags = 0,
83 .ucon = 0x3c5,
84 .ulcon = 0x03,
85 .ufcon = 0x51,
86 },
87 /* IR port */
88 [2] = {
89 .hwport = 2,
90 .flags = 0,
91 .ucon = 0x3c5,
92 .ulcon = 0x43,
93 .ufcon = 0x51,
Abhilash Kesavan13d27f02010-09-16 09:47:30 +053094 },
95 [3] = {
96 .hwport = 3,
97 .flags = 0,
98 .ucon = 0x3c5,
99 .ulcon = 0x03,
100 .ufcon = 0x51,
Ben Dooks285f4932007-02-15 16:48:58 +0100101 }
102};
103
104static struct platform_device *smdk2443_devices[] __initdata = {
105 &s3c_device_wdt,
Ben Dooks3e1b7762008-10-31 16:14:40 +0000106 &s3c_device_i2c0,
Yauhen Kharuzhy95d67912011-01-06 13:04:33 +0900107 &s3c_device_hsmmc1,
Heiko Stuebnerf2dda072013-10-08 06:42:10 +0900108 &s3c2443_device_dma,
Ben Dooks285f4932007-02-15 16:48:58 +0100109};
110
Ben Dooks285f4932007-02-15 16:48:58 +0100111static void __init smdk2443_map_io(void)
112{
113 s3c24xx_init_io(smdk2443_iodesc, ARRAY_SIZE(smdk2443_iodesc));
Ben Dooks285f4932007-02-15 16:48:58 +0100114 s3c24xx_init_uarts(smdk2443_uartcfgs, ARRAY_SIZE(smdk2443_uartcfgs));
Romain Naour7f78b6e2013-01-09 18:47:04 -0800115 samsung_set_timer_source(SAMSUNG_PWM3, SAMSUNG_PWM4);
Ben Dooks285f4932007-02-15 16:48:58 +0100116}
117
Heiko Stuebnerdfc0f502014-02-19 09:26:21 +0900118static void __init smdk2443_init_time(void)
119{
120 s3c2443_init_clocks(12000000);
121 samsung_timer_init();
122}
123
Ben Dooks285f4932007-02-15 16:48:58 +0100124static void __init smdk2443_machine_init(void)
125{
Ben Dooks3e1b7762008-10-31 16:14:40 +0000126 s3c_i2c0_set_platdata(NULL);
Ben Dooks57e51712007-04-20 11:19:16 +0100127 platform_add_devices(smdk2443_devices, ARRAY_SIZE(smdk2443_devices));
Ben Dooks285f4932007-02-15 16:48:58 +0100128 smdk_machine_init();
129}
130
131MACHINE_START(SMDK2443, "SMDK2443")
Ben Dooksafdd2252010-05-07 09:24:05 +0900132 /* Maintainer: Ben Dooks <ben-linux@fluff.org> */
Nicolas Pitre69d50712011-07-05 22:38:17 -0400133 .atag_offset = 0x100,
Ben Dooks285f4932007-02-15 16:48:58 +0100134
Heiko Stuebnerb499b7a2013-01-29 10:25:23 -0800135 .init_irq = s3c2443_init_irq,
Ben Dooks285f4932007-02-15 16:48:58 +0100136 .map_io = smdk2443_map_io,
137 .init_machine = smdk2443_machine_init,
Heiko Stuebnerdfc0f502014-02-19 09:26:21 +0900138 .init_time = smdk2443_init_time,
Ben Dooks285f4932007-02-15 16:48:58 +0100139MACHINE_END