linux/drivers/sh/pm_runtime.c
<<
>>
Prefs
   1/*
   2 * Runtime PM support code
   3 *
   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>
  15#include <linux/pm_domain.h>
  16#include <linux/pm_clock.h>
  17#include <linux/platform_device.h>
  18#include <linux/clk.h>
  19#include <linux/sh_clk.h>
  20#include <linux/bitmap.h>
  21#include <linux/slab.h>
  22
  23#ifdef CONFIG_PM_RUNTIME
  24
  25static int default_platform_runtime_idle(struct device *dev)
  26{
  27        /* suspend synchronously to disable clocks immediately */
  28        return pm_runtime_suspend(dev);
  29}
  30
  31static struct dev_pm_domain default_pm_domain = {
  32        .ops = {
  33                .runtime_suspend = pm_clk_suspend,
  34                .runtime_resume = pm_clk_resume,
  35                .runtime_idle = default_platform_runtime_idle,
  36                USE_PLATFORM_PM_SLEEP_OPS
  37        },
  38};
  39
  40#define DEFAULT_PM_DOMAIN_PTR   (&default_pm_domain)
  41
  42#else
  43
  44#define DEFAULT_PM_DOMAIN_PTR   NULL
  45
  46#endif /* CONFIG_PM_RUNTIME */
  47
  48static struct pm_clk_notifier_block platform_bus_notifier = {
  49        .pm_domain = DEFAULT_PM_DOMAIN_PTR,
  50        .con_ids = { NULL, },
  51};
  52
  53static int __init sh_pm_runtime_init(void)
  54{
  55        pm_clk_add_notifier(&platform_bus_type, &platform_bus_notifier);
  56        return 0;
  57}
  58core_initcall(sh_pm_runtime_init);
  59
  60static int __init sh_pm_runtime_late_init(void)
  61{
  62        pm_genpd_poweroff_unused();
  63        return 0;
  64}
  65late_initcall(sh_pm_runtime_late_init);
  66
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.