root/drivers/cpuidle/cpuidle-at91.c

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

DEFINITIONS

This source file includes following definitions.
  1. at91_enter_idle
  2. at91_cpuidle_probe

   1 /*
   2  * based on arch/arm/mach-kirkwood/cpuidle.c
   3  *
   4  * CPU idle support for AT91 SoC
   5  *
   6  * This file is licensed under the terms of the GNU General Public
   7  * License version 2.  This program is licensed "as is" without any
   8  * warranty of any kind, whether express or implied.
   9  *
  10  * The cpu idle uses wait-for-interrupt and RAM self refresh in order
  11  * to implement two idle states -
  12  * #1 wait-for-interrupt
  13  * #2 wait-for-interrupt and RAM self refresh
  14  */
  15 
  16 #include <linux/kernel.h>
  17 #include <linux/init.h>
  18 #include <linux/platform_device.h>
  19 #include <linux/cpuidle.h>
  20 #include <linux/io.h>
  21 #include <linux/export.h>
  22 #include <asm/cpuidle.h>
  23 
  24 #define AT91_MAX_STATES 2
  25 
  26 static void (*at91_standby)(void);
  27 
  28 /* Actual code that puts the SoC in different idle states */
  29 static int at91_enter_idle(struct cpuidle_device *dev,
  30                         struct cpuidle_driver *drv,
  31                                int index)
  32 {
  33         at91_standby();
  34         return index;
  35 }
  36 
  37 static struct cpuidle_driver at91_idle_driver = {
  38         .name                   = "at91_idle",
  39         .owner                  = THIS_MODULE,
  40         .states[0]              = ARM_CPUIDLE_WFI_STATE,
  41         .states[1]              = {
  42                 .enter                  = at91_enter_idle,
  43                 .exit_latency           = 10,
  44                 .target_residency       = 10000,
  45                 .name                   = "RAM_SR",
  46                 .desc                   = "WFI and DDR Self Refresh",
  47         },
  48         .state_count = AT91_MAX_STATES,
  49 };
  50 
  51 /* Initialize CPU idle by registering the idle states */
  52 static int at91_cpuidle_probe(struct platform_device *dev)
  53 {
  54         at91_standby = (void *)(dev->dev.platform_data);
  55         
  56         return cpuidle_register(&at91_idle_driver, NULL);
  57 }
  58 
  59 static struct platform_driver at91_cpuidle_driver = {
  60         .driver = {
  61                 .name = "cpuidle-at91",
  62         },
  63         .probe = at91_cpuidle_probe,
  64 };
  65 builtin_platform_driver(at91_cpuidle_driver);

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