root/arch/arm/mach-s3c24xx/pm-s3c2416.c

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

DEFINITIONS

This source file includes following definitions.
  1. s3c2416_cpu_suspend
  2. s3c2416_pm_prepare
  3. s3c2416_pm_add
  4. s3c2416_pm_init
  5. s3c2416_pm_resume

   1 // SPDX-License-Identifier: GPL-2.0
   2 //
   3 // Copyright (c) 2010 Samsung Electronics Co., Ltd.
   4 //              http://www.samsung.com
   5 //
   6 // S3C2416 - PM support (Based on Ben Dooks' S3C2412 PM support)
   7 
   8 #include <linux/device.h>
   9 #include <linux/syscore_ops.h>
  10 #include <linux/io.h>
  11 
  12 #include <asm/cacheflush.h>
  13 
  14 #include <mach/regs-s3c2443-clock.h>
  15 
  16 #include <plat/cpu.h>
  17 #include <plat/pm.h>
  18 
  19 #include "s3c2412-power.h"
  20 
  21 #ifdef CONFIG_PM_SLEEP
  22 extern void s3c2412_sleep_enter(void);
  23 
  24 static int s3c2416_cpu_suspend(unsigned long arg)
  25 {
  26         /* enable wakeup sources regardless of battery state */
  27         __raw_writel(S3C2443_PWRCFG_SLEEP, S3C2443_PWRCFG);
  28 
  29         /* set the mode as sleep, 2BED represents "Go to BED" */
  30         __raw_writel(0x2BED, S3C2443_PWRMODE);
  31 
  32         s3c2412_sleep_enter();
  33 
  34         pr_info("Failed to suspend the system\n");
  35         return 1; /* Aborting suspend */
  36 }
  37 
  38 static void s3c2416_pm_prepare(void)
  39 {
  40         /*
  41          * write the magic value u-boot uses to check for resume into
  42          * the INFORM0 register, and ensure INFORM1 is set to the
  43          * correct address to resume from.
  44          */
  45         __raw_writel(0x2BED, S3C2412_INFORM0);
  46         __raw_writel(__pa_symbol(s3c_cpu_resume), S3C2412_INFORM1);
  47 }
  48 
  49 static int s3c2416_pm_add(struct device *dev, struct subsys_interface *sif)
  50 {
  51         pm_cpu_prep = s3c2416_pm_prepare;
  52         pm_cpu_sleep = s3c2416_cpu_suspend;
  53 
  54         return 0;
  55 }
  56 
  57 static struct subsys_interface s3c2416_pm_interface = {
  58         .name           = "s3c2416_pm",
  59         .subsys         = &s3c2416_subsys,
  60         .add_dev        = s3c2416_pm_add,
  61 };
  62 
  63 static __init int s3c2416_pm_init(void)
  64 {
  65         return subsys_interface_register(&s3c2416_pm_interface);
  66 }
  67 
  68 arch_initcall(s3c2416_pm_init);
  69 #endif
  70 
  71 static void s3c2416_pm_resume(void)
  72 {
  73         /* unset the return-from-sleep amd inform flags */
  74         __raw_writel(0x0, S3C2443_PWRMODE);
  75         __raw_writel(0x0, S3C2412_INFORM0);
  76         __raw_writel(0x0, S3C2412_INFORM1);
  77 }
  78 
  79 struct syscore_ops s3c2416_pm_syscore_ops = {
  80         .resume         = s3c2416_pm_resume,
  81 };

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