OSDN Git Service

Merge android-4.4-p.199 (3f5703c) into msm-4.4
[sagit-ice-cold/kernel_xiaomi_msm8998.git] / include / sound / q6afe-v2.h
1 /* Copyright (c) 2012-2018, 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 #ifndef __Q6AFE_V2_H__
13 #define __Q6AFE_V2_H__
14 #include <sound/apr_audio-v2.h>
15 #include <linux/qdsp6v2/rtac.h>
16
17 #define IN                      0x000
18 #define OUT                     0x001
19 #define MSM_AFE_MONO        0
20 #define MSM_AFE_CH_STEREO   1
21 #define MSM_AFE_MONO_RIGHT  1
22 #define MSM_AFE_MONO_LEFT   2
23 #define MSM_AFE_STEREO      3
24 #define MSM_AFE_4CHANNELS   4
25 #define MSM_AFE_6CHANNELS   6
26 #define MSM_AFE_8CHANNELS   8
27
28 #define MSM_AFE_I2S_FORMAT_LPCM         0
29 #define MSM_AFE_I2S_FORMAT_COMPR                1
30 #define MSM_AFE_I2S_FORMAT_IEC60958_LPCM        2
31 #define MSM_AFE_I2S_FORMAT_IEC60958_COMPR       3
32
33 #define MSM_AFE_PORT_TYPE_RX 0
34 #define MSM_AFE_PORT_TYPE_TX 1
35
36 #define RT_PROXY_DAI_001_RX     0xE0
37 #define RT_PROXY_DAI_001_TX     0xF0
38 #define RT_PROXY_DAI_002_RX     0xF1
39 #define RT_PROXY_DAI_002_TX     0xE1
40 #define VIRTUAL_ID_TO_PORTID(val) ((val & 0xF) | 0x2000)
41
42 #define AFE_CLK_VERSION_V1    1
43 #define AFE_CLK_VERSION_V2    2
44
45 #define AFE_MAX_RDDMA    10
46 #define AFE_MAX_WRDMA    10
47
48 typedef int (*routing_cb)(int port);
49
50 enum {
51         /* IDX 0->4 */
52         IDX_PRIMARY_I2S_RX,
53         IDX_PRIMARY_I2S_TX,
54         IDX_AFE_PORT_ID_PRIMARY_PCM_RX,
55         IDX_AFE_PORT_ID_PRIMARY_PCM_TX,
56         IDX_SECONDARY_I2S_RX,
57         /* IDX 5->9 */
58         IDX_SECONDARY_I2S_TX,
59         IDX_MI2S_RX,
60         IDX_MI2S_TX,
61         IDX_HDMI_RX,
62         IDX_RSVD_2,
63         /* IDX 10->14 */
64         IDX_RSVD_3,
65         IDX_DIGI_MIC_TX,
66         IDX_VOICE_RECORD_RX,
67         IDX_VOICE_RECORD_TX,
68         IDX_VOICE_PLAYBACK_TX,
69         /* IDX 15->19 */
70         IDX_SLIMBUS_0_RX,
71         IDX_SLIMBUS_0_TX,
72         IDX_SLIMBUS_1_RX,
73         IDX_SLIMBUS_1_TX,
74         IDX_SLIMBUS_2_RX,
75         /* IDX 20->24 */
76         IDX_SLIMBUS_2_TX,
77         IDX_SLIMBUS_3_RX,
78         IDX_SLIMBUS_3_TX,
79         IDX_SLIMBUS_4_RX,
80         IDX_SLIMBUS_4_TX,
81         /* IDX 25->29 */
82         IDX_SLIMBUS_5_RX,
83         IDX_SLIMBUS_5_TX,
84         IDX_INT_BT_SCO_RX,
85         IDX_INT_BT_SCO_TX,
86         IDX_INT_BT_A2DP_RX,
87         /* IDX 30->34 */
88         IDX_INT_FM_RX,
89         IDX_INT_FM_TX,
90         IDX_RT_PROXY_PORT_001_RX,
91         IDX_RT_PROXY_PORT_001_TX,
92         IDX_AFE_PORT_ID_QUATERNARY_MI2S_RX,
93         /* IDX 35->39 */
94         IDX_AFE_PORT_ID_QUATERNARY_MI2S_TX,
95         IDX_AFE_PORT_ID_SECONDARY_MI2S_RX,
96         IDX_AFE_PORT_ID_SECONDARY_MI2S_TX,
97         IDX_AFE_PORT_ID_TERTIARY_MI2S_RX,
98         IDX_AFE_PORT_ID_TERTIARY_MI2S_TX,
99         /* IDX 40->44 */
100         IDX_AFE_PORT_ID_PRIMARY_MI2S_RX,
101         IDX_AFE_PORT_ID_PRIMARY_MI2S_TX,
102         IDX_AFE_PORT_ID_SECONDARY_PCM_RX,
103         IDX_AFE_PORT_ID_SECONDARY_PCM_TX,
104         IDX_VOICE2_PLAYBACK_TX,
105         /* IDX 45->49 */
106         IDX_SLIMBUS_6_RX,
107         IDX_SLIMBUS_6_TX,
108         IDX_SPDIF_RX,
109         IDX_GLOBAL_CFG,
110         IDX_AUDIO_PORT_ID_I2S_RX,
111         /* IDX 50->53 */
112         IDX_AFE_PORT_ID_SECONDARY_MI2S_RX_SD1,
113         IDX_AFE_PORT_ID_QUINARY_MI2S_RX,
114         IDX_AFE_PORT_ID_QUINARY_MI2S_TX,
115         IDX_AFE_PORT_ID_SENARY_MI2S_TX,
116         /* IDX 54->117 */
117         IDX_AFE_PORT_ID_PRIMARY_TDM_RX_0,
118         IDX_AFE_PORT_ID_PRIMARY_TDM_TX_0,
119         IDX_AFE_PORT_ID_PRIMARY_TDM_RX_1,
120         IDX_AFE_PORT_ID_PRIMARY_TDM_TX_1,
121         IDX_AFE_PORT_ID_PRIMARY_TDM_RX_2,
122         IDX_AFE_PORT_ID_PRIMARY_TDM_TX_2,
123         IDX_AFE_PORT_ID_PRIMARY_TDM_RX_3,
124         IDX_AFE_PORT_ID_PRIMARY_TDM_TX_3,
125         IDX_AFE_PORT_ID_PRIMARY_TDM_RX_4,
126         IDX_AFE_PORT_ID_PRIMARY_TDM_TX_4,
127         IDX_AFE_PORT_ID_PRIMARY_TDM_RX_5,
128         IDX_AFE_PORT_ID_PRIMARY_TDM_TX_5,
129         IDX_AFE_PORT_ID_PRIMARY_TDM_RX_6,
130         IDX_AFE_PORT_ID_PRIMARY_TDM_TX_6,
131         IDX_AFE_PORT_ID_PRIMARY_TDM_RX_7,
132         IDX_AFE_PORT_ID_PRIMARY_TDM_TX_7,
133         IDX_AFE_PORT_ID_SECONDARY_TDM_RX_0,
134         IDX_AFE_PORT_ID_SECONDARY_TDM_TX_0,
135         IDX_AFE_PORT_ID_SECONDARY_TDM_RX_1,
136         IDX_AFE_PORT_ID_SECONDARY_TDM_TX_1,
137         IDX_AFE_PORT_ID_SECONDARY_TDM_RX_2,
138         IDX_AFE_PORT_ID_SECONDARY_TDM_TX_2,
139         IDX_AFE_PORT_ID_SECONDARY_TDM_RX_3,
140         IDX_AFE_PORT_ID_SECONDARY_TDM_TX_3,
141         IDX_AFE_PORT_ID_SECONDARY_TDM_RX_4,
142         IDX_AFE_PORT_ID_SECONDARY_TDM_TX_4,
143         IDX_AFE_PORT_ID_SECONDARY_TDM_RX_5,
144         IDX_AFE_PORT_ID_SECONDARY_TDM_TX_5,
145         IDX_AFE_PORT_ID_SECONDARY_TDM_RX_6,
146         IDX_AFE_PORT_ID_SECONDARY_TDM_TX_6,
147         IDX_AFE_PORT_ID_SECONDARY_TDM_RX_7,
148         IDX_AFE_PORT_ID_SECONDARY_TDM_TX_7,
149         IDX_AFE_PORT_ID_TERTIARY_TDM_RX_0,
150         IDX_AFE_PORT_ID_TERTIARY_TDM_TX_0,
151         IDX_AFE_PORT_ID_TERTIARY_TDM_RX_1,
152         IDX_AFE_PORT_ID_TERTIARY_TDM_TX_1,
153         IDX_AFE_PORT_ID_TERTIARY_TDM_RX_2,
154         IDX_AFE_PORT_ID_TERTIARY_TDM_TX_2,
155         IDX_AFE_PORT_ID_TERTIARY_TDM_RX_3,
156         IDX_AFE_PORT_ID_TERTIARY_TDM_TX_3,
157         IDX_AFE_PORT_ID_TERTIARY_TDM_RX_4,
158         IDX_AFE_PORT_ID_TERTIARY_TDM_TX_4,
159         IDX_AFE_PORT_ID_TERTIARY_TDM_RX_5,
160         IDX_AFE_PORT_ID_TERTIARY_TDM_TX_5,
161         IDX_AFE_PORT_ID_TERTIARY_TDM_RX_6,
162         IDX_AFE_PORT_ID_TERTIARY_TDM_TX_6,
163         IDX_AFE_PORT_ID_TERTIARY_TDM_RX_7,
164         IDX_AFE_PORT_ID_TERTIARY_TDM_TX_7,
165         IDX_AFE_PORT_ID_QUATERNARY_TDM_RX_0,
166         IDX_AFE_PORT_ID_QUATERNARY_TDM_TX_0,
167         IDX_AFE_PORT_ID_QUATERNARY_TDM_RX_1,
168         IDX_AFE_PORT_ID_QUATERNARY_TDM_TX_1,
169         IDX_AFE_PORT_ID_QUATERNARY_TDM_RX_2,
170         IDX_AFE_PORT_ID_QUATERNARY_TDM_TX_2,
171         IDX_AFE_PORT_ID_QUATERNARY_TDM_RX_3,
172         IDX_AFE_PORT_ID_QUATERNARY_TDM_TX_3,
173         IDX_AFE_PORT_ID_QUATERNARY_TDM_RX_4,
174         IDX_AFE_PORT_ID_QUATERNARY_TDM_TX_4,
175         IDX_AFE_PORT_ID_QUATERNARY_TDM_RX_5,
176         IDX_AFE_PORT_ID_QUATERNARY_TDM_TX_5,
177         IDX_AFE_PORT_ID_QUATERNARY_TDM_RX_6,
178         IDX_AFE_PORT_ID_QUATERNARY_TDM_TX_6,
179         IDX_AFE_PORT_ID_QUATERNARY_TDM_RX_7,
180         IDX_AFE_PORT_ID_QUATERNARY_TDM_TX_7,
181         /* IDX 118->121 */
182         IDX_SLIMBUS_7_RX,
183         IDX_SLIMBUS_7_TX,
184         IDX_SLIMBUS_8_RX,
185         IDX_SLIMBUS_8_TX,
186         /* IDX 122-> 123 */
187         IDX_AFE_PORT_ID_USB_RX,
188         IDX_AFE_PORT_ID_USB_TX,
189         /* IDX 124 */
190         IDX_DISPLAY_PORT_RX,
191         /* IDX 125-> 128 */
192         IDX_AFE_PORT_ID_TERTIARY_PCM_RX,
193         IDX_AFE_PORT_ID_TERTIARY_PCM_TX,
194         IDX_AFE_PORT_ID_QUATERNARY_PCM_RX,
195         IDX_AFE_PORT_ID_QUATERNARY_PCM_TX,
196         /* IDX 129-> 142 */
197         IDX_AFE_PORT_ID_INT0_MI2S_RX,
198         IDX_AFE_PORT_ID_INT0_MI2S_TX,
199         IDX_AFE_PORT_ID_INT1_MI2S_RX,
200         IDX_AFE_PORT_ID_INT1_MI2S_TX,
201         IDX_AFE_PORT_ID_INT2_MI2S_RX,
202         IDX_AFE_PORT_ID_INT2_MI2S_TX,
203         IDX_AFE_PORT_ID_INT3_MI2S_RX,
204         IDX_AFE_PORT_ID_INT3_MI2S_TX,
205         IDX_AFE_PORT_ID_INT4_MI2S_RX,
206         IDX_AFE_PORT_ID_INT4_MI2S_TX,
207         IDX_AFE_PORT_ID_INT5_MI2S_RX,
208         IDX_AFE_PORT_ID_INT5_MI2S_TX,
209         IDX_AFE_PORT_ID_INT6_MI2S_RX,
210         IDX_AFE_PORT_ID_INT6_MI2S_TX,
211         /* IDX 143 -> 150 */
212         IDX_AFE_PORT_ID_SECONDARY_MI2S_RX_1,
213         IDX_AFE_PORT_ID_SECONDARY_MI2S_RX_2,
214         IDX_AFE_PORT_ID_SECONDARY_MI2S_RX_3,
215         IDX_AFE_PORT_ID_SECONDARY_MI2S_RX_4,
216         IDX_AFE_PORT_ID_SECONDARY_MI2S_TX_1,
217         IDX_AFE_PORT_ID_SECONDARY_MI2S_TX_2,
218         IDX_AFE_PORT_ID_SECONDARY_MI2S_TX_3,
219         IDX_AFE_PORT_ID_SECONDARY_MI2S_TX_4,
220         /* IDX 151 -> 158 */
221         IDX_AFE_PORT_ID_TERTIARY_MI2S_RX_1,
222         IDX_AFE_PORT_ID_TERTIARY_MI2S_RX_2,
223         IDX_AFE_PORT_ID_TERTIARY_MI2S_RX_3,
224         IDX_AFE_PORT_ID_TERTIARY_MI2S_RX_4,
225         IDX_AFE_PORT_ID_TERTIARY_MI2S_TX_1,
226         IDX_AFE_PORT_ID_TERTIARY_MI2S_TX_2,
227         IDX_AFE_PORT_ID_TERTIARY_MI2S_TX_3,
228         IDX_AFE_PORT_ID_TERTIARY_MI2S_TX_4,
229         /* IDX 159 -> 166 */
230         IDX_AFE_PORT_ID_QUATERNARY_MI2S_RX_1,
231         IDX_AFE_PORT_ID_QUATERNARY_MI2S_RX_2,
232         IDX_AFE_PORT_ID_QUATERNARY_MI2S_RX_3,
233         IDX_AFE_PORT_ID_QUATERNARY_MI2S_RX_4,
234         IDX_AFE_PORT_ID_QUATERNARY_MI2S_TX_1,
235         IDX_AFE_PORT_ID_QUATERNARY_MI2S_TX_2,
236         IDX_AFE_PORT_ID_QUATERNARY_MI2S_TX_3,
237         IDX_AFE_PORT_ID_QUATERNARY_MI2S_TX_4,
238         AFE_MAX_PORTS
239 };
240
241
242 enum {
243         IDX_PRIMARY_TDM_RX_0,
244         IDX_PRIMARY_TDM_RX_1,
245         IDX_PRIMARY_TDM_RX_2,
246         IDX_PRIMARY_TDM_RX_3,
247         IDX_PRIMARY_TDM_RX_4,
248         IDX_PRIMARY_TDM_RX_5,
249         IDX_PRIMARY_TDM_RX_6,
250         IDX_PRIMARY_TDM_RX_7,
251         IDX_PRIMARY_TDM_TX_0,
252         IDX_PRIMARY_TDM_TX_1,
253         IDX_PRIMARY_TDM_TX_2,
254         IDX_PRIMARY_TDM_TX_3,
255         IDX_PRIMARY_TDM_TX_4,
256         IDX_PRIMARY_TDM_TX_5,
257         IDX_PRIMARY_TDM_TX_6,
258         IDX_PRIMARY_TDM_TX_7,
259         IDX_SECONDARY_TDM_RX_0,
260         IDX_SECONDARY_TDM_RX_1,
261         IDX_SECONDARY_TDM_RX_2,
262         IDX_SECONDARY_TDM_RX_3,
263         IDX_SECONDARY_TDM_RX_4,
264         IDX_SECONDARY_TDM_RX_5,
265         IDX_SECONDARY_TDM_RX_6,
266         IDX_SECONDARY_TDM_RX_7,
267         IDX_SECONDARY_TDM_TX_0,
268         IDX_SECONDARY_TDM_TX_1,
269         IDX_SECONDARY_TDM_TX_2,
270         IDX_SECONDARY_TDM_TX_3,
271         IDX_SECONDARY_TDM_TX_4,
272         IDX_SECONDARY_TDM_TX_5,
273         IDX_SECONDARY_TDM_TX_6,
274         IDX_SECONDARY_TDM_TX_7,
275         IDX_TERTIARY_TDM_RX_0,
276         IDX_TERTIARY_TDM_RX_1,
277         IDX_TERTIARY_TDM_RX_2,
278         IDX_TERTIARY_TDM_RX_3,
279         IDX_TERTIARY_TDM_RX_4,
280         IDX_TERTIARY_TDM_RX_5,
281         IDX_TERTIARY_TDM_RX_6,
282         IDX_TERTIARY_TDM_RX_7,
283         IDX_TERTIARY_TDM_TX_0,
284         IDX_TERTIARY_TDM_TX_1,
285         IDX_TERTIARY_TDM_TX_2,
286         IDX_TERTIARY_TDM_TX_3,
287         IDX_TERTIARY_TDM_TX_4,
288         IDX_TERTIARY_TDM_TX_5,
289         IDX_TERTIARY_TDM_TX_6,
290         IDX_TERTIARY_TDM_TX_7,
291         IDX_QUATERNARY_TDM_RX_0,
292         IDX_QUATERNARY_TDM_RX_1,
293         IDX_QUATERNARY_TDM_RX_2,
294         IDX_QUATERNARY_TDM_RX_3,
295         IDX_QUATERNARY_TDM_RX_4,
296         IDX_QUATERNARY_TDM_RX_5,
297         IDX_QUATERNARY_TDM_RX_6,
298         IDX_QUATERNARY_TDM_RX_7,
299         IDX_QUATERNARY_TDM_TX_0,
300         IDX_QUATERNARY_TDM_TX_1,
301         IDX_QUATERNARY_TDM_TX_2,
302         IDX_QUATERNARY_TDM_TX_3,
303         IDX_QUATERNARY_TDM_TX_4,
304         IDX_QUATERNARY_TDM_TX_5,
305         IDX_QUATERNARY_TDM_TX_6,
306         IDX_QUATERNARY_TDM_TX_7,
307         IDX_TDM_MAX,
308 };
309
310 enum {
311         IDX_GROUP_PRIMARY_TDM_RX,
312         IDX_GROUP_PRIMARY_TDM_TX,
313         IDX_GROUP_SECONDARY_TDM_RX,
314         IDX_GROUP_SECONDARY_TDM_TX,
315         IDX_GROUP_TERTIARY_TDM_RX,
316         IDX_GROUP_TERTIARY_TDM_TX,
317         IDX_GROUP_QUATERNARY_TDM_RX,
318         IDX_GROUP_QUATERNARY_TDM_TX,
319         IDX_GROUP_TDM_MAX,
320 };
321
322 enum {
323         IDX_SECONDARY_MI2S_RX_1,
324         IDX_SECONDARY_MI2S_RX_2,
325         IDX_SECONDARY_MI2S_RX_3,
326         IDX_SECONDARY_MI2S_RX_4,
327         IDX_SECONDARY_MI2S_TX_1,
328         IDX_SECONDARY_MI2S_TX_2,
329         IDX_SECONDARY_MI2S_TX_3,
330         IDX_SECONDARY_MI2S_TX_4,
331         IDX_TERTIARY_MI2S_RX_1,
332         IDX_TERTIARY_MI2S_RX_2,
333         IDX_TERTIARY_MI2S_RX_3,
334         IDX_TERTIARY_MI2S_RX_4,
335         IDX_TERTIARY_MI2S_TX_1,
336         IDX_TERTIARY_MI2S_TX_2,
337         IDX_TERTIARY_MI2S_TX_3,
338         IDX_TERTIARY_MI2S_TX_4,
339         IDX_QUATERNARY_MI2S_RX_1,
340         IDX_QUATERNARY_MI2S_RX_2,
341         IDX_QUATERNARY_MI2S_RX_3,
342         IDX_QUATERNARY_MI2S_RX_4,
343         IDX_QUATERNARY_MI2S_TX_1,
344         IDX_QUATERNARY_MI2S_TX_2,
345         IDX_QUATERNARY_MI2S_TX_3,
346         IDX_QUATERNARY_MI2S_TX_4,
347         IDX_GROUP_MI2S_PORT_MAX,
348 };
349
350 enum {
351         IDX_GROUP_SECONDARY_MI2S_RX,
352         IDX_GROUP_SECONDARY_MI2S_TX,
353         IDX_GROUP_TERTIARY_MI2S_RX,
354         IDX_GROUP_TERTIARY_MI2S_TX,
355         IDX_GROUP_QUATERNARY_MI2S_RX,
356         IDX_GROUP_QUATERNARY_MI2S_TX,
357         IDX_GROUP_MI2S_MAX,
358 };
359
360 enum afe_mad_type {
361         MAD_HW_NONE = 0x00,
362         MAD_HW_AUDIO = 0x01,
363         MAD_HW_BEACON = 0x02,
364         MAD_HW_ULTRASOUND = 0x04,
365         MAD_SW_AUDIO = 0x05,
366 };
367
368 enum afe_cal_mode {
369         AFE_CAL_MODE_DEFAULT = 0x00,
370         AFE_CAL_MODE_NONE,
371 };
372
373 struct afe_audio_buffer {
374         dma_addr_t phys;
375         void       *data;
376         uint32_t   used;
377         uint32_t   size;/* size of buffer */
378         uint32_t   actual_size; /* actual number of bytes read by DSP */
379         struct      ion_handle *handle;
380         struct      ion_client *client;
381 };
382
383 struct afe_audio_port_data {
384         struct afe_audio_buffer *buf;
385         uint32_t            max_buf_cnt;
386         uint32_t            dsp_buf;
387         uint32_t            cpu_buf;
388         struct list_head    mem_map_handle;
389         uint32_t            tmp_hdl;
390         /* read or write locks */
391         struct mutex        lock;
392         spinlock_t          dsp_lock;
393 };
394
395 struct afe_audio_client {
396         atomic_t               cmd_state;
397         /* Relative or absolute TS */
398         uint32_t               time_flag;
399         void                   *priv;
400         uint64_t               time_stamp;
401         struct mutex           cmd_lock;
402         /* idx:1 out port, 0: in port*/
403         struct afe_audio_port_data port[2];
404         wait_queue_head_t      cmd_wait;
405         uint32_t               mem_map_handle;
406 };
407
408 struct aanc_data {
409         bool aanc_active;
410         uint16_t aanc_rx_port;
411         uint16_t aanc_tx_port;
412         uint32_t aanc_rx_port_sample_rate;
413         uint32_t aanc_tx_port_sample_rate;
414 };
415
416 int afe_open(u16 port_id, union afe_port_config *afe_config, int rate);
417 int afe_close(int port_id);
418 int afe_loopback(u16 enable, u16 rx_port, u16 tx_port);
419 int afe_sidetone_enable(u16 tx_port_id, u16 rx_port_id, bool enable);
420 int afe_loopback_gain(u16 port_id, u16 volume);
421 int afe_validate_port(u16 port_id);
422 int afe_get_port_index(u16 port_id);
423 int afe_get_topology(int port_id);
424 int afe_start_pseudo_port(u16 port_id);
425 int afe_stop_pseudo_port(u16 port_id);
426 uint32_t afe_req_mmap_handle(struct afe_audio_client *ac);
427 int afe_memory_map(phys_addr_t dma_addr_p, u32 dma_buf_sz,
428                 struct afe_audio_client *ac);
429 int afe_cmd_memory_map(phys_addr_t dma_addr_p, u32 dma_buf_sz);
430 int afe_cmd_memory_map_nowait(int port_id, phys_addr_t dma_addr_p,
431                         u32 dma_buf_sz);
432 int afe_cmd_memory_unmap(u32 dma_addr_p);
433 int afe_cmd_memory_unmap_nowait(u32 dma_addr_p);
434 void afe_set_dtmf_gen_rx_portid(u16 rx_port_id, int set);
435 int afe_dtmf_generate_rx(int64_t duration_in_ms,
436                          uint16_t high_freq,
437                          uint16_t low_freq, uint16_t gain);
438 int afe_register_get_events(u16 port_id,
439                 void (*cb) (uint32_t opcode,
440                 uint32_t token, uint32_t *payload, void *priv),
441                 void *private_data);
442 int afe_unregister_get_events(u16 port_id);
443 int afe_rt_proxy_port_write(phys_addr_t buf_addr_p,
444                         u32 mem_map_handle, int bytes);
445 int afe_rt_proxy_port_read(phys_addr_t buf_addr_p,
446                         u32 mem_map_handle, int bytes);
447 void afe_set_cal_mode(u16 port_id, enum afe_cal_mode afe_cal_mode);
448 int afe_port_start(u16 port_id, union afe_port_config *afe_config,
449         u32 rate);
450 int afe_port_start_v2(u16 port_id, union afe_port_config *afe_config,
451                       u32 rate, u16 afe_in_channels, u16 afe_in_bit_width,
452                       struct afe_enc_config *enc_config);
453 int afe_spk_prot_feed_back_cfg(int src_port, int dst_port,
454         int l_ch, int r_ch, u32 enable);
455 int afe_spk_prot_get_calib_data(struct afe_spkr_prot_get_vi_calib *calib);
456 int afe_port_stop_nowait(int port_id);
457 int afe_apply_gain(u16 port_id, u16 gain);
458 int afe_q6_interface_prepare(void);
459 int afe_get_port_type(u16 port_id);
460 int q6afe_audio_client_buf_alloc_contiguous(unsigned int dir,
461                         struct afe_audio_client *ac,
462                         unsigned int bufsz,
463                         unsigned int bufcnt);
464 struct afe_audio_client *q6afe_audio_client_alloc(void *priv);
465 int q6afe_audio_client_buf_free_contiguous(unsigned int dir,
466                         struct afe_audio_client *ac);
467 void q6afe_audio_client_free(struct afe_audio_client *ac);
468 /* if port_id is virtual, convert to physical..
469  * if port_id is already physical, return physical
470  */
471 int afe_convert_virtual_to_portid(u16 port_id);
472
473 int afe_pseudo_port_start_nowait(u16 port_id);
474 int afe_pseudo_port_stop_nowait(u16 port_id);
475 int afe_set_lpass_clock(u16 port_id, struct afe_clk_cfg *cfg);
476 int afe_set_lpass_clock_v2(u16 port_id, struct afe_clk_set *cfg);
477 int afe_set_lpass_clk_cfg(int index, struct afe_clk_set *cfg);
478 int afe_set_digital_codec_core_clock(u16 port_id,
479                         struct afe_digital_clk_cfg *cfg);
480 int afe_set_lpass_internal_digital_codec_clock(u16 port_id,
481                                 struct afe_digital_clk_cfg *cfg);
482 int afe_enable_lpass_core_shared_clock(u16 port_id, u32 enable);
483
484 int q6afe_check_osr_clk_freq(u32 freq);
485
486 int afe_send_spdif_clk_cfg(struct afe_param_id_spdif_clk_cfg *cfg,
487                 u16 port_id);
488 int afe_send_spdif_ch_status_cfg(struct afe_param_id_spdif_ch_status_cfg
489                 *ch_status_cfg, u16 port_id);
490
491 int afe_spdif_port_start(u16 port_id, struct afe_spdif_port_config *spdif_port,
492                 u32 rate);
493
494 int afe_turn_onoff_hw_mad(u16 mad_type, u16 mad_enable);
495 int afe_port_set_mad_type(u16 port_id, enum afe_mad_type mad_type);
496 enum afe_mad_type afe_port_get_mad_type(u16 port_id);
497 int afe_set_config(enum afe_config_type config_type, void *config_data,
498                    int arg);
499 void afe_clear_config(enum afe_config_type config);
500 bool afe_has_config(enum afe_config_type config);
501
502 void afe_set_aanc_info(struct aanc_data *aanc_info);
503 int afe_port_group_set_param(u16 group_id,
504         union afe_port_group_config *afe_group_config);
505 int afe_port_group_enable(u16 group_id,
506         union afe_port_group_config *afe_group_config, u16 enable);
507 int afe_unmap_rtac_block(uint32_t *mem_map_handle);
508 int afe_map_rtac_block(struct rtac_cal_block_data *cal_block);
509 int afe_send_slot_mapping_cfg(
510         struct afe_param_id_slot_mapping_cfg *slot_mapping_cfg,
511         u16 port_id);
512 int afe_send_custom_tdm_header_cfg(
513         struct afe_param_id_custom_tdm_header_cfg *custom_tdm_header_cfg,
514         u16 port_id);
515 int afe_tdm_port_start(u16 port_id, struct afe_tdm_port_config *tdm_port,
516                        u32 rate, u16 num_groups);
517 void afe_set_routing_callback(routing_cb);
518 int afe_get_av_dev_drift(struct afe_param_id_dev_timing_stats *timing_stats,
519                 u16 port);
520 int afe_get_svc_version(uint32_t service_id);
521 int afe_request_dma_resources(uint8_t dma_type, uint8_t num_read_dma_channels,
522                                 uint8_t num_write_dma_channels);
523 int afe_get_dma_idx(bool **ret_rddma_idx,
524                                 bool **ret_wrdma_idx);
525 int afe_release_all_dma_resources(void);
526 int afe_i2s_port_start(u16 port_id, struct afe_i2s_port_config *i2s_port,
527                 u32 rate, u16 num_groups);
528 int afe_port_group_mi2s_enable(u16 group_id,
529                 union afe_port_group_mi2s_config *afe_group_config,
530                 u16 enable);
531 #endif /* __Q6AFE_V2_H__ */