blob: f3a756b5bca37f322235c6e9ba165692a2f8a8d7 [file] [log] [blame]
Asish Bhattacharya8e2277f2017-07-20 18:31:55 +05301/* Copyright (c) 2012-2017, The Linux Foundation. All rights reserved.
2 *
3 * This program is free software; you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License version 2 and
5 * only version 2 as published by the Free Software Foundation.
6 *
7 * This program is distributed in the hope that it will be useful,
8 * but WITHOUT ANY WARRANTY; without even the implied warranty of
9 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10 * GNU General Public License for more details.
11 */
12
13#include <linux/slab.h>
14#include <linux/wait.h>
15#include <linux/sched.h>
16#include <linux/jiffies.h>
17#include <linux/uaccess.h>
18#include <linux/atomic.h>
Laxminath Kasam605b42f2017-08-01 22:02:15 +053019#include <dsp/q6afe-v2.h>
20#include <dsp/q6audio-v2.h>
Asish Bhattacharya8e2277f2017-07-20 18:31:55 +053021
22int q6audio_get_port_index(u16 port_id)
23{
24 switch (port_id) {
25 case PRIMARY_I2S_RX: return IDX_PRIMARY_I2S_RX;
26 case PRIMARY_I2S_TX: return IDX_PRIMARY_I2S_TX;
27 case AFE_PORT_ID_PRIMARY_PCM_RX:
28 return IDX_AFE_PORT_ID_PRIMARY_PCM_RX;
29 case AFE_PORT_ID_PRIMARY_PCM_TX:
30 return IDX_AFE_PORT_ID_PRIMARY_PCM_TX;
31 case AFE_PORT_ID_SECONDARY_PCM_RX:
32 return IDX_AFE_PORT_ID_SECONDARY_PCM_RX;
33 case AFE_PORT_ID_SECONDARY_PCM_TX:
34 return IDX_AFE_PORT_ID_SECONDARY_PCM_TX;
35 case AFE_PORT_ID_TERTIARY_PCM_RX:
36 return IDX_AFE_PORT_ID_TERTIARY_PCM_RX;
37 case AFE_PORT_ID_TERTIARY_PCM_TX:
38 return IDX_AFE_PORT_ID_TERTIARY_PCM_TX;
39 case AFE_PORT_ID_QUATERNARY_PCM_RX:
40 return IDX_AFE_PORT_ID_QUATERNARY_PCM_RX;
41 case AFE_PORT_ID_QUATERNARY_PCM_TX:
42 return IDX_AFE_PORT_ID_QUATERNARY_PCM_TX;
Rohit kumarebce3d92017-10-16 15:38:41 +053043 case AFE_PORT_ID_QUINARY_PCM_RX:
44 return IDX_AFE_PORT_ID_QUINARY_PCM_RX;
45 case AFE_PORT_ID_QUINARY_PCM_TX:
46 return IDX_AFE_PORT_ID_QUINARY_PCM_TX;
Asish Bhattacharya8e2277f2017-07-20 18:31:55 +053047 case SECONDARY_I2S_RX: return IDX_SECONDARY_I2S_RX;
48 case SECONDARY_I2S_TX: return IDX_SECONDARY_I2S_TX;
49 case MI2S_RX: return IDX_MI2S_RX;
50 case MI2S_TX: return IDX_MI2S_TX;
51 case HDMI_RX: return IDX_HDMI_RX;
52 case DISPLAY_PORT_RX: return IDX_DISPLAY_PORT_RX;
53 case AFE_PORT_ID_SPDIF_RX: return IDX_SPDIF_RX;
54 case RSVD_2: return IDX_RSVD_2;
55 case RSVD_3: return IDX_RSVD_3;
56 case DIGI_MIC_TX: return IDX_DIGI_MIC_TX;
57 case VOICE_RECORD_RX: return IDX_VOICE_RECORD_RX;
58 case VOICE_RECORD_TX: return IDX_VOICE_RECORD_TX;
59 case VOICE_PLAYBACK_TX: return IDX_VOICE_PLAYBACK_TX;
60 case VOICE2_PLAYBACK_TX: return IDX_VOICE2_PLAYBACK_TX;
61 case SLIMBUS_0_RX: return IDX_SLIMBUS_0_RX;
62 case SLIMBUS_0_TX: return IDX_SLIMBUS_0_TX;
63 case SLIMBUS_1_RX: return IDX_SLIMBUS_1_RX;
64 case SLIMBUS_1_TX: return IDX_SLIMBUS_1_TX;
65 case SLIMBUS_2_RX: return IDX_SLIMBUS_2_RX;
66 case SLIMBUS_2_TX: return IDX_SLIMBUS_2_TX;
67 case SLIMBUS_3_RX: return IDX_SLIMBUS_3_RX;
68 case SLIMBUS_3_TX: return IDX_SLIMBUS_3_TX;
69 case SLIMBUS_4_RX: return IDX_SLIMBUS_4_RX;
70 case SLIMBUS_4_TX: return IDX_SLIMBUS_4_TX;
71 case SLIMBUS_5_RX: return IDX_SLIMBUS_5_RX;
72 case SLIMBUS_5_TX: return IDX_SLIMBUS_5_TX;
73 case SLIMBUS_6_RX: return IDX_SLIMBUS_6_RX;
74 case SLIMBUS_6_TX: return IDX_SLIMBUS_6_TX;
75 case SLIMBUS_7_RX: return IDX_SLIMBUS_7_RX;
76 case SLIMBUS_7_TX: return IDX_SLIMBUS_7_TX;
77 case SLIMBUS_8_RX: return IDX_SLIMBUS_8_RX;
78 case SLIMBUS_8_TX: return IDX_SLIMBUS_8_TX;
79 case INT_BT_SCO_RX: return IDX_INT_BT_SCO_RX;
80 case INT_BT_SCO_TX: return IDX_INT_BT_SCO_TX;
81 case INT_BT_A2DP_RX: return IDX_INT_BT_A2DP_RX;
82 case INT_FM_RX: return IDX_INT_FM_RX;
83 case INT_FM_TX: return IDX_INT_FM_TX;
84 case RT_PROXY_PORT_001_RX: return IDX_RT_PROXY_PORT_001_RX;
85 case RT_PROXY_PORT_001_TX: return IDX_RT_PROXY_PORT_001_TX;
86 case AFE_PORT_ID_PRIMARY_MI2S_RX:
87 return IDX_AFE_PORT_ID_PRIMARY_MI2S_RX;
88 case AFE_PORT_ID_PRIMARY_MI2S_TX:
89 return IDX_AFE_PORT_ID_PRIMARY_MI2S_TX;
90 case AFE_PORT_ID_QUATERNARY_MI2S_RX:
91 return IDX_AFE_PORT_ID_QUATERNARY_MI2S_RX;
92 case AFE_PORT_ID_QUATERNARY_MI2S_TX:
93 return IDX_AFE_PORT_ID_QUATERNARY_MI2S_TX;
94 case AFE_PORT_ID_SECONDARY_MI2S_RX:
95 return IDX_AFE_PORT_ID_SECONDARY_MI2S_RX;
96 case AFE_PORT_ID_SECONDARY_MI2S_TX:
97 return IDX_AFE_PORT_ID_SECONDARY_MI2S_TX;
98 case AFE_PORT_ID_TERTIARY_MI2S_RX:
99 return IDX_AFE_PORT_ID_TERTIARY_MI2S_RX;
100 case AFE_PORT_ID_TERTIARY_MI2S_TX:
101 return IDX_AFE_PORT_ID_TERTIARY_MI2S_TX;
Rohit kumarebce3d92017-10-16 15:38:41 +0530102 case AFE_PORT_ID_QUINARY_MI2S_RX:
103 return IDX_AFE_PORT_ID_QUINARY_MI2S_RX;
104 case AFE_PORT_ID_QUINARY_MI2S_TX:
105 return IDX_AFE_PORT_ID_QUINARY_MI2S_TX;
Asish Bhattacharya8e2277f2017-07-20 18:31:55 +0530106 case AUDIO_PORT_ID_I2S_RX:
107 return IDX_AUDIO_PORT_ID_I2S_RX;
108 case AFE_PORT_ID_SECONDARY_MI2S_RX_SD1:
109 return IDX_AFE_PORT_ID_SECONDARY_MI2S_RX_SD1;
110 case AFE_PORT_ID_PRIMARY_TDM_RX:
111 return IDX_AFE_PORT_ID_PRIMARY_TDM_RX_0;
112 case AFE_PORT_ID_PRIMARY_TDM_TX:
113 return IDX_AFE_PORT_ID_PRIMARY_TDM_TX_0;
114 case AFE_PORT_ID_PRIMARY_TDM_RX_1:
115 return IDX_AFE_PORT_ID_PRIMARY_TDM_RX_1;
116 case AFE_PORT_ID_PRIMARY_TDM_TX_1:
117 return IDX_AFE_PORT_ID_PRIMARY_TDM_TX_1;
118 case AFE_PORT_ID_PRIMARY_TDM_RX_2:
119 return IDX_AFE_PORT_ID_PRIMARY_TDM_RX_2;
120 case AFE_PORT_ID_PRIMARY_TDM_TX_2:
121 return IDX_AFE_PORT_ID_PRIMARY_TDM_TX_2;
122 case AFE_PORT_ID_PRIMARY_TDM_RX_3:
123 return IDX_AFE_PORT_ID_PRIMARY_TDM_RX_3;
124 case AFE_PORT_ID_PRIMARY_TDM_TX_3:
125 return IDX_AFE_PORT_ID_PRIMARY_TDM_TX_3;
126 case AFE_PORT_ID_PRIMARY_TDM_RX_4:
127 return IDX_AFE_PORT_ID_PRIMARY_TDM_RX_4;
128 case AFE_PORT_ID_PRIMARY_TDM_TX_4:
129 return IDX_AFE_PORT_ID_PRIMARY_TDM_TX_4;
130 case AFE_PORT_ID_PRIMARY_TDM_RX_5:
131 return IDX_AFE_PORT_ID_PRIMARY_TDM_RX_5;
132 case AFE_PORT_ID_PRIMARY_TDM_TX_5:
133 return IDX_AFE_PORT_ID_PRIMARY_TDM_TX_5;
134 case AFE_PORT_ID_PRIMARY_TDM_RX_6:
135 return IDX_AFE_PORT_ID_PRIMARY_TDM_RX_6;
136 case AFE_PORT_ID_PRIMARY_TDM_TX_6:
137 return IDX_AFE_PORT_ID_PRIMARY_TDM_TX_6;
138 case AFE_PORT_ID_PRIMARY_TDM_RX_7:
139 return IDX_AFE_PORT_ID_PRIMARY_TDM_RX_7;
140 case AFE_PORT_ID_PRIMARY_TDM_TX_7:
141 return IDX_AFE_PORT_ID_PRIMARY_TDM_TX_7;
142 case AFE_PORT_ID_SECONDARY_TDM_RX:
143 return IDX_AFE_PORT_ID_SECONDARY_TDM_RX_0;
144 case AFE_PORT_ID_SECONDARY_TDM_TX:
145 return IDX_AFE_PORT_ID_SECONDARY_TDM_TX_0;
146 case AFE_PORT_ID_SECONDARY_TDM_RX_1:
147 return IDX_AFE_PORT_ID_SECONDARY_TDM_RX_1;
148 case AFE_PORT_ID_SECONDARY_TDM_TX_1:
149 return IDX_AFE_PORT_ID_SECONDARY_TDM_TX_1;
150 case AFE_PORT_ID_SECONDARY_TDM_RX_2:
151 return IDX_AFE_PORT_ID_SECONDARY_TDM_RX_2;
152 case AFE_PORT_ID_SECONDARY_TDM_TX_2:
153 return IDX_AFE_PORT_ID_SECONDARY_TDM_TX_2;
154 case AFE_PORT_ID_SECONDARY_TDM_RX_3:
155 return IDX_AFE_PORT_ID_SECONDARY_TDM_RX_3;
156 case AFE_PORT_ID_SECONDARY_TDM_TX_3:
157 return IDX_AFE_PORT_ID_SECONDARY_TDM_TX_3;
158 case AFE_PORT_ID_SECONDARY_TDM_RX_4:
159 return IDX_AFE_PORT_ID_SECONDARY_TDM_RX_4;
160 case AFE_PORT_ID_SECONDARY_TDM_TX_4:
161 return IDX_AFE_PORT_ID_SECONDARY_TDM_TX_4;
162 case AFE_PORT_ID_SECONDARY_TDM_RX_5:
163 return IDX_AFE_PORT_ID_SECONDARY_TDM_RX_5;
164 case AFE_PORT_ID_SECONDARY_TDM_TX_5:
165 return IDX_AFE_PORT_ID_SECONDARY_TDM_TX_5;
166 case AFE_PORT_ID_SECONDARY_TDM_RX_6:
167 return IDX_AFE_PORT_ID_SECONDARY_TDM_RX_6;
168 case AFE_PORT_ID_SECONDARY_TDM_TX_6:
169 return IDX_AFE_PORT_ID_SECONDARY_TDM_TX_6;
170 case AFE_PORT_ID_SECONDARY_TDM_RX_7:
171 return IDX_AFE_PORT_ID_SECONDARY_TDM_RX_7;
172 case AFE_PORT_ID_SECONDARY_TDM_TX_7:
173 return IDX_AFE_PORT_ID_SECONDARY_TDM_TX_7;
174 case AFE_PORT_ID_TERTIARY_TDM_RX:
175 return IDX_AFE_PORT_ID_TERTIARY_TDM_RX_0;
176 case AFE_PORT_ID_TERTIARY_TDM_TX:
177 return IDX_AFE_PORT_ID_TERTIARY_TDM_TX_0;
178 case AFE_PORT_ID_TERTIARY_TDM_RX_1:
179 return IDX_AFE_PORT_ID_TERTIARY_TDM_RX_1;
180 case AFE_PORT_ID_TERTIARY_TDM_TX_1:
181 return IDX_AFE_PORT_ID_TERTIARY_TDM_TX_1;
182 case AFE_PORT_ID_TERTIARY_TDM_RX_2:
183 return IDX_AFE_PORT_ID_TERTIARY_TDM_RX_2;
184 case AFE_PORT_ID_TERTIARY_TDM_TX_2:
185 return IDX_AFE_PORT_ID_TERTIARY_TDM_TX_2;
186 case AFE_PORT_ID_TERTIARY_TDM_RX_3:
187 return IDX_AFE_PORT_ID_TERTIARY_TDM_RX_3;
188 case AFE_PORT_ID_TERTIARY_TDM_TX_3:
189 return IDX_AFE_PORT_ID_TERTIARY_TDM_TX_3;
190 case AFE_PORT_ID_TERTIARY_TDM_RX_4:
191 return IDX_AFE_PORT_ID_TERTIARY_TDM_RX_4;
192 case AFE_PORT_ID_TERTIARY_TDM_TX_4:
193 return IDX_AFE_PORT_ID_TERTIARY_TDM_TX_4;
194 case AFE_PORT_ID_TERTIARY_TDM_RX_5:
195 return IDX_AFE_PORT_ID_TERTIARY_TDM_RX_5;
196 case AFE_PORT_ID_TERTIARY_TDM_TX_5:
197 return IDX_AFE_PORT_ID_TERTIARY_TDM_TX_5;
198 case AFE_PORT_ID_TERTIARY_TDM_RX_6:
199 return IDX_AFE_PORT_ID_TERTIARY_TDM_RX_6;
200 case AFE_PORT_ID_TERTIARY_TDM_TX_6:
201 return IDX_AFE_PORT_ID_TERTIARY_TDM_TX_6;
202 case AFE_PORT_ID_TERTIARY_TDM_RX_7:
203 return IDX_AFE_PORT_ID_TERTIARY_TDM_RX_7;
204 case AFE_PORT_ID_TERTIARY_TDM_TX_7:
205 return IDX_AFE_PORT_ID_TERTIARY_TDM_TX_7;
206 case AFE_PORT_ID_QUATERNARY_TDM_RX:
207 return IDX_AFE_PORT_ID_QUATERNARY_TDM_RX_0;
208 case AFE_PORT_ID_QUATERNARY_TDM_TX:
209 return IDX_AFE_PORT_ID_QUATERNARY_TDM_TX_0;
210 case AFE_PORT_ID_QUATERNARY_TDM_RX_1:
211 return IDX_AFE_PORT_ID_QUATERNARY_TDM_RX_1;
212 case AFE_PORT_ID_QUATERNARY_TDM_TX_1:
213 return IDX_AFE_PORT_ID_QUATERNARY_TDM_TX_1;
214 case AFE_PORT_ID_QUATERNARY_TDM_RX_2:
215 return IDX_AFE_PORT_ID_QUATERNARY_TDM_RX_2;
216 case AFE_PORT_ID_QUATERNARY_TDM_TX_2:
217 return IDX_AFE_PORT_ID_QUATERNARY_TDM_TX_2;
218 case AFE_PORT_ID_QUATERNARY_TDM_RX_3:
219 return IDX_AFE_PORT_ID_QUATERNARY_TDM_RX_3;
220 case AFE_PORT_ID_QUATERNARY_TDM_TX_3:
221 return IDX_AFE_PORT_ID_QUATERNARY_TDM_TX_3;
222 case AFE_PORT_ID_QUATERNARY_TDM_RX_4:
223 return IDX_AFE_PORT_ID_QUATERNARY_TDM_RX_4;
224 case AFE_PORT_ID_QUATERNARY_TDM_TX_4:
225 return IDX_AFE_PORT_ID_QUATERNARY_TDM_TX_4;
226 case AFE_PORT_ID_QUATERNARY_TDM_RX_5:
227 return IDX_AFE_PORT_ID_QUATERNARY_TDM_RX_5;
228 case AFE_PORT_ID_QUATERNARY_TDM_TX_5:
229 return IDX_AFE_PORT_ID_QUATERNARY_TDM_TX_5;
230 case AFE_PORT_ID_QUATERNARY_TDM_RX_6:
231 return IDX_AFE_PORT_ID_QUATERNARY_TDM_RX_6;
232 case AFE_PORT_ID_QUATERNARY_TDM_TX_6:
233 return IDX_AFE_PORT_ID_QUATERNARY_TDM_TX_6;
234 case AFE_PORT_ID_QUATERNARY_TDM_RX_7:
235 return IDX_AFE_PORT_ID_QUATERNARY_TDM_RX_7;
236 case AFE_PORT_ID_QUATERNARY_TDM_TX_7:
237 return IDX_AFE_PORT_ID_QUATERNARY_TDM_TX_7;
Rohit kumarebce3d92017-10-16 15:38:41 +0530238 case AFE_PORT_ID_QUINARY_TDM_RX:
239 return IDX_AFE_PORT_ID_QUINARY_TDM_RX_0;
240 case AFE_PORT_ID_QUINARY_TDM_TX:
241 return IDX_AFE_PORT_ID_QUINARY_TDM_TX_0;
242 case AFE_PORT_ID_QUINARY_TDM_RX_1:
243 return IDX_AFE_PORT_ID_QUINARY_TDM_RX_1;
244 case AFE_PORT_ID_QUINARY_TDM_TX_1:
245 return IDX_AFE_PORT_ID_QUINARY_TDM_TX_1;
246 case AFE_PORT_ID_QUINARY_TDM_RX_2:
247 return IDX_AFE_PORT_ID_QUINARY_TDM_RX_2;
248 case AFE_PORT_ID_QUINARY_TDM_TX_2:
249 return IDX_AFE_PORT_ID_QUINARY_TDM_TX_2;
250 case AFE_PORT_ID_QUINARY_TDM_RX_3:
251 return IDX_AFE_PORT_ID_QUINARY_TDM_RX_3;
252 case AFE_PORT_ID_QUINARY_TDM_TX_3:
253 return IDX_AFE_PORT_ID_QUINARY_TDM_TX_3;
254 case AFE_PORT_ID_QUINARY_TDM_RX_4:
255 return IDX_AFE_PORT_ID_QUINARY_TDM_RX_4;
256 case AFE_PORT_ID_QUINARY_TDM_TX_4:
257 return IDX_AFE_PORT_ID_QUINARY_TDM_TX_4;
258 case AFE_PORT_ID_QUINARY_TDM_RX_5:
259 return IDX_AFE_PORT_ID_QUINARY_TDM_RX_5;
260 case AFE_PORT_ID_QUINARY_TDM_TX_5:
261 return IDX_AFE_PORT_ID_QUINARY_TDM_TX_5;
262 case AFE_PORT_ID_QUINARY_TDM_RX_6:
263 return IDX_AFE_PORT_ID_QUINARY_TDM_RX_6;
264 case AFE_PORT_ID_QUINARY_TDM_TX_6:
265 return IDX_AFE_PORT_ID_QUINARY_TDM_TX_6;
266 case AFE_PORT_ID_QUINARY_TDM_RX_7:
267 return IDX_AFE_PORT_ID_QUINARY_TDM_RX_7;
268 case AFE_PORT_ID_QUINARY_TDM_TX_7:
269 return IDX_AFE_PORT_ID_QUINARY_TDM_TX_7;
Asish Bhattacharya8e2277f2017-07-20 18:31:55 +0530270 case AFE_PORT_ID_SENARY_MI2S_TX:
271 return IDX_AFE_PORT_ID_SENARY_MI2S_TX;
272 case AFE_PORT_ID_USB_RX:
273 return IDX_AFE_PORT_ID_USB_RX;
274 case AFE_PORT_ID_USB_TX:
275 return IDX_AFE_PORT_ID_USB_TX;
276 case AFE_PORT_ID_INT0_MI2S_RX:
277 return IDX_AFE_PORT_ID_INT0_MI2S_RX;
278 case AFE_PORT_ID_INT0_MI2S_TX:
279 return IDX_AFE_PORT_ID_INT0_MI2S_TX;
280 case AFE_PORT_ID_INT1_MI2S_RX:
281 return IDX_AFE_PORT_ID_INT1_MI2S_RX;
282 case AFE_PORT_ID_INT1_MI2S_TX:
283 return IDX_AFE_PORT_ID_INT1_MI2S_TX;
284 case AFE_PORT_ID_INT2_MI2S_RX:
285 return IDX_AFE_PORT_ID_INT2_MI2S_RX;
286 case AFE_PORT_ID_INT2_MI2S_TX:
287 return IDX_AFE_PORT_ID_INT2_MI2S_TX;
288 case AFE_PORT_ID_INT3_MI2S_RX:
289 return IDX_AFE_PORT_ID_INT3_MI2S_RX;
290 case AFE_PORT_ID_INT3_MI2S_TX:
291 return IDX_AFE_PORT_ID_INT3_MI2S_TX;
292 case AFE_PORT_ID_INT4_MI2S_RX:
293 return IDX_AFE_PORT_ID_INT4_MI2S_RX;
294 case AFE_PORT_ID_INT4_MI2S_TX:
295 return IDX_AFE_PORT_ID_INT4_MI2S_TX;
296 case AFE_PORT_ID_INT5_MI2S_RX:
297 return IDX_AFE_PORT_ID_INT5_MI2S_RX;
298 case AFE_PORT_ID_INT5_MI2S_TX:
299 return IDX_AFE_PORT_ID_INT5_MI2S_TX;
300 case AFE_PORT_ID_INT6_MI2S_RX:
301 return IDX_AFE_PORT_ID_INT6_MI2S_RX;
302 case AFE_PORT_ID_INT6_MI2S_TX:
303 return IDX_AFE_PORT_ID_INT6_MI2S_TX;
304 default: return -EINVAL;
305 }
306}
307
308int q6audio_get_port_id(u16 port_id)
309{
310 switch (port_id) {
311 case PRIMARY_I2S_RX: return PRIMARY_I2S_RX;
312 case PRIMARY_I2S_TX: return PRIMARY_I2S_TX;
313 case AFE_PORT_ID_PRIMARY_PCM_RX:
314 return AFE_PORT_ID_PRIMARY_PCM_RX;
315 case AFE_PORT_ID_PRIMARY_PCM_TX:
316 return AFE_PORT_ID_PRIMARY_PCM_TX;
317 case AFE_PORT_ID_SECONDARY_PCM_RX:
318 return AFE_PORT_ID_SECONDARY_PCM_RX;
319 case AFE_PORT_ID_SECONDARY_PCM_TX:
320 return AFE_PORT_ID_SECONDARY_PCM_TX;
321 case AFE_PORT_ID_TERTIARY_PCM_RX:
322 return AFE_PORT_ID_TERTIARY_PCM_RX;
323 case AFE_PORT_ID_TERTIARY_PCM_TX:
324 return AFE_PORT_ID_TERTIARY_PCM_TX;
325 case AFE_PORT_ID_QUATERNARY_PCM_RX:
326 return AFE_PORT_ID_QUATERNARY_PCM_RX;
327 case AFE_PORT_ID_QUATERNARY_PCM_TX:
328 return AFE_PORT_ID_QUATERNARY_PCM_TX;
Rohit kumarebce3d92017-10-16 15:38:41 +0530329 case AFE_PORT_ID_QUINARY_PCM_RX:
330 return AFE_PORT_ID_QUINARY_PCM_RX;
331 case AFE_PORT_ID_QUINARY_PCM_TX:
332 return AFE_PORT_ID_QUINARY_PCM_TX;
Asish Bhattacharya8e2277f2017-07-20 18:31:55 +0530333 case SECONDARY_I2S_RX: return AFE_PORT_ID_SECONDARY_MI2S_RX;
334 case SECONDARY_I2S_TX: return AFE_PORT_ID_SECONDARY_MI2S_TX;
335 case MI2S_RX: return AFE_PORT_ID_PRIMARY_MI2S_RX;
336 case MI2S_TX: return AFE_PORT_ID_PRIMARY_MI2S_TX;
337 case HDMI_RX: return AFE_PORT_ID_MULTICHAN_HDMI_RX;
338 case DISPLAY_PORT_RX:
339 return AFE_PORT_ID_HDMI_OVER_DP_RX;
340 case AFE_PORT_ID_SPDIF_RX: return AFE_PORT_ID_SPDIF_RX;
341 case RSVD_2: return IDX_RSVD_2;
342 case RSVD_3: return IDX_RSVD_3;
343 case DIGI_MIC_TX: return AFE_PORT_ID_DIGITAL_MIC_TX;
344 case VOICE_RECORD_RX: return AFE_PORT_ID_VOICE_RECORD_RX;
345 case VOICE_RECORD_TX: return AFE_PORT_ID_VOICE_RECORD_TX;
346 case VOICE_PLAYBACK_TX: return AFE_PORT_ID_VOICE_PLAYBACK_TX;
347 case VOICE2_PLAYBACK_TX: return AFE_PORT_ID_VOICE2_PLAYBACK_TX;
348 case SLIMBUS_0_RX: return AFE_PORT_ID_SLIMBUS_MULTI_CHAN_0_RX;
349 case SLIMBUS_0_TX: return AFE_PORT_ID_SLIMBUS_MULTI_CHAN_0_TX;
350 case SLIMBUS_1_RX: return AFE_PORT_ID_SLIMBUS_MULTI_CHAN_1_RX;
351 case SLIMBUS_1_TX: return AFE_PORT_ID_SLIMBUS_MULTI_CHAN_1_TX;
352 case SLIMBUS_2_RX: return AFE_PORT_ID_SLIMBUS_MULTI_CHAN_2_RX;
353 case SLIMBUS_2_TX: return AFE_PORT_ID_SLIMBUS_MULTI_CHAN_2_TX;
354 case SLIMBUS_3_RX: return AFE_PORT_ID_SLIMBUS_MULTI_CHAN_3_RX;
355 case SLIMBUS_3_TX: return AFE_PORT_ID_SLIMBUS_MULTI_CHAN_3_TX;
356 case SLIMBUS_4_RX: return AFE_PORT_ID_SLIMBUS_MULTI_CHAN_4_RX;
357 case SLIMBUS_4_TX: return AFE_PORT_ID_SLIMBUS_MULTI_CHAN_4_TX;
358 case SLIMBUS_5_RX: return AFE_PORT_ID_SLIMBUS_MULTI_CHAN_5_RX;
359 case SLIMBUS_5_TX: return AFE_PORT_ID_SLIMBUS_MULTI_CHAN_5_TX;
360 case SLIMBUS_6_RX: return AFE_PORT_ID_SLIMBUS_MULTI_CHAN_6_RX;
361 case SLIMBUS_6_TX: return AFE_PORT_ID_SLIMBUS_MULTI_CHAN_6_TX;
362 case SLIMBUS_7_RX: return AFE_PORT_ID_SLIMBUS_MULTI_CHAN_7_RX;
363 case SLIMBUS_7_TX: return AFE_PORT_ID_SLIMBUS_MULTI_CHAN_7_TX;
364 case SLIMBUS_8_RX: return AFE_PORT_ID_SLIMBUS_MULTI_CHAN_8_RX;
365 case SLIMBUS_8_TX: return AFE_PORT_ID_SLIMBUS_MULTI_CHAN_8_TX;
366 case INT_BT_SCO_RX: return AFE_PORT_ID_INTERNAL_BT_SCO_RX;
367 case INT_BT_SCO_TX: return AFE_PORT_ID_INTERNAL_BT_SCO_TX;
368 case INT_BT_A2DP_RX: return AFE_PORT_ID_INTERNAL_BT_A2DP_RX;
369 case INT_FM_RX: return AFE_PORT_ID_INTERNAL_FM_RX;
370 case INT_FM_TX: return AFE_PORT_ID_INTERNAL_FM_TX;
371 case RT_PROXY_PORT_001_RX: return AFE_PORT_ID_RT_PROXY_PORT_001_RX;
372 case RT_PROXY_PORT_001_TX: return AFE_PORT_ID_RT_PROXY_PORT_001_TX;
373 case AFE_PORT_ID_PRIMARY_MI2S_RX:
374 return AFE_PORT_ID_PRIMARY_MI2S_RX;
375 case AFE_PORT_ID_PRIMARY_MI2S_TX:
376 return AFE_PORT_ID_PRIMARY_MI2S_TX;
377 case AFE_PORT_ID_QUATERNARY_MI2S_RX:
378 return AFE_PORT_ID_QUATERNARY_MI2S_RX;
379 case AFE_PORT_ID_QUATERNARY_MI2S_TX:
380 return AFE_PORT_ID_QUATERNARY_MI2S_TX;
381 case AFE_PORT_ID_SECONDARY_MI2S_RX:
382 return AFE_PORT_ID_SECONDARY_MI2S_RX;
383 case AFE_PORT_ID_SECONDARY_MI2S_TX:
384 return AFE_PORT_ID_SECONDARY_MI2S_TX;
385 case AFE_PORT_ID_TERTIARY_MI2S_RX:
386 return AFE_PORT_ID_TERTIARY_MI2S_RX;
387 case AFE_PORT_ID_TERTIARY_MI2S_TX:
388 return AFE_PORT_ID_TERTIARY_MI2S_TX;
Rohit kumarebce3d92017-10-16 15:38:41 +0530389 case AFE_PORT_ID_QUINARY_MI2S_RX:
390 return AFE_PORT_ID_QUINARY_MI2S_RX;
391 case AFE_PORT_ID_QUINARY_MI2S_TX:
392 return AFE_PORT_ID_QUINARY_MI2S_TX;
Asish Bhattacharya8e2277f2017-07-20 18:31:55 +0530393 case AUDIO_PORT_ID_I2S_RX:
394 return AUDIO_PORT_ID_I2S_RX;
395 case AFE_PORT_ID_SECONDARY_MI2S_RX_SD1:
396 return AFE_PORT_ID_SECONDARY_MI2S_RX_SD1;
397 case AFE_PORT_ID_PRIMARY_TDM_RX:
398 return AFE_PORT_ID_PRIMARY_TDM_RX;
399 case AFE_PORT_ID_PRIMARY_TDM_TX:
400 return AFE_PORT_ID_PRIMARY_TDM_TX;
401 case AFE_PORT_ID_PRIMARY_TDM_RX_1:
402 return AFE_PORT_ID_PRIMARY_TDM_RX_1;
403 case AFE_PORT_ID_PRIMARY_TDM_TX_1:
404 return AFE_PORT_ID_PRIMARY_TDM_TX_1;
405 case AFE_PORT_ID_PRIMARY_TDM_RX_2:
406 return AFE_PORT_ID_PRIMARY_TDM_RX_2;
407 case AFE_PORT_ID_PRIMARY_TDM_TX_2:
408 return AFE_PORT_ID_PRIMARY_TDM_TX_2;
409 case AFE_PORT_ID_PRIMARY_TDM_RX_3:
410 return AFE_PORT_ID_PRIMARY_TDM_RX_3;
411 case AFE_PORT_ID_PRIMARY_TDM_TX_3:
412 return AFE_PORT_ID_PRIMARY_TDM_TX_3;
413 case AFE_PORT_ID_PRIMARY_TDM_RX_4:
414 return AFE_PORT_ID_PRIMARY_TDM_RX_4;
415 case AFE_PORT_ID_PRIMARY_TDM_TX_4:
416 return AFE_PORT_ID_PRIMARY_TDM_TX_4;
417 case AFE_PORT_ID_PRIMARY_TDM_RX_5:
418 return AFE_PORT_ID_PRIMARY_TDM_RX_5;
419 case AFE_PORT_ID_PRIMARY_TDM_TX_5:
420 return AFE_PORT_ID_PRIMARY_TDM_TX_5;
421 case AFE_PORT_ID_PRIMARY_TDM_RX_6:
422 return AFE_PORT_ID_PRIMARY_TDM_RX_6;
423 case AFE_PORT_ID_PRIMARY_TDM_TX_6:
424 return AFE_PORT_ID_PRIMARY_TDM_TX_6;
425 case AFE_PORT_ID_PRIMARY_TDM_RX_7:
426 return AFE_PORT_ID_PRIMARY_TDM_RX_7;
427 case AFE_PORT_ID_PRIMARY_TDM_TX_7:
428 return AFE_PORT_ID_PRIMARY_TDM_TX_7;
429 case AFE_PORT_ID_SECONDARY_TDM_RX:
430 return AFE_PORT_ID_SECONDARY_TDM_RX;
431 case AFE_PORT_ID_SECONDARY_TDM_TX:
432 return AFE_PORT_ID_SECONDARY_TDM_TX;
433 case AFE_PORT_ID_SECONDARY_TDM_RX_1:
434 return AFE_PORT_ID_SECONDARY_TDM_RX_1;
435 case AFE_PORT_ID_SECONDARY_TDM_TX_1:
436 return AFE_PORT_ID_SECONDARY_TDM_TX_1;
437 case AFE_PORT_ID_SECONDARY_TDM_RX_2:
438 return AFE_PORT_ID_SECONDARY_TDM_RX_2;
439 case AFE_PORT_ID_SECONDARY_TDM_TX_2:
440 return AFE_PORT_ID_SECONDARY_TDM_TX_2;
441 case AFE_PORT_ID_SECONDARY_TDM_RX_3:
442 return AFE_PORT_ID_SECONDARY_TDM_RX_3;
443 case AFE_PORT_ID_SECONDARY_TDM_TX_3:
444 return AFE_PORT_ID_SECONDARY_TDM_TX_3;
445 case AFE_PORT_ID_SECONDARY_TDM_RX_4:
446 return AFE_PORT_ID_SECONDARY_TDM_RX_4;
447 case AFE_PORT_ID_SECONDARY_TDM_TX_4:
448 return AFE_PORT_ID_SECONDARY_TDM_TX_4;
449 case AFE_PORT_ID_SECONDARY_TDM_RX_5:
450 return AFE_PORT_ID_SECONDARY_TDM_RX_5;
451 case AFE_PORT_ID_SECONDARY_TDM_TX_5:
452 return AFE_PORT_ID_SECONDARY_TDM_TX_5;
453 case AFE_PORT_ID_SECONDARY_TDM_RX_6:
454 return AFE_PORT_ID_SECONDARY_TDM_RX_6;
455 case AFE_PORT_ID_SECONDARY_TDM_TX_6:
456 return AFE_PORT_ID_SECONDARY_TDM_TX_6;
457 case AFE_PORT_ID_SECONDARY_TDM_RX_7:
458 return AFE_PORT_ID_SECONDARY_TDM_RX_7;
459 case AFE_PORT_ID_SECONDARY_TDM_TX_7:
460 return AFE_PORT_ID_SECONDARY_TDM_TX_7;
461 case AFE_PORT_ID_TERTIARY_TDM_RX:
462 return AFE_PORT_ID_TERTIARY_TDM_RX;
463 case AFE_PORT_ID_TERTIARY_TDM_TX:
464 return AFE_PORT_ID_TERTIARY_TDM_TX;
465 case AFE_PORT_ID_TERTIARY_TDM_RX_1:
466 return AFE_PORT_ID_TERTIARY_TDM_RX_1;
467 case AFE_PORT_ID_TERTIARY_TDM_TX_1:
468 return AFE_PORT_ID_TERTIARY_TDM_TX_1;
469 case AFE_PORT_ID_TERTIARY_TDM_RX_2:
470 return AFE_PORT_ID_TERTIARY_TDM_RX_2;
471 case AFE_PORT_ID_TERTIARY_TDM_TX_2:
472 return AFE_PORT_ID_TERTIARY_TDM_TX_2;
473 case AFE_PORT_ID_TERTIARY_TDM_RX_3:
474 return AFE_PORT_ID_TERTIARY_TDM_RX_3;
475 case AFE_PORT_ID_TERTIARY_TDM_TX_3:
476 return AFE_PORT_ID_TERTIARY_TDM_TX_3;
477 case AFE_PORT_ID_TERTIARY_TDM_RX_4:
478 return AFE_PORT_ID_TERTIARY_TDM_RX_4;
479 case AFE_PORT_ID_TERTIARY_TDM_TX_4:
480 return AFE_PORT_ID_TERTIARY_TDM_TX_4;
481 case AFE_PORT_ID_TERTIARY_TDM_RX_5:
482 return AFE_PORT_ID_TERTIARY_TDM_RX_5;
483 case AFE_PORT_ID_TERTIARY_TDM_TX_5:
484 return AFE_PORT_ID_TERTIARY_TDM_TX_5;
485 case AFE_PORT_ID_TERTIARY_TDM_RX_6:
486 return AFE_PORT_ID_TERTIARY_TDM_RX_6;
487 case AFE_PORT_ID_TERTIARY_TDM_TX_6:
488 return AFE_PORT_ID_TERTIARY_TDM_TX_6;
489 case AFE_PORT_ID_TERTIARY_TDM_RX_7:
490 return AFE_PORT_ID_TERTIARY_TDM_RX_7;
491 case AFE_PORT_ID_TERTIARY_TDM_TX_7:
492 return AFE_PORT_ID_TERTIARY_TDM_TX_7;
493 case AFE_PORT_ID_QUATERNARY_TDM_RX:
494 return AFE_PORT_ID_QUATERNARY_TDM_RX;
495 case AFE_PORT_ID_QUATERNARY_TDM_TX:
496 return AFE_PORT_ID_QUATERNARY_TDM_TX;
497 case AFE_PORT_ID_QUATERNARY_TDM_RX_1:
498 return AFE_PORT_ID_QUATERNARY_TDM_RX_1;
499 case AFE_PORT_ID_QUATERNARY_TDM_TX_1:
500 return AFE_PORT_ID_QUATERNARY_TDM_TX_1;
501 case AFE_PORT_ID_QUATERNARY_TDM_RX_2:
502 return AFE_PORT_ID_QUATERNARY_TDM_RX_2;
503 case AFE_PORT_ID_QUATERNARY_TDM_TX_2:
504 return AFE_PORT_ID_QUATERNARY_TDM_TX_2;
505 case AFE_PORT_ID_QUATERNARY_TDM_RX_3:
506 return AFE_PORT_ID_QUATERNARY_TDM_RX_3;
507 case AFE_PORT_ID_QUATERNARY_TDM_TX_3:
508 return AFE_PORT_ID_QUATERNARY_TDM_TX_3;
509 case AFE_PORT_ID_QUATERNARY_TDM_RX_4:
510 return AFE_PORT_ID_QUATERNARY_TDM_RX_4;
511 case AFE_PORT_ID_QUATERNARY_TDM_TX_4:
512 return AFE_PORT_ID_QUATERNARY_TDM_TX_4;
513 case AFE_PORT_ID_QUATERNARY_TDM_RX_5:
514 return AFE_PORT_ID_QUATERNARY_TDM_RX_5;
515 case AFE_PORT_ID_QUATERNARY_TDM_TX_5:
516 return AFE_PORT_ID_QUATERNARY_TDM_TX_5;
517 case AFE_PORT_ID_QUATERNARY_TDM_RX_6:
518 return AFE_PORT_ID_QUATERNARY_TDM_RX_6;
519 case AFE_PORT_ID_QUATERNARY_TDM_TX_6:
520 return AFE_PORT_ID_QUATERNARY_TDM_TX_6;
521 case AFE_PORT_ID_QUATERNARY_TDM_RX_7:
522 return AFE_PORT_ID_QUATERNARY_TDM_RX_7;
523 case AFE_PORT_ID_QUATERNARY_TDM_TX_7:
524 return AFE_PORT_ID_QUATERNARY_TDM_TX_7;
Rohit kumarebce3d92017-10-16 15:38:41 +0530525 case AFE_PORT_ID_QUINARY_TDM_RX:
526 return AFE_PORT_ID_QUINARY_TDM_RX;
527 case AFE_PORT_ID_QUINARY_TDM_TX:
528 return AFE_PORT_ID_QUINARY_TDM_TX;
529 case AFE_PORT_ID_QUINARY_TDM_RX_1:
530 return AFE_PORT_ID_QUINARY_TDM_RX_1;
531 case AFE_PORT_ID_QUINARY_TDM_TX_1:
532 return AFE_PORT_ID_QUINARY_TDM_TX_1;
533 case AFE_PORT_ID_QUINARY_TDM_RX_2:
534 return AFE_PORT_ID_QUINARY_TDM_RX_2;
535 case AFE_PORT_ID_QUINARY_TDM_TX_2:
536 return AFE_PORT_ID_QUINARY_TDM_TX_2;
537 case AFE_PORT_ID_QUINARY_TDM_RX_3:
538 return AFE_PORT_ID_QUINARY_TDM_RX_3;
539 case AFE_PORT_ID_QUINARY_TDM_TX_3:
540 return AFE_PORT_ID_QUINARY_TDM_TX_3;
541 case AFE_PORT_ID_QUINARY_TDM_RX_4:
542 return AFE_PORT_ID_QUINARY_TDM_RX_4;
543 case AFE_PORT_ID_QUINARY_TDM_TX_4:
544 return AFE_PORT_ID_QUINARY_TDM_TX_4;
545 case AFE_PORT_ID_QUINARY_TDM_RX_5:
546 return AFE_PORT_ID_QUINARY_TDM_RX_5;
547 case AFE_PORT_ID_QUINARY_TDM_TX_5:
548 return AFE_PORT_ID_QUINARY_TDM_TX_5;
549 case AFE_PORT_ID_QUINARY_TDM_RX_6:
550 return AFE_PORT_ID_QUINARY_TDM_RX_6;
551 case AFE_PORT_ID_QUINARY_TDM_TX_6:
552 return AFE_PORT_ID_QUINARY_TDM_TX_6;
553 case AFE_PORT_ID_QUINARY_TDM_RX_7:
554 return AFE_PORT_ID_QUINARY_TDM_RX_7;
555 case AFE_PORT_ID_QUINARY_TDM_TX_7:
556 return AFE_PORT_ID_QUINARY_TDM_TX_7;
Asish Bhattacharya8e2277f2017-07-20 18:31:55 +0530557 case AFE_PORT_ID_SENARY_MI2S_TX:
558 return AFE_PORT_ID_SENARY_MI2S_TX;
559 case AFE_PORT_ID_USB_RX:
560 return AFE_PORT_ID_USB_RX;
561 case AFE_PORT_ID_USB_TX:
562 return AFE_PORT_ID_USB_TX;
563 case AFE_PORT_ID_INT0_MI2S_RX:
564 return AFE_PORT_ID_INT0_MI2S_RX;
565 case AFE_PORT_ID_INT0_MI2S_TX:
566 return AFE_PORT_ID_INT0_MI2S_TX;
567 case AFE_PORT_ID_INT1_MI2S_RX:
568 return AFE_PORT_ID_INT1_MI2S_RX;
569 case AFE_PORT_ID_INT1_MI2S_TX:
570 return AFE_PORT_ID_INT1_MI2S_TX;
571 case AFE_PORT_ID_INT2_MI2S_RX:
572 return AFE_PORT_ID_INT2_MI2S_RX;
573 case AFE_PORT_ID_INT2_MI2S_TX:
574 return AFE_PORT_ID_INT2_MI2S_TX;
575 case AFE_PORT_ID_INT3_MI2S_RX:
576 return AFE_PORT_ID_INT3_MI2S_RX;
577 case AFE_PORT_ID_INT3_MI2S_TX:
578 return AFE_PORT_ID_INT3_MI2S_TX;
579 case AFE_PORT_ID_INT4_MI2S_RX:
580 return AFE_PORT_ID_INT4_MI2S_RX;
581 case AFE_PORT_ID_INT4_MI2S_TX:
582 return AFE_PORT_ID_INT4_MI2S_TX;
583 case AFE_PORT_ID_INT5_MI2S_RX:
584 return AFE_PORT_ID_INT5_MI2S_RX;
585 case AFE_PORT_ID_INT5_MI2S_TX:
586 return AFE_PORT_ID_INT5_MI2S_TX;
587 case AFE_PORT_ID_INT6_MI2S_RX:
588 return AFE_PORT_ID_INT6_MI2S_RX;
589 case AFE_PORT_ID_INT6_MI2S_TX:
590 return AFE_PORT_ID_INT6_MI2S_TX;
591 default:
592 pr_warn("%s: Invalid port_id %d\n", __func__, port_id);
593 return -EINVAL;
594 }
595}
596int q6audio_convert_virtual_to_portid(u16 port_id)
597{
598 int ret;
599
600 /* if port_id is virtual, convert to physical..
601 * if port_id is already physical, return physical
602 */
603 if (q6audio_validate_port(port_id) < 0) {
604 if (port_id == RT_PROXY_DAI_001_RX ||
605 port_id == RT_PROXY_DAI_001_TX ||
606 port_id == RT_PROXY_DAI_002_RX ||
607 port_id == RT_PROXY_DAI_002_TX)
608 ret = VIRTUAL_ID_TO_PORTID(port_id);
609 else
610 ret = -EINVAL;
611 } else
612 ret = port_id;
613
614 return ret;
615}
616
617int q6audio_is_digital_pcm_interface(u16 port_id)
618{
619 int ret = 0;
620
621 switch (port_id) {
622 case PRIMARY_I2S_RX:
623 case PRIMARY_I2S_TX:
624 case AFE_PORT_ID_PRIMARY_PCM_RX:
625 case AFE_PORT_ID_PRIMARY_PCM_TX:
626 case AFE_PORT_ID_SECONDARY_PCM_RX:
627 case AFE_PORT_ID_SECONDARY_PCM_TX:
628 case AFE_PORT_ID_TERTIARY_PCM_RX:
629 case AFE_PORT_ID_TERTIARY_PCM_TX:
630 case AFE_PORT_ID_QUATERNARY_PCM_RX:
631 case AFE_PORT_ID_QUATERNARY_PCM_TX:
Rohit kumarebce3d92017-10-16 15:38:41 +0530632 case AFE_PORT_ID_QUINARY_PCM_RX:
633 case AFE_PORT_ID_QUINARY_PCM_TX:
Asish Bhattacharya8e2277f2017-07-20 18:31:55 +0530634 case SECONDARY_I2S_RX:
635 case SECONDARY_I2S_TX:
636 case MI2S_RX:
637 case MI2S_TX:
638 case AFE_PORT_ID_TERTIARY_MI2S_TX:
639 case AFE_PORT_ID_TERTIARY_MI2S_RX:
Rohit kumarebce3d92017-10-16 15:38:41 +0530640 case AFE_PORT_ID_QUINARY_MI2S_TX:
641 case AFE_PORT_ID_QUINARY_MI2S_RX:
Asish Bhattacharya8e2277f2017-07-20 18:31:55 +0530642 case AFE_PORT_ID_QUATERNARY_MI2S_RX:
643 case AFE_PORT_ID_QUATERNARY_MI2S_TX:
644 case AFE_PORT_ID_PRIMARY_MI2S_RX:
645 case AFE_PORT_ID_PRIMARY_MI2S_TX:
646 case AFE_PORT_ID_SECONDARY_MI2S_RX:
647 case AFE_PORT_ID_SECONDARY_MI2S_TX:
648 case AUDIO_PORT_ID_I2S_RX:
649 case AFE_PORT_ID_SECONDARY_MI2S_RX_SD1:
650 case AFE_PORT_ID_PRIMARY_TDM_RX:
651 case AFE_PORT_ID_PRIMARY_TDM_TX:
652 case AFE_PORT_ID_PRIMARY_TDM_RX_1:
653 case AFE_PORT_ID_PRIMARY_TDM_TX_1:
654 case AFE_PORT_ID_PRIMARY_TDM_RX_2:
655 case AFE_PORT_ID_PRIMARY_TDM_TX_2:
656 case AFE_PORT_ID_PRIMARY_TDM_RX_3:
657 case AFE_PORT_ID_PRIMARY_TDM_TX_3:
658 case AFE_PORT_ID_PRIMARY_TDM_RX_4:
659 case AFE_PORT_ID_PRIMARY_TDM_TX_4:
660 case AFE_PORT_ID_PRIMARY_TDM_RX_5:
661 case AFE_PORT_ID_PRIMARY_TDM_TX_5:
662 case AFE_PORT_ID_PRIMARY_TDM_RX_6:
663 case AFE_PORT_ID_PRIMARY_TDM_TX_6:
664 case AFE_PORT_ID_PRIMARY_TDM_RX_7:
665 case AFE_PORT_ID_PRIMARY_TDM_TX_7:
666 case AFE_PORT_ID_SECONDARY_TDM_RX:
667 case AFE_PORT_ID_SECONDARY_TDM_TX:
668 case AFE_PORT_ID_SECONDARY_TDM_RX_1:
669 case AFE_PORT_ID_SECONDARY_TDM_TX_1:
670 case AFE_PORT_ID_SECONDARY_TDM_RX_2:
671 case AFE_PORT_ID_SECONDARY_TDM_TX_2:
672 case AFE_PORT_ID_SECONDARY_TDM_RX_3:
673 case AFE_PORT_ID_SECONDARY_TDM_TX_3:
674 case AFE_PORT_ID_SECONDARY_TDM_RX_4:
675 case AFE_PORT_ID_SECONDARY_TDM_TX_4:
676 case AFE_PORT_ID_SECONDARY_TDM_RX_5:
677 case AFE_PORT_ID_SECONDARY_TDM_TX_5:
678 case AFE_PORT_ID_SECONDARY_TDM_RX_6:
679 case AFE_PORT_ID_SECONDARY_TDM_TX_6:
680 case AFE_PORT_ID_SECONDARY_TDM_RX_7:
681 case AFE_PORT_ID_SECONDARY_TDM_TX_7:
682 case AFE_PORT_ID_TERTIARY_TDM_RX:
683 case AFE_PORT_ID_TERTIARY_TDM_TX:
684 case AFE_PORT_ID_TERTIARY_TDM_RX_1:
685 case AFE_PORT_ID_TERTIARY_TDM_TX_1:
686 case AFE_PORT_ID_TERTIARY_TDM_RX_2:
687 case AFE_PORT_ID_TERTIARY_TDM_TX_2:
688 case AFE_PORT_ID_TERTIARY_TDM_RX_3:
689 case AFE_PORT_ID_TERTIARY_TDM_TX_3:
690 case AFE_PORT_ID_TERTIARY_TDM_RX_4:
691 case AFE_PORT_ID_TERTIARY_TDM_TX_4:
692 case AFE_PORT_ID_TERTIARY_TDM_RX_5:
693 case AFE_PORT_ID_TERTIARY_TDM_TX_5:
694 case AFE_PORT_ID_TERTIARY_TDM_RX_6:
695 case AFE_PORT_ID_TERTIARY_TDM_TX_6:
696 case AFE_PORT_ID_TERTIARY_TDM_RX_7:
697 case AFE_PORT_ID_TERTIARY_TDM_TX_7:
698 case AFE_PORT_ID_QUATERNARY_TDM_RX:
699 case AFE_PORT_ID_QUATERNARY_TDM_TX:
700 case AFE_PORT_ID_QUATERNARY_TDM_RX_1:
701 case AFE_PORT_ID_QUATERNARY_TDM_TX_1:
702 case AFE_PORT_ID_QUATERNARY_TDM_RX_2:
703 case AFE_PORT_ID_QUATERNARY_TDM_TX_2:
704 case AFE_PORT_ID_QUATERNARY_TDM_RX_3:
705 case AFE_PORT_ID_QUATERNARY_TDM_TX_3:
706 case AFE_PORT_ID_QUATERNARY_TDM_RX_4:
707 case AFE_PORT_ID_QUATERNARY_TDM_TX_4:
708 case AFE_PORT_ID_QUATERNARY_TDM_RX_5:
709 case AFE_PORT_ID_QUATERNARY_TDM_TX_5:
710 case AFE_PORT_ID_QUATERNARY_TDM_RX_6:
711 case AFE_PORT_ID_QUATERNARY_TDM_TX_6:
712 case AFE_PORT_ID_QUATERNARY_TDM_RX_7:
713 case AFE_PORT_ID_QUATERNARY_TDM_TX_7:
Rohit kumarebce3d92017-10-16 15:38:41 +0530714 case AFE_PORT_ID_QUINARY_TDM_RX:
715 case AFE_PORT_ID_QUINARY_TDM_TX:
716 case AFE_PORT_ID_QUINARY_TDM_RX_1:
717 case AFE_PORT_ID_QUINARY_TDM_TX_1:
718 case AFE_PORT_ID_QUINARY_TDM_RX_2:
719 case AFE_PORT_ID_QUINARY_TDM_TX_2:
720 case AFE_PORT_ID_QUINARY_TDM_RX_3:
721 case AFE_PORT_ID_QUINARY_TDM_TX_3:
722 case AFE_PORT_ID_QUINARY_TDM_RX_4:
723 case AFE_PORT_ID_QUINARY_TDM_TX_4:
724 case AFE_PORT_ID_QUINARY_TDM_RX_5:
725 case AFE_PORT_ID_QUINARY_TDM_TX_5:
726 case AFE_PORT_ID_QUINARY_TDM_RX_6:
727 case AFE_PORT_ID_QUINARY_TDM_TX_6:
728 case AFE_PORT_ID_QUINARY_TDM_RX_7:
729 case AFE_PORT_ID_QUINARY_TDM_TX_7:
Asish Bhattacharya8e2277f2017-07-20 18:31:55 +0530730 case AFE_PORT_ID_SENARY_MI2S_TX:
731 case AFE_PORT_ID_INT0_MI2S_RX:
732 case AFE_PORT_ID_INT0_MI2S_TX:
733 case AFE_PORT_ID_INT1_MI2S_RX:
734 case AFE_PORT_ID_INT1_MI2S_TX:
735 case AFE_PORT_ID_INT2_MI2S_RX:
736 case AFE_PORT_ID_INT2_MI2S_TX:
737 case AFE_PORT_ID_INT3_MI2S_RX:
738 case AFE_PORT_ID_INT3_MI2S_TX:
739 case AFE_PORT_ID_INT4_MI2S_RX:
740 case AFE_PORT_ID_INT4_MI2S_TX:
741 case AFE_PORT_ID_INT5_MI2S_RX:
742 case AFE_PORT_ID_INT5_MI2S_TX:
743 case AFE_PORT_ID_INT6_MI2S_RX:
744 case AFE_PORT_ID_INT6_MI2S_TX:
745 break;
746 default:
747 ret = -EINVAL;
748 }
749
750 return ret;
751}
752
Laxminath Kasam8b1366a2017-10-05 01:44:16 +0530753/**
754 * q6audio_validate_port -
755 * validates port id
756 *
757 * @port_id: port id to validate
758 *
759 * Returns 0 on success or error on invalid port
760 */
Asish Bhattacharya8e2277f2017-07-20 18:31:55 +0530761int q6audio_validate_port(u16 port_id)
762{
763 int ret;
764
765 switch (port_id) {
766 case PRIMARY_I2S_RX:
767 case PRIMARY_I2S_TX:
768 case AFE_PORT_ID_PRIMARY_PCM_RX:
769 case AFE_PORT_ID_PRIMARY_PCM_TX:
770 case AFE_PORT_ID_SECONDARY_PCM_RX:
771 case AFE_PORT_ID_SECONDARY_PCM_TX:
772 case AFE_PORT_ID_TERTIARY_PCM_RX:
773 case AFE_PORT_ID_TERTIARY_PCM_TX:
774 case AFE_PORT_ID_QUATERNARY_PCM_RX:
775 case AFE_PORT_ID_QUATERNARY_PCM_TX:
Rohit kumarebce3d92017-10-16 15:38:41 +0530776 case AFE_PORT_ID_QUINARY_PCM_RX:
777 case AFE_PORT_ID_QUINARY_PCM_TX:
Asish Bhattacharya8e2277f2017-07-20 18:31:55 +0530778 case SECONDARY_I2S_RX:
779 case SECONDARY_I2S_TX:
780 case MI2S_RX:
781 case MI2S_TX:
782 case HDMI_RX:
783 case DISPLAY_PORT_RX:
784 case RSVD_2:
785 case RSVD_3:
786 case DIGI_MIC_TX:
787 case VOICE_RECORD_RX:
788 case VOICE_RECORD_TX:
789 case VOICE_PLAYBACK_TX:
790 case VOICE2_PLAYBACK_TX:
791 case SLIMBUS_0_RX:
792 case SLIMBUS_0_TX:
793 case SLIMBUS_1_RX:
794 case SLIMBUS_1_TX:
795 case SLIMBUS_2_RX:
796 case SLIMBUS_2_TX:
797 case SLIMBUS_3_RX:
798 case SLIMBUS_3_TX:
799 case SLIMBUS_4_RX:
800 case SLIMBUS_4_TX:
801 case SLIMBUS_5_RX:
802 case SLIMBUS_5_TX:
803 case SLIMBUS_6_RX:
804 case SLIMBUS_6_TX:
805 case SLIMBUS_7_RX:
806 case SLIMBUS_7_TX:
807 case SLIMBUS_8_RX:
808 case SLIMBUS_8_TX:
809 case INT_BT_SCO_RX:
810 case INT_BT_SCO_TX:
811 case INT_BT_A2DP_RX:
812 case INT_FM_RX:
813 case INT_FM_TX:
814 case RT_PROXY_PORT_001_RX:
815 case RT_PROXY_PORT_001_TX:
816 case AFE_PORT_ID_PRIMARY_MI2S_RX:
817 case AFE_PORT_ID_PRIMARY_MI2S_TX:
818 case AFE_PORT_ID_QUATERNARY_MI2S_RX:
819 case AFE_PORT_ID_QUATERNARY_MI2S_TX:
820 case AFE_PORT_ID_SECONDARY_MI2S_RX:
821 case AFE_PORT_ID_SECONDARY_MI2S_TX:
822 case AFE_PORT_ID_SPDIF_RX:
823 case AFE_PORT_ID_TERTIARY_MI2S_RX:
824 case AFE_PORT_ID_TERTIARY_MI2S_TX:
Rohit kumarebce3d92017-10-16 15:38:41 +0530825 case AFE_PORT_ID_QUINARY_MI2S_RX:
826 case AFE_PORT_ID_QUINARY_MI2S_TX:
Asish Bhattacharya8e2277f2017-07-20 18:31:55 +0530827 case AFE_PORT_ID_SECONDARY_MI2S_RX_SD1:
828 case AFE_PORT_ID_PRIMARY_TDM_RX:
829 case AFE_PORT_ID_PRIMARY_TDM_TX:
830 case AFE_PORT_ID_PRIMARY_TDM_RX_1:
831 case AFE_PORT_ID_PRIMARY_TDM_TX_1:
832 case AFE_PORT_ID_PRIMARY_TDM_RX_2:
833 case AFE_PORT_ID_PRIMARY_TDM_TX_2:
834 case AFE_PORT_ID_PRIMARY_TDM_RX_3:
835 case AFE_PORT_ID_PRIMARY_TDM_TX_3:
836 case AFE_PORT_ID_PRIMARY_TDM_RX_4:
837 case AFE_PORT_ID_PRIMARY_TDM_TX_4:
838 case AFE_PORT_ID_PRIMARY_TDM_RX_5:
839 case AFE_PORT_ID_PRIMARY_TDM_TX_5:
840 case AFE_PORT_ID_PRIMARY_TDM_RX_6:
841 case AFE_PORT_ID_PRIMARY_TDM_TX_6:
842 case AFE_PORT_ID_PRIMARY_TDM_RX_7:
843 case AFE_PORT_ID_PRIMARY_TDM_TX_7:
844 case AFE_PORT_ID_SECONDARY_TDM_RX:
845 case AFE_PORT_ID_SECONDARY_TDM_TX:
846 case AFE_PORT_ID_SECONDARY_TDM_RX_1:
847 case AFE_PORT_ID_SECONDARY_TDM_TX_1:
848 case AFE_PORT_ID_SECONDARY_TDM_RX_2:
849 case AFE_PORT_ID_SECONDARY_TDM_TX_2:
850 case AFE_PORT_ID_SECONDARY_TDM_RX_3:
851 case AFE_PORT_ID_SECONDARY_TDM_TX_3:
852 case AFE_PORT_ID_SECONDARY_TDM_RX_4:
853 case AFE_PORT_ID_SECONDARY_TDM_TX_4:
854 case AFE_PORT_ID_SECONDARY_TDM_RX_5:
855 case AFE_PORT_ID_SECONDARY_TDM_TX_5:
856 case AFE_PORT_ID_SECONDARY_TDM_RX_6:
857 case AFE_PORT_ID_SECONDARY_TDM_TX_6:
858 case AFE_PORT_ID_SECONDARY_TDM_RX_7:
859 case AFE_PORT_ID_SECONDARY_TDM_TX_7:
860 case AFE_PORT_ID_TERTIARY_TDM_RX:
861 case AFE_PORT_ID_TERTIARY_TDM_TX:
862 case AFE_PORT_ID_TERTIARY_TDM_RX_1:
863 case AFE_PORT_ID_TERTIARY_TDM_TX_1:
864 case AFE_PORT_ID_TERTIARY_TDM_RX_2:
865 case AFE_PORT_ID_TERTIARY_TDM_TX_2:
866 case AFE_PORT_ID_TERTIARY_TDM_RX_3:
867 case AFE_PORT_ID_TERTIARY_TDM_TX_3:
868 case AFE_PORT_ID_TERTIARY_TDM_RX_4:
869 case AFE_PORT_ID_TERTIARY_TDM_TX_4:
870 case AFE_PORT_ID_TERTIARY_TDM_RX_5:
871 case AFE_PORT_ID_TERTIARY_TDM_TX_5:
872 case AFE_PORT_ID_TERTIARY_TDM_RX_6:
873 case AFE_PORT_ID_TERTIARY_TDM_TX_6:
874 case AFE_PORT_ID_TERTIARY_TDM_RX_7:
875 case AFE_PORT_ID_TERTIARY_TDM_TX_7:
876 case AFE_PORT_ID_QUATERNARY_TDM_RX:
877 case AFE_PORT_ID_QUATERNARY_TDM_TX:
878 case AFE_PORT_ID_QUATERNARY_TDM_RX_1:
879 case AFE_PORT_ID_QUATERNARY_TDM_TX_1:
880 case AFE_PORT_ID_QUATERNARY_TDM_RX_2:
881 case AFE_PORT_ID_QUATERNARY_TDM_TX_2:
882 case AFE_PORT_ID_QUATERNARY_TDM_RX_3:
883 case AFE_PORT_ID_QUATERNARY_TDM_TX_3:
884 case AFE_PORT_ID_QUATERNARY_TDM_RX_4:
885 case AFE_PORT_ID_QUATERNARY_TDM_TX_4:
886 case AFE_PORT_ID_QUATERNARY_TDM_RX_5:
887 case AFE_PORT_ID_QUATERNARY_TDM_TX_5:
888 case AFE_PORT_ID_QUATERNARY_TDM_RX_6:
889 case AFE_PORT_ID_QUATERNARY_TDM_TX_6:
890 case AFE_PORT_ID_QUATERNARY_TDM_RX_7:
891 case AFE_PORT_ID_QUATERNARY_TDM_TX_7:
Rohit kumarebce3d92017-10-16 15:38:41 +0530892 case AFE_PORT_ID_QUINARY_TDM_RX:
893 case AFE_PORT_ID_QUINARY_TDM_TX:
894 case AFE_PORT_ID_QUINARY_TDM_RX_1:
895 case AFE_PORT_ID_QUINARY_TDM_TX_1:
896 case AFE_PORT_ID_QUINARY_TDM_RX_2:
897 case AFE_PORT_ID_QUINARY_TDM_TX_2:
898 case AFE_PORT_ID_QUINARY_TDM_RX_3:
899 case AFE_PORT_ID_QUINARY_TDM_TX_3:
900 case AFE_PORT_ID_QUINARY_TDM_RX_4:
901 case AFE_PORT_ID_QUINARY_TDM_TX_4:
902 case AFE_PORT_ID_QUINARY_TDM_RX_5:
903 case AFE_PORT_ID_QUINARY_TDM_TX_5:
904 case AFE_PORT_ID_QUINARY_TDM_RX_6:
905 case AFE_PORT_ID_QUINARY_TDM_TX_6:
906 case AFE_PORT_ID_QUINARY_TDM_RX_7:
907 case AFE_PORT_ID_QUINARY_TDM_TX_7:
Asish Bhattacharya8e2277f2017-07-20 18:31:55 +0530908 case AFE_PORT_ID_SENARY_MI2S_TX:
909 case AFE_PORT_ID_USB_RX:
910 case AFE_PORT_ID_USB_TX:
911 case AFE_PORT_ID_INT0_MI2S_RX:
912 case AFE_PORT_ID_INT0_MI2S_TX:
913 case AFE_PORT_ID_INT1_MI2S_RX:
914 case AFE_PORT_ID_INT1_MI2S_TX:
915 case AFE_PORT_ID_INT2_MI2S_RX:
916 case AFE_PORT_ID_INT2_MI2S_TX:
917 case AFE_PORT_ID_INT3_MI2S_RX:
918 case AFE_PORT_ID_INT3_MI2S_TX:
919 case AFE_PORT_ID_INT4_MI2S_RX:
920 case AFE_PORT_ID_INT4_MI2S_TX:
921 case AFE_PORT_ID_INT5_MI2S_RX:
922 case AFE_PORT_ID_INT5_MI2S_TX:
923 case AFE_PORT_ID_INT6_MI2S_RX:
924 case AFE_PORT_ID_INT6_MI2S_TX:
925 {
926 ret = 0;
927 break;
928 }
929
930 default:
931 ret = -EINVAL;
932 }
933
934 return ret;
935}
Laxminath Kasam8b1366a2017-10-05 01:44:16 +0530936EXPORT_SYMBOL(q6audio_validate_port);