xref: /rk3399_ARM-atf/plat/mediatek/include/lpm/mt_lp_api.h (revision 79c262327aa8ccc1ae5a0ee7f7ead3bf5ce8e022)
1*917abdd9SJames Liao /*
2*917abdd9SJames Liao  * Copyright (c) 2023, MediaTek Inc. All rights reserved.
3*917abdd9SJames Liao  *
4*917abdd9SJames Liao  * SPDX-License-Identifier: BSD-3-Clause
5*917abdd9SJames Liao  */
6*917abdd9SJames Liao 
7*917abdd9SJames Liao #ifndef MT_LP_API_H
8*917abdd9SJames Liao #define MT_LP_API_H
9*917abdd9SJames Liao 
10*917abdd9SJames Liao #include <lpm/mt_lp_rm.h>
11*917abdd9SJames Liao 
12*917abdd9SJames Liao #if MTK_PUBEVENT_ENABLE
13*917abdd9SJames Liao #include <vendor_pubsub_events.h>
14*917abdd9SJames Liao #endif
15*917abdd9SJames Liao 
16*917abdd9SJames Liao /* Ufs clk enum for PLAT_RC_CLKBUF_STATUS */
17*917abdd9SJames Liao enum rc_update_ex_ufs_ref_clk {
18*917abdd9SJames Liao 	UFS_REF_CLK_OFF = 0,
19*917abdd9SJames Liao 	UFS_REF_CLK_ON,
20*917abdd9SJames Liao };
21*917abdd9SJames Liao 
22*917abdd9SJames Liao /* Enum for flight mode  */
23*917abdd9SJames Liao enum rc_update_ex_flight_mode {
24*917abdd9SJames Liao 	FLIGHT_MODE_OFF = 0,
25*917abdd9SJames Liao 	FLIGHT_MODE_ON,
26*917abdd9SJames Liao };
27*917abdd9SJames Liao 
28*917abdd9SJames Liao struct mt_lpm_pubevent_data {
29*917abdd9SJames Liao 	unsigned int u32;
30*917abdd9SJames Liao };
31*917abdd9SJames Liao 
32*917abdd9SJames Liao enum mt_lpm_pubevents_id {
33*917abdd9SJames Liao 	MT_LPM_PUBEVENTS_BBLPM_ENTER,
34*917abdd9SJames Liao 	MT_LPM_PUBEVENTS_BBLPM_LEAVE,
35*917abdd9SJames Liao 	MT_LPM_PUBEVENTS_TARGET_CORE,
36*917abdd9SJames Liao 	MT_LPM_PUBEVENTS_SYS_POWER_OFF,
37*917abdd9SJames Liao 	MT_LPM_PUBEVENTS_SYS_POWER_ON,
38*917abdd9SJames Liao };
39*917abdd9SJames Liao 
40*917abdd9SJames Liao struct mt_lp_publish_event {
41*917abdd9SJames Liao 	unsigned int id;
42*917abdd9SJames Liao 	struct mt_lpm_pubevent_data val;
43*917abdd9SJames Liao };
44*917abdd9SJames Liao 
45*917abdd9SJames Liao #if MTK_PUBEVENT_ENABLE
46*917abdd9SJames Liao #define MT_LP_PUBLISH_EVENT(x) ({\
47*917abdd9SJames Liao 	PUBLISH_EVENT_ARG(lpm_publish_event, (const void *)(x)); })
48*917abdd9SJames Liao #define MT_LP_SUSPEND_PUBLISH_EVENT(x) ({\
49*917abdd9SJames Liao 	PUBLISH_EVENT_ARG(suspend_publish_event, (const void *)(x)); })
50*917abdd9SJames Liao 
51*917abdd9SJames Liao #define MT_LP_SUBSCRIBE_SUSPEND(func)	SUBSCRIBE_TO_EVENT(suspend_publish_event, func)
52*917abdd9SJames Liao #define MT_LP_SUBSCRIBE_LPM(func)	SUBSCRIBE_TO_EVENT(lpm_publish_event, func)
53*917abdd9SJames Liao #else
54*917abdd9SJames Liao #define MT_LP_PUBLISH_EVENT(x) ({ (void)x; })
55*917abdd9SJames Liao #define MT_LP_SUSPEND_PUBLISH_EVENT(x) ({ (void)x; })
56*917abdd9SJames Liao #define MT_LP_SUBSCRIBE_SUSPEND(func)
57*917abdd9SJames Liao #define MT_LP_SUBSCRIBE_LPM(func)
58*917abdd9SJames Liao #endif
59*917abdd9SJames Liao 
60*917abdd9SJames Liao /* MTK low power API types for audio */
61*917abdd9SJames Liao enum mt_lp_api_audio_type {
62*917abdd9SJames Liao 	AUDIO_AFE_ENTER,
63*917abdd9SJames Liao 	AUDIO_AFE_LEAVE,
64*917abdd9SJames Liao 	AUDIO_DSP_ENTER,
65*917abdd9SJames Liao 	AUDIO_DSP_LEAVE,
66*917abdd9SJames Liao };
67*917abdd9SJames Liao 
68*917abdd9SJames Liao /* MTK low power API types for usb */
69*917abdd9SJames Liao enum mt_lp_api_usb_type {
70*917abdd9SJames Liao 	LPM_USB_ENTER,
71*917abdd9SJames Liao 	LPM_USB_LEAVE,
72*917abdd9SJames Liao };
73*917abdd9SJames Liao 
74*917abdd9SJames Liao int mt_audio_update(int type);
75*917abdd9SJames Liao int mtk_usb_update(int type);
76*917abdd9SJames Liao 
77*917abdd9SJames Liao #endif /* MT_LP_API_H */
78