commit
b38f135242
|
@ -129,7 +129,8 @@ STATIC BOOL OsPmTickTimerStop(LosPmCB *pm)
|
||||||
#endif
|
#endif
|
||||||
LosPmTickTimer *tickTimer = pm->tickTimer;
|
LosPmTickTimer *tickTimer = pm->tickTimer;
|
||||||
|
|
||||||
if ((tickTimer == NULL) || (tickTimer->tickLock == NULL)) {
|
if ((tickTimer == NULL) || (tickTimer->tickLock == NULL) ||
|
||||||
|
(pm->pmMode == LOS_SYS_NORMAL_SLEEP)) {
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -167,7 +168,6 @@ STATIC VOID OsPmCpuResume(LosPmCB *pm)
|
||||||
STATIC VOID OsPmCpuSuspend(LosPmCB *pm)
|
STATIC VOID OsPmCpuSuspend(LosPmCB *pm)
|
||||||
{
|
{
|
||||||
/* cpu enter low power mode */
|
/* cpu enter low power mode */
|
||||||
LOS_ASSERT(pm->sysctrl != NULL);
|
|
||||||
|
|
||||||
if (pm->sysMode == LOS_SYS_NORMAL_SLEEP) {
|
if (pm->sysMode == LOS_SYS_NORMAL_SLEEP) {
|
||||||
pm->sysctrl->normalSuspend();
|
pm->sysctrl->normalSuspend();
|
||||||
|
@ -226,6 +226,8 @@ STATIC UINT32 OsPmSuspendCheck(LosPmCB *pm, Suspend *sysSuspendEarly, Suspend *d
|
||||||
return LOS_NOK;
|
return LOS_NOK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
LOS_ASSERT(pm->sysctrl != NULL);
|
||||||
|
|
||||||
pm->isWake = FALSE;
|
pm->isWake = FALSE;
|
||||||
*mode = pm->sysMode;
|
*mode = pm->sysMode;
|
||||||
*sysSuspendEarly = pm->sysctrl->early;
|
*sysSuspendEarly = pm->sysctrl->early;
|
||||||
|
@ -260,6 +262,10 @@ STATIC UINT32 OsPmSuspendSleep(LosPmCB *pm)
|
||||||
goto EXIT;
|
goto EXIT;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (pm->sysctrl->suspendCheck != NULL) {
|
||||||
|
pm->sysctrl->suspendCheck(mode);
|
||||||
|
}
|
||||||
|
|
||||||
tickTimerStop = OsPmTickTimerStop(pm);
|
tickTimerStop = OsPmTickTimerStop(pm);
|
||||||
if (!tickTimerStop) {
|
if (!tickTimerStop) {
|
||||||
OsSchedResetSchedResponseTime(0);
|
OsSchedResetSchedResponseTime(0);
|
||||||
|
@ -283,6 +289,9 @@ EXIT:
|
||||||
|
|
||||||
STATIC VOID OsPmNormalSleep(VOID)
|
STATIC VOID OsPmNormalSleep(VOID)
|
||||||
{
|
{
|
||||||
|
#if (LOSCFG_KERNEL_PM_IDLE == 1)
|
||||||
|
(VOID)LOS_PmSuspend(0);
|
||||||
|
#else
|
||||||
UINT32 intSave;
|
UINT32 intSave;
|
||||||
LosPmCB *pm = &g_pmCB;
|
LosPmCB *pm = &g_pmCB;
|
||||||
|
|
||||||
|
@ -293,6 +302,7 @@ STATIC VOID OsPmNormalSleep(VOID)
|
||||||
OsPmCpuResume(pm);
|
OsPmCpuResume(pm);
|
||||||
|
|
||||||
LOS_IntRestore(intSave);
|
LOS_IntRestore(intSave);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
STATIC UINT32 OsPmDeviceRegister(LosPmCB *pm, LosPmDevice *device)
|
STATIC UINT32 OsPmDeviceRegister(LosPmCB *pm, LosPmDevice *device)
|
||||||
|
@ -343,6 +353,9 @@ STATIC UINT32 OsPmSysctrlRegister(LosPmCB *pm, LosPmSysctrl *sysctrl)
|
||||||
if (sysctrl->late != NULL) {
|
if (sysctrl->late != NULL) {
|
||||||
pm->sysctrl->late = sysctrl->late;
|
pm->sysctrl->late = sysctrl->late;
|
||||||
}
|
}
|
||||||
|
if (sysctrl->suspendCheck != NULL) {
|
||||||
|
pm->sysctrl->suspendCheck = sysctrl->suspendCheck;
|
||||||
|
}
|
||||||
if (sysctrl->normalSuspend != NULL) {
|
if (sysctrl->normalSuspend != NULL) {
|
||||||
pm->sysctrl->normalSuspend = sysctrl->normalSuspend;
|
pm->sysctrl->normalSuspend = sysctrl->normalSuspend;
|
||||||
}
|
}
|
||||||
|
|
|
@ -165,6 +165,8 @@ typedef struct {
|
||||||
* Unlocked task scheduling.
|
* Unlocked task scheduling.
|
||||||
*/
|
*/
|
||||||
VOID (*late)(UINT32 mode);
|
VOID (*late)(UINT32 mode);
|
||||||
|
/* Final check before low-power consumption. */
|
||||||
|
VOID (*suspendCheck)(UINT32 mode);
|
||||||
/* The system enters the Normal sleep mode.
|
/* The system enters the Normal sleep mode.
|
||||||
* In normal mode, the value cannot be NULL.
|
* In normal mode, the value cannot be NULL.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -663,6 +663,22 @@ extern UINT8 *m_aucSysMem0;
|
||||||
#define LOSCFG_KERNEL_SIGNAL 0
|
#define LOSCFG_KERNEL_SIGNAL 0
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @ingroup los_config
|
||||||
|
* Configuration item to enable kernel power module.
|
||||||
|
*/
|
||||||
|
#ifndef LOSCFG_KERNEL_PM
|
||||||
|
#define LOSCFG_KERNEL_PM 0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @ingroup los_config
|
||||||
|
* Configuration item to enable kernel power module in idle task.
|
||||||
|
*/
|
||||||
|
#ifndef LOSCFG_KERNEL_PM_IDLE
|
||||||
|
#define LOSCFG_KERNEL_PM_IDLE 0
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
#if __cplusplus
|
#if __cplusplus
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue