Commit | Line | Data |
---|---|---|
e933ec7c KH |
1 | /* |
2 | * Runtime PM support code for OMAP1 | |
3 | * | |
4 | * Author: Kevin Hilman, Deep Root Systems, LLC | |
5 | * | |
6 | * Copyright (C) 2010 Texas Instruments, Inc. | |
7 | * | |
8 | * This file is licensed under the terms of the GNU General Public | |
9 | * License version 2. This program is licensed "as is" without any | |
10 | * warranty of any kind, whether express or implied. | |
11 | */ | |
12 | #include <linux/init.h> | |
13 | #include <linux/kernel.h> | |
14 | #include <linux/io.h> | |
15 | #include <linux/pm_runtime.h> | |
b5e8d269 | 16 | #include <linux/pm_clock.h> |
e933ec7c KH |
17 | #include <linux/platform_device.h> |
18 | #include <linux/mutex.h> | |
19 | #include <linux/clk.h> | |
20 | #include <linux/err.h> | |
21 | ||
47ba7099 PW |
22 | #include "soc.h" |
23 | ||
e933ec7c KH |
24 | #ifdef CONFIG_PM_RUNTIME |
25 | static int omap1_pm_runtime_suspend(struct device *dev) | |
26 | { | |
600b776e | 27 | int ret; |
e933ec7c KH |
28 | |
29 | dev_dbg(dev, "%s\n", __func__); | |
30 | ||
31 | ret = pm_generic_runtime_suspend(dev); | |
600b776e RW |
32 | if (ret) |
33 | return ret; | |
e933ec7c | 34 | |
3d5c3036 | 35 | ret = pm_clk_suspend(dev); |
600b776e RW |
36 | if (ret) { |
37 | pm_generic_runtime_resume(dev); | |
38 | return ret; | |
e933ec7c KH |
39 | } |
40 | ||
41 | return 0; | |
600b776e | 42 | } |
e933ec7c KH |
43 | |
44 | static int omap1_pm_runtime_resume(struct device *dev) | |
45 | { | |
e933ec7c KH |
46 | dev_dbg(dev, "%s\n", __func__); |
47 | ||
3d5c3036 | 48 | pm_clk_resume(dev); |
600b776e RW |
49 | return pm_generic_runtime_resume(dev); |
50 | } | |
e933ec7c | 51 | |
564b905a | 52 | static struct dev_pm_domain default_pm_domain = { |
600b776e RW |
53 | .ops = { |
54 | .runtime_suspend = omap1_pm_runtime_suspend, | |
55 | .runtime_resume = omap1_pm_runtime_resume, | |
56 | USE_PLATFORM_PM_SLEEP_OPS | |
57 | }, | |
58 | }; | |
564b905a | 59 | #define OMAP1_PM_DOMAIN (&default_pm_domain) |
e9e35c5a | 60 | #else |
564b905a | 61 | #define OMAP1_PM_DOMAIN NULL |
e9e35c5a | 62 | #endif /* CONFIG_PM_RUNTIME */ |
e933ec7c | 63 | |
600b776e | 64 | static struct pm_clk_notifier_block platform_bus_notifier = { |
564b905a | 65 | .pm_domain = OMAP1_PM_DOMAIN, |
600b776e | 66 | .con_ids = { "ick", "fck", NULL, }, |
e933ec7c KH |
67 | }; |
68 | ||
69 | static int __init omap1_pm_runtime_init(void) | |
70 | { | |
7f9187c2 TL |
71 | if (!cpu_class_is_omap1()) |
72 | return -ENODEV; | |
73 | ||
3d5c3036 | 74 | pm_clk_add_notifier(&platform_bus_type, &platform_bus_notifier); |
e933ec7c KH |
75 | |
76 | return 0; | |
77 | } | |
78 | core_initcall(omap1_pm_runtime_init); | |
e9e35c5a | 79 |