blob: d3d1891cda3cf9a891b1714e240e73036109f2ac [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)) {
38 if (!of_machine_is_compatible("renesas,emev2") &&
39 !of_machine_is_compatible("renesas,r7s72100") &&
Geert Uytterhoevena5cb5142014-12-03 14:41:47 +010040#ifndef CONFIG_PM_GENERIC_DOMAINS_OF
Geert Uytterhoeven230f2592015-02-17 16:43:03 +010041 !of_machine_is_compatible("renesas,r8a73a4") &&
Geert Uytterhoeven3c90c552014-05-06 23:26:19 +020042 !of_machine_is_compatible("renesas,r8a7740") &&
Geert Uytterhoeven41b4b3b2015-02-17 16:31:39 +010043 !of_machine_is_compatible("renesas,sh73a0") &&
Geert Uytterhoevena5cb5142014-12-03 14:41:47 +010044#endif
Geert Uytterhoeven3c90c552014-05-06 23:26:19 +020045 !of_machine_is_compatible("renesas,r8a7778") &&
46 !of_machine_is_compatible("renesas,r8a7779") &&
47 !of_machine_is_compatible("renesas,r8a7790") &&
48 !of_machine_is_compatible("renesas,r8a7791") &&
Geert Uytterhoeven2f35fb32014-05-27 15:45:09 +020049 !of_machine_is_compatible("renesas,r8a7792") &&
50 !of_machine_is_compatible("renesas,r8a7793") &&
Geert Uytterhoeven00170522015-02-19 18:46:46 +010051 !of_machine_is_compatible("renesas,r8a7794"))
Geert Uytterhoeven3c90c552014-05-06 23:26:19 +020052 return 0;
53 }
54
Rafael J. Wysocki3d5c3032011-07-01 22:13:44 +020055 pm_clk_add_notifier(&platform_bus_type, &platform_bus_notifier);
Magnus Dammf14c4f12010-07-27 08:14:35 +000056 return 0;
57}
58core_initcall(sh_pm_runtime_init);