soc_sleep.h 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. /*
  2. * Copyright (c) 2018 Actions Semiconductor Co., Ltd
  3. *
  4. * SPDX-License-Identifier: Apache-2.0
  5. */
  6. /**
  7. * @file sleep for Actions SoC
  8. */
  9. #ifndef _ACTIONS_SOC_SLEEP_H_
  10. #define _ACTIONS_SOC_SLEEP_H_
  11. #include <stdarg.h>
  12. enum S_WK_SRC_TYPE {
  13. SLEEP_WK_SRC_PMU= 0x00,
  14. SLEEP_WK_SRC_RTC,
  15. SLEEP_WK_SRC_BT ,
  16. SLEEP_WK_SRC_GPIO,
  17. SLEEP_WK_SRC_T0,
  18. SLEEP_WK_SRC_T1,
  19. SLEEP_WK_SRC_T2,
  20. SLEEP_WK_SRC_T3,
  21. SLEEP_WK_SRC_T4,
  22. SLEEP_WK_SRC_T5,
  23. SLEEP_WK_SRC_TWS,
  24. SLEEP_WK_SRC_SPI0MT,
  25. SLEEP_WK_SRC_SPI1MT,
  26. SLEEP_WK_SRC_IIC0MT,
  27. SLEEP_WK_SRC_IIC1MT,
  28. };
  29. enum WK_RUN_TYPE {
  30. WK_RUN_IN_SRAM = 0x00, /*only sram can use*/
  31. WK_RUN_IN_NOR, /*only sram & nor can use */
  32. WK_RUN_IN_SYTEM, /*only sram nor psram can use */
  33. WK_RUN_MAX,
  34. };
  35. enum WK_CB_RC{
  36. WK_CB_SLEEP_AGAIN = 0x00,
  37. WK_CB_RUN_SYSTEM,
  38. WK_CB_CARELESS,
  39. };
  40. typedef enum WK_CB_RC (*sleep_wk_callback_t)(enum S_WK_SRC_TYPE wk_src);
  41. typedef enum WK_RUN_TYPE (*sleep_wk_prepare_t)(enum S_WK_SRC_TYPE wk_src);
  42. struct sleep_wk_fun_data {
  43. sleep_wk_callback_t wk_cb;
  44. sleep_wk_prepare_t wk_prep;
  45. struct sleep_wk_fun_data *next;
  46. };
  47. void sys_s3_wksrc_init(void);
  48. enum S_WK_SRC_TYPE sys_s3_wksrc_get(void);
  49. void sys_s3_wksrc_clr(enum S_WK_SRC_TYPE src);
  50. void sys_s3_wksrc_set(enum S_WK_SRC_TYPE src);
  51. int sleep_register_wk_callback(enum S_WK_SRC_TYPE wk_src, struct sleep_wk_fun_data *fn_data);
  52. int sleep_sensor_code_set(void *code_addr, uint32_t code_len);
  53. unsigned int soc_sleep_cycle(void);
  54. int64_t soc_sys_uptime_get(void);
  55. int sl_printk(const char *fmt, ...);
  56. int sl_vprintk(const char *fmt, va_list ap);
  57. void soc_set_aod_mode(int is_aod);
  58. int soc_get_aod_mode(void);
  59. void soc_set_sleep_mode(uint8_t mode);
  60. int soc_in_sleep_mode(void);
  61. #endif /* _ACTIONS_SOC_SLEEP_H_ */