policy_sleep.c 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. /*
  2. * Copyright (c) 2018 Intel Corporation.
  3. *
  4. * SPDX-License-Identifier: Apache-2.0
  5. */
  6. #include <zephyr.h>
  7. #include <kernel.h>
  8. #include <pm/pm.h>
  9. #include "soc.h"
  10. static struct pm_state_info g_pm_stat_info = {
  11. .state = PM_STATE_ACTIVE,
  12. .substate_id = 0,
  13. .min_residency_us = 0,
  14. };
  15. static volatile bool b_enter_sleep;
  16. #if 0
  17. static void _sys_pm_enter_sleep(int deep)
  18. {
  19. #if defined(CONFIG_PM_DIRECT_FORCE_MODE)
  20. struct pm_state_info pm_stat;
  21. if(deep) {
  22. pm_stat.state = PM_STATE_SUSPEND_TO_RAM;
  23. pm_power_state_force(pm_stat);
  24. }else{
  25. pm_stat.state = PM_STATE_STANDBY;
  26. pm_power_state_force(pm_stat);
  27. }
  28. #endif
  29. }
  30. #endif
  31. void sys_pm_enter_deep_sleep(void)
  32. {
  33. sl_dbg("enter deep sleep\n");
  34. b_enter_sleep = true;
  35. }
  36. #if 0
  37. void sys_pm_enter_light_sleep(void)
  38. {
  39. _sys_pm_enter_sleep(0);
  40. }
  41. #endif
  42. #ifdef CONFIG_SYS_WAKELOCK
  43. #include <sys_wakelock.h>
  44. extern void pm_abort_enter_sleep(void); //power.c
  45. static int check_wake_lock(void)
  46. {
  47. if (sys_wakelocks_check(PARTIAL_WAKE_LOCK)
  48. || sys_wakelocks_check(FULL_WAKE_LOCK)) {
  49. pm_abort_enter_sleep();
  50. sl_dbg("wake lock,not s3\n");
  51. return 1;
  52. }
  53. return 0;
  54. }
  55. #else
  56. static int check_wake_lock(void)
  57. {
  58. return 0;
  59. }
  60. #endif
  61. struct pm_state_info pm_policy_next_state(int32_t ticks)
  62. {
  63. g_pm_stat_info.state = PM_STATE_ACTIVE;
  64. if(b_enter_sleep){
  65. sys_s3_wksrc_init();
  66. b_enter_sleep = false;
  67. if(!check_wake_lock()) {
  68. g_pm_stat_info.state = PM_STATE_SUSPEND_TO_RAM;
  69. //g_pm_stat_info.state = PM_STATE_STANDBY;
  70. sl_dbg("deep sleep, ticks=%d\n", ticks);
  71. }
  72. }
  73. return g_pm_stat_info;
  74. }
  75. bool pm_policy_low_power_devices(enum pm_state state)
  76. {
  77. return pm_is_sleep_state(state);
  78. }