root/arch/arm/mach-s3c64xx/cpuidle.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. s3c64xx_enter_idle
  2. s3c64xx_init_cpuidle

   1 // SPDX-License-Identifier: GPL-2.0
   2 //
   3 // Copyright (c) 2011 Wolfson Microelectronics, plc
   4 // Copyright (c) 2011 Samsung Electronics Co., Ltd.
   5 //              http://www.samsung.com
   6 
   7 #include <linux/kernel.h>
   8 #include <linux/init.h>
   9 #include <linux/cpuidle.h>
  10 #include <linux/io.h>
  11 #include <linux/export.h>
  12 #include <linux/time.h>
  13 
  14 #include <asm/cpuidle.h>
  15 
  16 #include <plat/cpu.h>
  17 #include <mach/map.h>
  18 
  19 #include "regs-sys.h"
  20 #include "regs-syscon-power.h"
  21 
  22 static int s3c64xx_enter_idle(struct cpuidle_device *dev,
  23                               struct cpuidle_driver *drv,
  24                               int index)
  25 {
  26         unsigned long tmp;
  27 
  28         /* Setup PWRCFG to enter idle mode */
  29         tmp = __raw_readl(S3C64XX_PWR_CFG);
  30         tmp &= ~S3C64XX_PWRCFG_CFG_WFI_MASK;
  31         tmp |= S3C64XX_PWRCFG_CFG_WFI_IDLE;
  32         __raw_writel(tmp, S3C64XX_PWR_CFG);
  33 
  34         cpu_do_idle();
  35 
  36         return index;
  37 }
  38 
  39 static struct cpuidle_driver s3c64xx_cpuidle_driver = {
  40         .name   = "s3c64xx_cpuidle",
  41         .owner  = THIS_MODULE,
  42         .states = {
  43                 {
  44                         .enter            = s3c64xx_enter_idle,
  45                         .exit_latency     = 1,
  46                         .target_residency = 1,
  47                         .name             = "IDLE",
  48                         .desc             = "System active, ARM gated",
  49                 },
  50         },
  51         .state_count = 1,
  52 };
  53 
  54 static int __init s3c64xx_init_cpuidle(void)
  55 {
  56         if (soc_is_s3c64xx())
  57                 return cpuidle_register(&s3c64xx_cpuidle_driver, NULL);
  58         return 0;
  59 }
  60 device_initcall(s3c64xx_init_cpuidle);

/* [<][>][^][v][top][bottom][index][help] */