1 | /* SPDX-License-Identifier: (GPL-2.0-only OR BSD-3-Clause) */ |
2 | /* |
3 | * This file is provided under a dual BSD/GPLv2 license. When using or |
4 | * redistributing this file, you may do so under either license. |
5 | * |
6 | * Copyright(c) 2022-2023 Intel Corporation. All rights reserved. |
7 | */ |
8 | |
9 | struct hdac_bus; |
10 | struct hdac_ext_link; |
11 | |
12 | #if IS_ENABLED(CONFIG_SND_SOC_SOF_HDA_MLINK) |
13 | |
14 | int hda_bus_ml_init(struct hdac_bus *bus); |
15 | void hda_bus_ml_free(struct hdac_bus *bus); |
16 | |
17 | int hdac_bus_eml_get_count(struct hdac_bus *bus, bool alt, int elid); |
18 | void hdac_bus_eml_enable_interrupt(struct hdac_bus *bus, bool alt, int elid, bool enable); |
19 | bool hdac_bus_eml_check_interrupt(struct hdac_bus *bus, bool alt, int elid); |
20 | |
21 | int hdac_bus_eml_set_syncprd_unlocked(struct hdac_bus *bus, bool alt, int elid, u32 syncprd); |
22 | int hdac_bus_eml_sdw_set_syncprd_unlocked(struct hdac_bus *bus, u32 syncprd); |
23 | |
24 | int hdac_bus_eml_wait_syncpu_unlocked(struct hdac_bus *bus, bool alt, int elid); |
25 | int hdac_bus_eml_sdw_wait_syncpu_unlocked(struct hdac_bus *bus); |
26 | |
27 | void hdac_bus_eml_sync_arm_unlocked(struct hdac_bus *bus, bool alt, int elid, int sublink); |
28 | void hdac_bus_eml_sdw_sync_arm_unlocked(struct hdac_bus *bus, int sublink); |
29 | |
30 | int hdac_bus_eml_sync_go_unlocked(struct hdac_bus *bus, bool alt, int elid); |
31 | int hdac_bus_eml_sdw_sync_go_unlocked(struct hdac_bus *bus); |
32 | |
33 | bool hdac_bus_eml_check_cmdsync_unlocked(struct hdac_bus *bus, bool alt, int elid); |
34 | bool hdac_bus_eml_sdw_check_cmdsync_unlocked(struct hdac_bus *bus); |
35 | |
36 | int hdac_bus_eml_power_up(struct hdac_bus *bus, bool alt, int elid, int sublink); |
37 | int hdac_bus_eml_power_up_unlocked(struct hdac_bus *bus, bool alt, int elid, int sublink); |
38 | |
39 | int hdac_bus_eml_power_down(struct hdac_bus *bus, bool alt, int elid, int sublink); |
40 | int hdac_bus_eml_power_down_unlocked(struct hdac_bus *bus, bool alt, int elid, int sublink); |
41 | |
42 | int hdac_bus_eml_sdw_power_up_unlocked(struct hdac_bus *bus, int sublink); |
43 | int hdac_bus_eml_sdw_power_down_unlocked(struct hdac_bus *bus, int sublink); |
44 | |
45 | int hdac_bus_eml_sdw_get_lsdiid_unlocked(struct hdac_bus *bus, int sublink, u16 *lsdiid); |
46 | int hdac_bus_eml_sdw_set_lsdiid(struct hdac_bus *bus, int sublink, int dev_num); |
47 | |
48 | int hdac_bus_eml_sdw_map_stream_ch(struct hdac_bus *bus, int sublink, int y, |
49 | int channel_mask, int stream_id, int dir); |
50 | |
51 | void hda_bus_ml_put_all(struct hdac_bus *bus); |
52 | void hda_bus_ml_reset_losidv(struct hdac_bus *bus); |
53 | int hda_bus_ml_resume(struct hdac_bus *bus); |
54 | int hda_bus_ml_suspend(struct hdac_bus *bus); |
55 | |
56 | struct hdac_ext_link *hdac_bus_eml_ssp_get_hlink(struct hdac_bus *bus); |
57 | struct hdac_ext_link *hdac_bus_eml_dmic_get_hlink(struct hdac_bus *bus); |
58 | struct hdac_ext_link *hdac_bus_eml_sdw_get_hlink(struct hdac_bus *bus); |
59 | |
60 | struct mutex *hdac_bus_eml_get_mutex(struct hdac_bus *bus, bool alt, int elid); |
61 | |
62 | int hdac_bus_eml_enable_offload(struct hdac_bus *bus, bool alt, int elid, bool enable); |
63 | |
64 | #else |
65 | |
66 | static inline int |
67 | hda_bus_ml_init(struct hdac_bus *bus) { return 0; } |
68 | |
69 | static inline void hda_bus_ml_free(struct hdac_bus *bus) { } |
70 | |
71 | static inline int |
72 | hdac_bus_eml_get_count(struct hdac_bus *bus, bool alt, int elid) { return 0; } |
73 | |
74 | static inline void |
75 | hdac_bus_eml_enable_interrupt(struct hdac_bus *bus, bool alt, int elid, bool enable) { } |
76 | |
77 | static inline bool |
78 | hdac_bus_eml_check_interrupt(struct hdac_bus *bus, bool alt, int elid) { return false; } |
79 | |
80 | static inline int |
81 | hdac_bus_eml_set_syncprd_unlocked(struct hdac_bus *bus, bool alt, int elid, u32 syncprd) |
82 | { |
83 | return 0; |
84 | } |
85 | |
86 | static inline int |
87 | hdac_bus_eml_sdw_set_syncprd_unlocked(struct hdac_bus *bus, u32 syncprd) |
88 | { |
89 | return 0; |
90 | } |
91 | |
92 | static inline int |
93 | hdac_bus_eml_wait_syncpu_unlocked(struct hdac_bus *bus, bool alt, int elid) |
94 | { |
95 | return 0; |
96 | } |
97 | |
98 | static inline int |
99 | hdac_bus_eml_sdw_wait_syncpu_unlocked(struct hdac_bus *bus) { return 0; } |
100 | |
101 | static inline void |
102 | hdac_bus_eml_sync_arm_unlocked(struct hdac_bus *bus, bool alt, int elid, int sublink) { } |
103 | |
104 | static inline void |
105 | hdac_bus_eml_sdw_sync_arm_unlocked(struct hdac_bus *bus, int sublink) { } |
106 | |
107 | static inline int |
108 | hdac_bus_eml_sync_go_unlocked(struct hdac_bus *bus, bool alt, int elid) { return 0; } |
109 | |
110 | static inline int |
111 | hdac_bus_eml_sdw_sync_go_unlocked(struct hdac_bus *bus) { return 0; } |
112 | |
113 | static inline bool |
114 | hdac_bus_eml_check_cmdsync_unlocked(struct hdac_bus *bus, bool alt, int elid) { return false; } |
115 | |
116 | static inline bool |
117 | hdac_bus_eml_sdw_check_cmdsync_unlocked(struct hdac_bus *bus) { return false; } |
118 | |
119 | static inline int |
120 | hdac_bus_eml_power_up(struct hdac_bus *bus, bool alt, int elid, int sublink) |
121 | { |
122 | return 0; |
123 | } |
124 | |
125 | static inline int |
126 | hdac_bus_eml_power_up_unlocked(struct hdac_bus *bus, bool alt, int elid, int sublink) |
127 | { |
128 | return 0; |
129 | } |
130 | |
131 | static inline int |
132 | hdac_bus_eml_power_down(struct hdac_bus *bus, bool alt, int elid, int sublink) |
133 | { |
134 | return 0; |
135 | } |
136 | |
137 | static inline int |
138 | hdac_bus_eml_power_down_unlocked(struct hdac_bus *bus, bool alt, int elid, int sublink) |
139 | { |
140 | return 0; |
141 | } |
142 | |
143 | static inline int |
144 | hdac_bus_eml_sdw_power_up_unlocked(struct hdac_bus *bus, int sublink) { return 0; } |
145 | |
146 | static inline int |
147 | hdac_bus_eml_sdw_power_down_unlocked(struct hdac_bus *bus, int sublink) { return 0; } |
148 | |
149 | static inline int |
150 | hdac_bus_eml_sdw_get_lsdiid_unlocked(struct hdac_bus *bus, int sublink, u16 *lsdiid) { return 0; } |
151 | |
152 | static inline int |
153 | hdac_bus_eml_sdw_set_lsdiid(struct hdac_bus *bus, int sublink, int dev_num) { return 0; } |
154 | |
155 | static inline int |
156 | hdac_bus_eml_sdw_map_stream_ch(struct hdac_bus *bus, int sublink, int y, |
157 | int channel_mask, int stream_id, int dir) |
158 | { |
159 | return 0; |
160 | } |
161 | |
162 | static inline void hda_bus_ml_put_all(struct hdac_bus *bus) { } |
163 | static inline void hda_bus_ml_reset_losidv(struct hdac_bus *bus) { } |
164 | static inline int hda_bus_ml_resume(struct hdac_bus *bus) { return 0; } |
165 | static inline int hda_bus_ml_suspend(struct hdac_bus *bus) { return 0; } |
166 | |
167 | static inline struct hdac_ext_link * |
168 | hdac_bus_eml_ssp_get_hlink(struct hdac_bus *bus) { return NULL; } |
169 | |
170 | static inline struct hdac_ext_link * |
171 | hdac_bus_eml_dmic_get_hlink(struct hdac_bus *bus) { return NULL; } |
172 | |
173 | static inline struct hdac_ext_link * |
174 | hdac_bus_eml_sdw_get_hlink(struct hdac_bus *bus) { return NULL; } |
175 | |
176 | static inline struct mutex * |
177 | hdac_bus_eml_get_mutex(struct hdac_bus *bus, bool alt, int elid) { return NULL; } |
178 | |
179 | static inline int |
180 | hdac_bus_eml_enable_offload(struct hdac_bus *bus, bool alt, int elid, bool enable) |
181 | { |
182 | return 0; |
183 | } |
184 | #endif /* CONFIG_SND_SOC_SOF_HDA_MLINK */ |
185 | |