sunxi power suspend flow

/*平台相关power manager 接口hooks*/

struct platform_suspend_ops aw_pm_ops = {
  .valid = aw_pm_valid,
  .begin = aw_pm_begin,
  .prepare = aw_pm_prepare,
  .prepare_late = aw_pm_prepare_late,
  .enter = aw_pm_enter,
  .wake = aw_pm_wake,
  .finish = aw_pm_finish,
  .end = aw_pm_end,
  .recover = aw_pm_recover,
};


aw_pm_init-->
  suspend_set_ops(&aw_pm_ops)-->
    suspend_ops = ops;   //suspend_ops = aw_pm_ops

 

/*系统级别pm接口,suspend/resume*/

pm_suspend-->
  suspend_devices_and_enter->
    suspend_ops->begin
  suspend_console()
  dpm_suspend_start(PMSG_SUSPEND)
  suspend_enter
  suspend_ops->suspend_again
  suspend_ops->end()
  suspend_ops->recover()

suspend_enter-->
  suspend_ops->prepare()
  dpm_suspend_end(PMSG_SUSPEND)
  suspend_ops->prepare_late()
  disable_nonboot_cpus()
  arch_suspend_disable_irqs()
  syscore_suspend()
  suspend_ops->enter(state) //suspending now
  syscore_resume(); //resume
  arch_suspend_enable_irqs()
  enable_nonboot_cpus()
  suspend_ops->wake()
  suspend_ops->finish()

 

echo 0x843 >/sys/power/aw_pm/debug_mask
cat /proc/sys/kernel/printk
echo 7 8 1 7>/proc/sys/kernel/printk

 

posted on 2021-04-29 16:32  arduino  阅读(105)  评论(0)    收藏  举报

导航