|
|
@@ -4,6 +4,8 @@
|
|
|
#include "wm_pmu.h"
|
|
|
#include "wm_regs.h"
|
|
|
#include "wm_timer.h"
|
|
|
+#include "wm_watchdog.h"
|
|
|
+#include "wm_ram_config.h"
|
|
|
|
|
|
#define LUAT_LOG_TAG "pm"
|
|
|
#include "luat_log.h"
|
|
|
@@ -60,39 +62,66 @@ int luat_pm_dtimer_check(int id) {
|
|
|
extern int power_bk_reg; // from wm_main.c
|
|
|
// extern int wake_src;
|
|
|
int luat_pm_last_state(int *lastState, int *rtcOrPad) {
|
|
|
- // 实际情况与寄存器手册的描述不符
|
|
|
- // 复位开机, 是 00D90344
|
|
|
- // RTC或wakeup 是 00D10240
|
|
|
- if (CHECK_BIT(power_bk_reg, 8)) {
|
|
|
+ int reson = tls_sys_get_reboot_reason();
|
|
|
+ switch (tls_sys_get_reboot_reason())
|
|
|
+ {
|
|
|
+ case REBOOT_REASON_POWER_ON:// 硬件复位开机
|
|
|
*lastState = 0;
|
|
|
*rtcOrPad = 0;
|
|
|
- }
|
|
|
- else {
|
|
|
- *lastState = 1;
|
|
|
+ break;
|
|
|
+ case REBOOT_REASON_STANDBY: // 唤醒重启
|
|
|
+ *lastState = 3;
|
|
|
+ *rtcOrPad = 3;
|
|
|
+ break;
|
|
|
+ case REBOOT_REASON_EXCEPTION: // 异常重启
|
|
|
+ *lastState = 0;
|
|
|
+ *rtcOrPad = 1;
|
|
|
+ break;
|
|
|
+ case REBOOT_REASON_WDG_TIMEOUT: // 硬狗超时
|
|
|
+ *lastState = 0;
|
|
|
+ *rtcOrPad = 1;
|
|
|
+ break;
|
|
|
+ case REBOOT_REASON_ACTIVE: // 用户主动复位
|
|
|
+ *lastState = 0;
|
|
|
+ *rtcOrPad = 0;
|
|
|
+ break;
|
|
|
+ case REBOOT_REASON_SLEEP: // 不可能出现
|
|
|
+ *lastState = 0;
|
|
|
*rtcOrPad = 4;
|
|
|
+ break;
|
|
|
+
|
|
|
+ default:
|
|
|
+ break;
|
|
|
}
|
|
|
|
|
|
- // if (CHECK_BIT(power_bk_reg, 8)) {
|
|
|
- // if (CHECK_BIT(power_bk_reg, 5)) {
|
|
|
- // *lastState = 3;
|
|
|
- // *rtcOrPad = 1;
|
|
|
- // }
|
|
|
- // else if (CHECK_BIT(power_bk_reg, 2)) {
|
|
|
- // *lastState = 3;
|
|
|
- // *rtcOrPad = 2;
|
|
|
- // }
|
|
|
- // else {
|
|
|
- // *lastState = 99;
|
|
|
- // *rtcOrPad = 0;
|
|
|
- // }
|
|
|
- // }
|
|
|
- // else {
|
|
|
- // *lastState = 0;
|
|
|
- // *rtcOrPad = 0;
|
|
|
- // }
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
+int luat_pm_get_poweron_reason(void)
|
|
|
+{
|
|
|
+int reson = tls_sys_get_reboot_reason();
|
|
|
+ switch (tls_sys_get_reboot_reason())
|
|
|
+ {
|
|
|
+ case REBOOT_REASON_POWER_ON:// 硬件复位开机
|
|
|
+ return 0;
|
|
|
+ case REBOOT_REASON_STANDBY:
|
|
|
+ return 2;
|
|
|
+ case REBOOT_REASON_EXCEPTION:
|
|
|
+ return 6;
|
|
|
+ case REBOOT_REASON_WDG_TIMEOUT:
|
|
|
+ return 8;
|
|
|
+ case REBOOT_REASON_ACTIVE:
|
|
|
+ return 3;
|
|
|
+ case REBOOT_REASON_SLEEP:
|
|
|
+ return 2;
|
|
|
+
|
|
|
+ default:
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
+ return 4;
|
|
|
+}
|
|
|
+
|
|
|
int luat_pm_force(int mode) {
|
|
|
return luat_pm_request(mode);
|
|
|
}
|