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
pm-s3c2412.c
Go to the documentation of this file.
1
/* linux/arch/arm/mach-s3c2412/pm.c
2
*
3
* Copyright (c) 2006 Simtec Electronics
4
* Ben Dooks <
[email protected]
>
5
*
6
* http://armlinux.simtec.co.uk/.
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
#include <linux/kernel.h>
14
#include <linux/types.h>
15
#include <
linux/interrupt.h
>
16
#include <linux/list.h>
17
#include <
linux/timer.h
>
18
#include <
linux/init.h
>
19
#include <linux/device.h>
20
#include <
linux/syscore_ops.h
>
21
#include <
linux/platform_device.h
>
22
#include <
linux/io.h
>
23
24
#include <mach/hardware.h>
25
#include <asm/cacheflush.h>
26
#include <asm/irq.h>
27
28
#include <
mach/regs-power.h
>
29
#include <mach/regs-gpio.h>
30
#include <
mach/regs-dsc.h
>
31
32
#include <plat/cpu.h>
33
#include <
plat/pm.h
>
34
35
#include <
plat/s3c2412.h
>
36
37
extern
void
s3c2412_sleep_enter
(
void
);
38
39
static
int
s3c2412_cpu_suspend(
unsigned
long
arg
)
40
{
41
unsigned
long
tmp
;
42
43
/* set our standby method to sleep */
44
45
tmp =
__raw_readl
(
S3C2412_PWRCFG
);
46
tmp |=
S3C2412_PWRCFG_STANDBYWFI_SLEEP
;
47
__raw_writel
(tmp,
S3C2412_PWRCFG
);
48
49
s3c2412_sleep_enter
();
50
51
panic
(
"sleep resumed to originator?"
);
52
}
53
54
static
void
s3c2412_pm_prepare(
void
)
55
{
56
}
57
58
static
int
s3c2412_pm_add(
struct
device
*
dev
,
struct
subsys_interface
*sif)
59
{
60
pm_cpu_prep
= s3c2412_pm_prepare;
61
pm_cpu_sleep
= s3c2412_cpu_suspend;
62
63
return
0;
64
}
65
66
static
struct
sleep_save
s3c2412_sleep[] = {
67
SAVE_ITEM
(S3C2412_DSC0),
68
SAVE_ITEM
(S3C2412_DSC1),
69
SAVE_ITEM
(
S3C2413_GPJDAT
),
70
SAVE_ITEM
(
S3C2413_GPJCON
),
71
SAVE_ITEM
(
S3C2413_GPJUP
),
72
73
/* save the PWRCFG to get back to original sleep method */
74
75
SAVE_ITEM
(
S3C2412_PWRCFG
),
76
77
/* save the sleep configuration anyway, just in case these
78
* get damaged during wakeup */
79
80
SAVE_ITEM
(
S3C2412_GPBSLPCON
),
81
SAVE_ITEM
(
S3C2412_GPCSLPCON
),
82
SAVE_ITEM
(
S3C2412_GPDSLPCON
),
83
SAVE_ITEM
(
S3C2412_GPFSLPCON
),
84
SAVE_ITEM
(
S3C2412_GPGSLPCON
),
85
SAVE_ITEM
(
S3C2412_GPHSLPCON
),
86
SAVE_ITEM
(
S3C2413_GPJSLPCON
),
87
};
88
89
static
struct
subsys_interface
s3c2412_pm_interface = {
90
.name =
"s3c2412_pm"
,
91
.subsys = &
s3c2412_subsys
,
92
.add_dev = s3c2412_pm_add,
93
};
94
95
static
__init
int
s3c2412_pm_init(
void
)
96
{
97
return
subsys_interface_register
(&s3c2412_pm_interface);
98
}
99
100
arch_initcall
(s3c2412_pm_init);
101
102
static
int
s3c2412_pm_suspend(
void
)
103
{
104
s3c_pm_do_save
(s3c2412_sleep,
ARRAY_SIZE
(s3c2412_sleep));
105
return
0;
106
}
107
108
static
void
s3c2412_pm_resume(
void
)
109
{
110
unsigned
long
tmp
;
111
112
tmp =
__raw_readl
(
S3C2412_PWRCFG
);
113
tmp &= ~
S3C2412_PWRCFG_STANDBYWFI_MASK
;
114
tmp |=
S3C2412_PWRCFG_STANDBYWFI_IDLE
;
115
__raw_writel
(tmp,
S3C2412_PWRCFG
);
116
117
s3c_pm_do_restore
(s3c2412_sleep,
ARRAY_SIZE
(s3c2412_sleep));
118
}
119
120
struct
syscore_ops
s3c2412_pm_syscore_ops
= {
121
.suspend = s3c2412_pm_suspend,
122
.resume = s3c2412_pm_resume,
123
};
Generated on Thu Jan 10 2013 13:01:36 for Linux Kernel by
1.8.2