Files
2026-08-24 10:03:24 +08:00

93 lines
1.9 KiB
C

/*
* Copyright (c) 2021-2022 Amlogic, Inc. All rights reserved.
*
* SPDX-License-Identifier: MIT
*/
#include "soc.h"
#include "suspend.h"
#include "mailbox-api.h"
#include "vad_suspend.h"
#include "dsp.h"
static struct xClientMboxChan *pxClkAO2DSPChan;
static void *xMboxVadWakeup(void *msg)
{
(void)msg;
uint32_t buf[4] = {0};
buf[0] = VAD_WAKEUP;
STR_Wakeup_src_Queue_Send(buf);
return NULL;
}
void vDSPVadWakeupInit(void)
{
xInstallRemoteMessageCallbackFeedBack(DSPA2AO_CHANNEL,
MBX_CMD_VAD_AWE_WAKEUP,
xMboxVadWakeup,
0);
pxClkAO2DSPChan = xMboxRequestChan(AO2DSPA_CLK);
if (!pxClkAO2DSPChan)
printf("err: AO2DSPA mbx chan req fail!\n");
}
void vDSPVadWakeupDeinit(void)
{
xUninstallRemoteMessageCallback(DSPA2AO_CHANNEL, MBX_CMD_VAD_AWE_WAKEUP);
xMboxFreeChan(pxClkAO2DSPChan);
pxClkAO2DSPChan = NULL;
}
void vDSP_suspend(uint32_t st_f)
{
#ifdef CONFIG_MAILBOX_SEND
int iIdx = 0;
struct xMboxData xMboxSendData;
if (!st_f && pxClkAO2DSPChan) {
iIdx = WAIT_SWITCH_TO_RTC_PLL;
xMboxSendData.ulCmd = MBX_CMD_SUSPEND_WITH_DSP;
xMboxSendData.pvTxbuf = (void *)&iIdx;
xMboxSendData.ucTxSize = 4;
xMboxSendMsg(pxClkAO2DSPChan, &xMboxSendData);
vTaskDelay(pdMS_TO_TICKS(90));
printf("[AO]: running at 24MHz, 24MHz osc clk power off.\n");
}
#else
(void)st_f;
#endif
}
void vDSP_resume(uint32_t st_f)
{
#ifdef CONFIG_MAILBOX_SEND
int iIdx;
struct xMboxData xMboxSendData;
xMboxSendData.ulCmd = MBX_CMD_SUSPEND_WITH_DSP;
xMboxSendData.pvTxbuf = (void *)&iIdx;
xMboxSendData.ucTxSize = 4;
if ((!st_f) && (get_reason_flag() != VAD_WAKEUP) && pxClkAO2DSPChan) {
wakeup_dsp();
vTaskDelay(pdMS_TO_TICKS(90));
iIdx = WAKEUP_FROM_OTHER_KEY;
xMboxSendMsg(pxClkAO2DSPChan, &xMboxSendData);
clear_dsp_wakeup_trigger();
}
if (!st_f && pxClkAO2DSPChan) {
iIdx = WAIT_SWITCH_TO_24MHZ;
xMboxSendMsg(pxClkAO2DSPChan, &xMboxSendData);
vTaskDelay(pdMS_TO_TICKS(90));
}
#else
(void)st_f;
#endif
}