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