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