1 /*
2 * Copyright (c) 2025, MediaTek Inc. All rights reserved.
3 *
4 * SPDX-License-Identifier: BSD-3-Clause
5 */
6
7 #include <lpm_v2/mt_lp_api.h>
8
9 #define UPDATE_STATUS(val, status, bit) \
10 ((val) ? ((status) | (1 << (bit))) : ((status) & ~(1 << (bit))))
11
12 static uint64_t lp_status;
13
mt_audio_update(int type)14 int mt_audio_update(int type)
15 {
16 int ret, val;
17
18 switch (type) {
19 case AUDIO_AFE_ENTER:
20 case AUDIO_AFE_LEAVE:
21 val = (type == AUDIO_AFE_ENTER) ? 1 : 0;
22 lp_status = UPDATE_STATUS(val, lp_status, AUDIO_AFE);
23 ret = mt_lp_rm_do_update(-1, PLAT_RC_IS_FMAUDIO, &val);
24 break;
25 case AUDIO_DSP_ENTER:
26 case AUDIO_DSP_LEAVE:
27 val = (type == AUDIO_DSP_ENTER) ? 1 : 0;
28 lp_status = UPDATE_STATUS(val, lp_status, AUDIO_DSP);
29 ret = mt_lp_rm_do_update(-1, PLAT_RC_IS_ADSP, &val);
30 break;
31 default:
32 ret = -1;
33 break;
34 }
35
36 return ret;
37 }
38
mt_usb_update(int type)39 int mt_usb_update(int type)
40 {
41 int ret, val;
42
43 switch (type) {
44 case LPM_USB_ENTER:
45 case LPM_USB_LEAVE:
46 val = (type == LPM_USB_ENTER) ? 1 : 0;
47 ret = mt_lp_rm_do_update(-1, PLAT_RC_IS_USB_INFRA, &val);
48 break;
49 case USB_HEADSET_ENTER:
50 case USB_HEADSET_LEAVE:
51 val = (type == USB_HEADSET_ENTER) ? 1 : 0;
52 lp_status = UPDATE_STATUS(val, lp_status, USB_HEADSET);
53 ret = mt_lp_rm_do_update(-1, PLAT_RC_IS_USB_HEADSET, &val);
54 break;
55 default:
56 ret = -1;
57 break;
58 }
59
60 return ret;
61 }
62
mt_get_lp_scenario_status(void)63 uint64_t mt_get_lp_scenario_status(void)
64 {
65 return lp_status;
66 }
67
mt_gpueb_hwctrl(int type,void * priv)68 int mt_gpueb_hwctrl(int type, void *priv)
69 {
70 int ret, val;
71
72 switch (type) {
73 case GPUEB_PLL_EN:
74 case GPUEB_PLL_DIS:
75 val = (type == GPUEB_PLL_EN) ? 1 : 0;
76 ret = mt_lp_rm_do_hwctrl(PLAT_AP_GPUEB_PLL_CONTROL, val, priv);
77 break;
78 case GPUEB_GET_PWR_STATUS:
79 ret = mt_lp_rm_do_hwctrl(PLAT_AP_GPUEB_PWR_STATUS, 0, priv);
80 break;
81 case GPUEB_GET_MFG0_PWR_CON:
82 ret = mt_lp_rm_do_hwctrl(PLAT_AP_GPUEB_MFG0_PWR_CON, 0, priv);
83 break;
84 default:
85 ret = -1;
86 break;
87 }
88
89 return ret;
90 }
91