Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
arch
arm
mach-s3c24xx
s3c2416.c
Go to the documentation of this file.
1
/* linux/arch/arm/mach-s3c2416/s3c2416.c
2
*
3
* Copyright (c) 2009 Yauhen Kharuzhy <
[email protected]
>,
4
* as part of OpenInkpot project
5
* Copyright (c) 2009 Promwad Innovation Company
6
* Yauhen Kharuzhy <
[email protected]
>
7
*
8
* Samsung S3C2416 Mobile CPU support
9
*
10
* This program is free software; you can redistribute it and/or modify
11
* it under the terms of the GNU General Public License as published by
12
* the Free Software Foundation; either version 2 of the License, or
13
* (at your option) any later version.
14
*
15
* This program is distributed in the hope that it will be useful,
16
* but WITHOUT ANY WARRANTY; without even the implied warranty of
17
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18
* GNU General Public License for more details.
19
*
20
* You should have received a copy of the GNU General Public License
21
* along with this program; if not, write to the Free Software
22
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
23
*/
24
25
#include <linux/kernel.h>
26
#include <linux/types.h>
27
#include <
linux/interrupt.h
>
28
#include <linux/list.h>
29
#include <
linux/timer.h
>
30
#include <
linux/init.h
>
31
#include <
linux/gpio.h
>
32
#include <
linux/platform_device.h
>
33
#include <linux/serial_core.h>
34
#include <linux/device.h>
35
#include <
linux/syscore_ops.h
>
36
#include <
linux/clk.h
>
37
#include <
linux/io.h
>
38
39
#include <
asm/mach/arch.h
>
40
#include <
asm/mach/map.h
>
41
#include <
asm/mach/irq.h
>
42
43
#include <mach/hardware.h>
44
#include <asm/proc-fns.h>
45
#include <asm/irq.h>
46
#include <asm/system_misc.h>
47
48
#include <
mach/regs-s3c2443-clock.h
>
49
50
#include <
plat/gpio-core.h
>
51
#include <
plat/gpio-cfg.h
>
52
#include <
plat/gpio-cfg-helpers.h
>
53
#include <
plat/s3c2416.h
>
54
#include <
plat/devs.h
>
55
#include <plat/cpu.h>
56
#include <
plat/sdhci.h
>
57
#include <
plat/pm.h
>
58
59
#include <
plat/iic-core.h
>
60
#include <
plat/fb-core.h
>
61
#include <
plat/nand-core.h
>
62
#include <
plat/adc-core.h
>
63
#include <
plat/rtc-core.h
>
64
#include <
plat/spi-core.h
>
65
66
static
struct
map_desc
s3c2416_iodesc[]
__initdata
= {
67
IODESC_ENT
(
WATCHDOG
),
68
IODESC_ENT
(CLKPWR),
69
IODESC_ENT
(
TIMER
),
70
};
71
72
struct
bus_type
s3c2416_subsys
= {
73
.name =
"s3c2416-core"
,
74
.dev_name =
"s3c2416-core"
,
75
};
76
77
static
struct
device
s3c2416_dev = {
78
.bus = &
s3c2416_subsys
,
79
};
80
81
void
s3c2416_restart
(
char
mode
,
const
char
*
cmd
)
82
{
83
if
(mode ==
's'
)
84
soft_restart
(0);
85
86
__raw_writel
(
S3C2443_SWRST_RESET
,
S3C2443_SWRST
);
87
}
88
89
int
__init
s3c2416_init
(
void
)
90
{
91
printk
(
KERN_INFO
"S3C2416: Initializing architecture\n"
);
92
93
/* change WDT IRQ number */
94
s3c_device_wdt
.resource[1].start =
IRQ_S3C2443_WDT
;
95
s3c_device_wdt
.resource[1].end =
IRQ_S3C2443_WDT
;
96
97
/* the i2c devices are directly compatible with s3c2440 */
98
s3c_i2c0_setname(
"s3c2440-i2c"
);
99
s3c_i2c1_setname(
"s3c2440-i2c"
);
100
101
s3c_fb_setname(
"s3c2443-fb"
);
102
103
s3c_adc_setname(
"s3c2416-adc"
);
104
s3c_rtc_setname(
"s3c2416-rtc"
);
105
106
#ifdef CONFIG_PM
107
register_syscore_ops
(&
s3c2416_pm_syscore_ops
);
108
#endif
109
register_syscore_ops
(&
s3c24xx_irq_syscore_ops
);
110
register_syscore_ops
(&s3c2416_irq_syscore_ops);
111
112
return
device_register
(&s3c2416_dev);
113
}
114
115
void
__init
s3c2416_init_uarts
(
struct
s3c2410_uartcfg
*
cfg
,
int
no
)
116
{
117
s3c24xx_init_uartdevs
(
"s3c2440-uart"
,
s3c2410_uart_resources
, cfg, no);
118
119
s3c_nand_setname(
"s3c2412-nand"
);
120
}
121
122
/* s3c2416_map_io
123
*
124
* register the standard cpu IO areas, and any passed in from the
125
* machine specific initialisation.
126
*/
127
128
void
__init
s3c2416_map_io
(
void
)
129
{
130
s3c24xx_gpiocfg_default
.set_pull =
samsung_gpio_setpull_updown
;
131
s3c24xx_gpiocfg_default
.get_pull =
samsung_gpio_getpull_updown
;
132
133
/* initialize device information early */
134
s3c2416_default_sdhci0();
135
s3c2416_default_sdhci1();
136
s3c64xx_spi_setname(
"s3c2443-spi"
);
137
138
iotable_init
(s3c2416_iodesc,
ARRAY_SIZE
(s3c2416_iodesc));
139
}
140
141
/* need to register the subsystem before we actually register the device, and
142
* we also need to ensure that it has been initialised before any of the
143
* drivers even try to use it (even if not on an s3c2416 based system)
144
* as a driver which may support both 2443 and 2440 may try and use it.
145
*/
146
147
static
int
__init
s3c2416_core_init(
void
)
148
{
149
return
subsys_system_register
(&s3c2416_subsys,
NULL
);
150
}
151
152
core_initcall
(s3c2416_core_init);
Generated on Thu Jan 10 2013 13:01:37 for Linux Kernel by
1.8.2