diff options
author | Daniel Lezcano <daniel.lezcano@linaro.org> | 2013-09-26 11:34:24 -0400 |
---|---|---|
committer | Daniel Lezcano <daniel.lezcano@linaro.org> | 2013-10-16 17:49:35 -0400 |
commit | 1ce3c48e6c76920fa46bfdde84a69e155f880c32 (patch) | |
tree | 5ead3d0c9bf4b91812460748b0b48ef4d001b300 /drivers/cpuidle | |
parent | 5ad945ea58f6cab7490dc149974ccb6514cc569a (diff) |
ARM: at91: cpuidle: Move driver to drivers/cpuidle
As the cpuidle driver code has no more the dependency with the pm code, the
'standby' callback being passed as a parameter to the device's platform data,
we can move the cpuidle driver in the drivers/cpuidle directory.
Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
Acked-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
Acked-by: Nicolas Ferre <nicolas.ferre@atmel.com>
Conflicts:
drivers/cpuidle/Kconfig.arm
drivers/cpuidle/Makefile
Diffstat (limited to 'drivers/cpuidle')
-rw-r--r-- | drivers/cpuidle/Kconfig.arm | 7 | ||||
-rw-r--r-- | drivers/cpuidle/Makefile | 1 | ||||
-rw-r--r-- | drivers/cpuidle/cpuidle-at91.c | 69 |
3 files changed, 77 insertions, 0 deletions
diff --git a/drivers/cpuidle/Kconfig.arm b/drivers/cpuidle/Kconfig.arm index 6a7e6f2d8adc..f23bd75426cd 100644 --- a/drivers/cpuidle/Kconfig.arm +++ b/drivers/cpuidle/Kconfig.arm | |||
@@ -37,3 +37,10 @@ config ARM_U8500_CPUIDLE | |||
37 | depends on ARCH_U8500 | 37 | depends on ARCH_U8500 |
38 | help | 38 | help |
39 | Select this to enable cpuidle for ST-E u8500 processors | 39 | Select this to enable cpuidle for ST-E u8500 processors |
40 | |||
41 | config ARM_AT91_CPUIDLE | ||
42 | bool "Cpu Idle Driver for the AT91 processors" | ||
43 | default y | ||
44 | depends on ARCH_AT91 | ||
45 | help | ||
46 | Select this to enable cpuidle for AT91 processors | ||
diff --git a/drivers/cpuidle/Makefile b/drivers/cpuidle/Makefile index d08bd4055a49..527be28e5c1e 100644 --- a/drivers/cpuidle/Makefile +++ b/drivers/cpuidle/Makefile | |||
@@ -12,3 +12,4 @@ obj-$(CONFIG_ARM_HIGHBANK_CPUIDLE) += cpuidle-calxeda.o | |||
12 | obj-$(CONFIG_ARM_KIRKWOOD_CPUIDLE) += cpuidle-kirkwood.o | 12 | obj-$(CONFIG_ARM_KIRKWOOD_CPUIDLE) += cpuidle-kirkwood.o |
13 | obj-$(CONFIG_ARM_ZYNQ_CPUIDLE) += cpuidle-zynq.o | 13 | obj-$(CONFIG_ARM_ZYNQ_CPUIDLE) += cpuidle-zynq.o |
14 | obj-$(CONFIG_ARM_U8500_CPUIDLE) += cpuidle-ux500.o | 14 | obj-$(CONFIG_ARM_U8500_CPUIDLE) += cpuidle-ux500.o |
15 | obj-$(CONFIG_ARM_AT91_CPUIDLE) += cpuidle-at91.o | ||
diff --git a/drivers/cpuidle/cpuidle-at91.c b/drivers/cpuidle/cpuidle-at91.c new file mode 100644 index 000000000000..a0774370c6bc --- /dev/null +++ b/drivers/cpuidle/cpuidle-at91.c | |||
@@ -0,0 +1,69 @@ | |||
1 | /* | ||
2 | * based on arch/arm/mach-kirkwood/cpuidle.c | ||
3 | * | ||
4 | * CPU idle support for AT91 SoC | ||
5 | * | ||
6 | * This file is licensed under the terms of the GNU General Public | ||
7 | * License version 2. This program is licensed "as is" without any | ||
8 | * warranty of any kind, whether express or implied. | ||
9 | * | ||
10 | * The cpu idle uses wait-for-interrupt and RAM self refresh in order | ||
11 | * to implement two idle states - | ||
12 | * #1 wait-for-interrupt | ||
13 | * #2 wait-for-interrupt and RAM self refresh | ||
14 | */ | ||
15 | |||
16 | #include <linux/kernel.h> | ||
17 | #include <linux/init.h> | ||
18 | #include <linux/platform_device.h> | ||
19 | #include <linux/cpuidle.h> | ||
20 | #include <linux/io.h> | ||
21 | #include <linux/export.h> | ||
22 | #include <asm/proc-fns.h> | ||
23 | #include <asm/cpuidle.h> | ||
24 | |||
25 | #define AT91_MAX_STATES 2 | ||
26 | |||
27 | static void (*at91_standby)(void); | ||
28 | |||
29 | /* Actual code that puts the SoC in different idle states */ | ||
30 | static int at91_enter_idle(struct cpuidle_device *dev, | ||
31 | struct cpuidle_driver *drv, | ||
32 | int index) | ||
33 | { | ||
34 | at91_standby(); | ||
35 | return index; | ||
36 | } | ||
37 | |||
38 | static struct cpuidle_driver at91_idle_driver = { | ||
39 | .name = "at91_idle", | ||
40 | .owner = THIS_MODULE, | ||
41 | .states[0] = ARM_CPUIDLE_WFI_STATE, | ||
42 | .states[1] = { | ||
43 | .enter = at91_enter_idle, | ||
44 | .exit_latency = 10, | ||
45 | .target_residency = 10000, | ||
46 | .flags = CPUIDLE_FLAG_TIME_VALID, | ||
47 | .name = "RAM_SR", | ||
48 | .desc = "WFI and DDR Self Refresh", | ||
49 | }, | ||
50 | .state_count = AT91_MAX_STATES, | ||
51 | }; | ||
52 | |||
53 | /* Initialize CPU idle by registering the idle states */ | ||
54 | static int at91_cpuidle_probe(struct platform_device *dev) | ||
55 | { | ||
56 | at91_standby = (void *)(dev->dev.platform_data); | ||
57 | |||
58 | return cpuidle_register(&at91_idle_driver, NULL); | ||
59 | } | ||
60 | |||
61 | static struct platform_driver at91_cpuidle_driver = { | ||
62 | .driver = { | ||
63 | .name = "cpuidle-at91", | ||
64 | .owner = THIS_MODULE, | ||
65 | }, | ||
66 | .probe = at91_cpuidle_probe, | ||
67 | }; | ||
68 | |||
69 | module_platform_driver(at91_cpuidle_driver); | ||