blob: 25abd4eb7d102113d94c62bf7bbc1b8f935f0ca8 [file] [log] [blame]
Magnus Dammf14c4f12010-07-27 08:14:35 +00001/*
Paul Mundtd03299e2011-11-11 15:58:50 +09002 * Runtime PM support code
Magnus Dammf14c4f12010-07-27 08:14:35 +00003 *
4 * Copyright (C) 2009-2010 Magnus Damm
5 *
6 * This file is subject to the terms and conditions of the GNU General Public
7 * License. See the file "COPYING" in the main directory of this archive
8 * for more details.
9 */
10
11#include <linux/init.h>
12#include <linux/kernel.h>
13#include <linux/io.h>
14#include <linux/pm_runtime.h>
Rafael J. Wysocki79620412011-07-13 12:32:07 +020015#include <linux/pm_domain.h>
Rafael J. Wysockib5e8d262011-08-25 15:34:19 +020016#include <linux/pm_clock.h>
Magnus Dammf14c4f12010-07-27 08:14:35 +000017#include <linux/platform_device.h>
18#include <linux/clk.h>
19#include <linux/sh_clk.h>
20#include <linux/bitmap.h>
Rafael J. Wysocki1d2b71f2011-04-29 00:36:53 +020021#include <linux/slab.h>
Magnus Dammf14c4f12010-07-27 08:14:35 +000022
Rafael J. Wysocki564b9052011-06-23 01:52:55 +020023static struct dev_pm_domain default_pm_domain = {
Rafael J. Wysocki38ade3a2011-04-29 00:36:21 +020024 .ops = {
Rajendra Nayakd2c4b432015-04-23 14:03:13 +053025 USE_PM_CLK_RUNTIME_OPS
Rafael J. Wysocki38ade3a2011-04-29 00:36:21 +020026 USE_PLATFORM_PM_SLEEP_OPS
27 },
28};
29
Rafael J. Wysocki85eb8c82011-04-30 00:25:44 +020030static struct pm_clk_notifier_block platform_bus_notifier = {
Rajendra Nayakd2c4b432015-04-23 14:03:13 +053031 .pm_domain = &default_pm_domain,
Rafael J. Wysocki85eb8c82011-04-30 00:25:44 +020032 .con_ids = { NULL, },
Magnus Dammf14c4f12010-07-27 08:14:35 +000033};
34
35static int __init sh_pm_runtime_init(void)
36{
Geert Uytterhoeven3c90c552014-05-06 23:26:19 +020037 if (IS_ENABLED(CONFIG_ARCH_SHMOBILE_MULTI)) {
Geert Uytterhoevencbc41d02015-08-04 14:28:15 +020038 if (!of_find_compatible_node(NULL, NULL,
39 "renesas,cpg-mstp-clocks"))
40 return 0;
41 if (IS_ENABLED(CONFIG_PM_GENERIC_DOMAINS_OF) &&
42 of_find_node_with_property(NULL, "#power-domain-cells"))
Geert Uytterhoeven3c90c552014-05-06 23:26:19 +020043 return 0;
44 }
45
Rafael J. Wysocki3d5c3032011-07-01 22:13:44 +020046 pm_clk_add_notifier(&platform_bus_type, &platform_bus_notifier);
Magnus Dammf14c4f12010-07-27 08:14:35 +000047 return 0;
48}
49core_initcall(sh_pm_runtime_init);