blob: 4fa2eac0845a6ec13d93d65039305ff2ac127b77 [file] [log] [blame]
Rohit kumar5d860f42019-02-01 18:01:12 +05301/* Copyright (c) 2012-2019, The Linux Foundation. All rights reserved.
Asish Bhattacharya8e2277f2017-07-20 18:31:55 +05302 *
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 __Q6_ADM_V2_H__
13#define __Q6_ADM_V2_H__
14
15
16#define ADM_PATH_PLAYBACK 0x1
17#define ADM_PATH_LIVE_REC 0x2
18#define ADM_PATH_NONLIVE_REC 0x3
19#define ADM_PATH_COMPRESSED_RX 0x5
20#define ADM_PATH_COMPRESSED_TX 0x6
Laxminath Kasam605b42f2017-08-01 22:02:15 +053021#include <dsp/rtac.h>
22#include <dsp/q6afe-v2.h>
23#include <dsp/q6audio-v2.h>
Asish Bhattacharya8e2277f2017-07-20 18:31:55 +053024
25#define MAX_MODULES_IN_TOPO 16
26#define ADM_GET_TOPO_MODULE_LIST_LENGTH\
27 ((MAX_MODULES_IN_TOPO + 1) * sizeof(uint32_t))
28#define AUD_PROC_BLOCK_SIZE 4096
29#define AUD_VOL_BLOCK_SIZE 4096
Bhalchandra Gajareface2762018-05-10 14:16:49 -070030#define AUD_PROC_PERSIST_BLOCK_SIZE (2 * 1024 * 1020)
Asish Bhattacharya8e2277f2017-07-20 18:31:55 +053031#define AUDIO_RX_CALIBRATION_SIZE (AUD_PROC_BLOCK_SIZE + \
32 AUD_VOL_BLOCK_SIZE)
Dhanalakshmi Siddani040e0262018-11-26 23:01:26 +053033#define SESSION_TYPE_RX 0
34#define SESSION_TYPE_TX 1
35
Asish Bhattacharya8e2277f2017-07-20 18:31:55 +053036enum {
37 ADM_CUSTOM_TOP_CAL = 0,
38 ADM_AUDPROC_CAL,
Aditya Bavanari2a627ae2017-11-21 20:24:53 +053039 ADM_LSM_AUDPROC_CAL,
Asish Bhattacharya8e2277f2017-07-20 18:31:55 +053040 ADM_AUDVOL_CAL,
41 ADM_RTAC_INFO_CAL,
42 ADM_RTAC_APR_CAL,
43 ADM_SRS_TRUMEDIA,
44 ADM_RTAC_AUDVOL_CAL,
Bhalchandra Gajareface2762018-05-10 14:16:49 -070045 ADM_LSM_AUDPROC_PERSISTENT_CAL,
Asish Bhattacharya8e2277f2017-07-20 18:31:55 +053046 ADM_MAX_CAL_TYPES
47};
48
49enum {
50 ADM_MEM_MAP_INDEX_SOURCE_TRACKING = ADM_MAX_CAL_TYPES,
51 ADM_MEM_MAP_INDEX_MAX
52};
53
54enum {
55 ADM_CLIENT_ID_DEFAULT = 0,
56 ADM_CLIENT_ID_SOURCE_TRACKING,
57 ADM_CLIENT_ID_MAX,
58};
59
60#define MAX_COPPS_PER_PORT 0x8
Dieter Lueckinga8b8e3b2018-09-28 14:29:17 +020061#define ADM_MAX_CHANNELS 32
62
63#define ADSP_ADM_API_VERSION_V3 3
Asish Bhattacharya8e2277f2017-07-20 18:31:55 +053064
65/* multiple copp per stream. */
66struct route_payload {
67 unsigned int copp_idx[MAX_COPPS_PER_PORT];
68 unsigned int port_id[MAX_COPPS_PER_PORT];
69 int app_type[MAX_COPPS_PER_PORT];
70 int acdb_dev_id[MAX_COPPS_PER_PORT];
71 int sample_rate[MAX_COPPS_PER_PORT];
72 unsigned short num_copps;
73 unsigned int session_id;
74};
75
76struct default_chmixer_param_id_coeff {
77 uint32_t index;
78 uint16_t num_output_channels;
79 uint16_t num_input_channels;
80};
81
82struct msm_pcm_channel_mixer {
83 int output_channel;
84 int input_channels[ADM_MAX_CHANNELS];
85 bool enable;
86 int rule;
87 int channel_weight[ADM_MAX_CHANNELS][ADM_MAX_CHANNELS];
88};
89
90int srs_trumedia_open(int port_id, int copp_idx, __s32 srs_tech_id,
91 void *srs_params);
92
93int adm_dts_eagle_set(int port_id, int copp_idx, int param_id,
94 void *data, uint32_t size);
95
96int adm_dts_eagle_get(int port_id, int copp_idx, int param_id,
97 void *data, uint32_t size);
98
99void adm_copp_mfc_cfg(int port_id, int copp_idx, int dst_sample_rate);
100
101int adm_get_params(int port_id, int copp_idx, uint32_t module_id,
102 uint32_t param_id, uint32_t params_length, char *params);
103
104int adm_send_params_v5(int port_id, int copp_idx, char *params,
105 uint32_t params_length);
106
107int adm_dolby_dap_send_params(int port_id, int copp_idx, char *params,
108 uint32_t params_length);
109
110int adm_open(int port, int path, int rate, int mode, int topology,
111 int perf_mode, uint16_t bits_per_sample,
Sachin Mohan Gadag3c3c5812018-07-20 15:46:54 +0530112 int app_type, int acdbdev_id, int session_type);
Asish Bhattacharya8e2277f2017-07-20 18:31:55 +0530113
114int adm_map_rtac_block(struct rtac_cal_block_data *cal_block);
115
116int adm_unmap_rtac_block(uint32_t *mem_map_handle);
117
118int adm_close(int port, int topology, int perf_mode);
119
120int adm_matrix_map(int path, struct route_payload payload_map,
121 int perf_mode, uint32_t passthr_mode);
122
123int adm_connect_afe_port(int mode, int session_id, int port_id);
124
125void adm_ec_ref_rx_id(int port_id);
126
127void adm_num_ec_ref_rx_chans(int num_chans);
128
129void adm_ec_ref_rx_bit_width(int bit_width);
130
131void adm_ec_ref_rx_sampling_rate(int sampling_rate);
132
133int adm_get_lowlatency_copp_id(int port_id);
134
135int adm_set_multi_ch_map(char *channel_map, int path);
136
137int adm_get_multi_ch_map(char *channel_map, int path);
138
Rohit kumar5d860f42019-02-01 18:01:12 +0530139void adm_set_port_multi_ch_map(char *channel_map, int port_id);
140
Asish Bhattacharya8e2277f2017-07-20 18:31:55 +0530141int adm_validate_and_get_port_index(int port_id);
142
143int adm_get_default_copp_idx(int port_id);
144
145int adm_get_topology_for_port_from_copp_id(int port_id, int copp_id);
146
147int adm_get_topology_for_port_copp_idx(int port_id, int copp_idx);
148
149int adm_get_indexes_from_copp_id(int copp_id, int *port_idx, int *copp_idx);
150
151int adm_set_stereo_to_custom_stereo(int port_id, int copp_idx,
152 unsigned int session_id,
153 char *params, uint32_t params_length);
154
155int adm_get_pp_topo_module_list(int port_id, int copp_idx, int32_t param_length,
156 char *params);
157
158int adm_set_volume(int port_id, int copp_idx, int volume);
159
160int adm_set_softvolume(int port_id, int copp_idx,
161 struct audproc_softvolume_params *softvol_param);
162
163int adm_set_mic_gain(int port_id, int copp_idx, int volume);
164
165int adm_send_set_multichannel_ec_primary_mic_ch(int port_id, int copp_idx,
166 int primary_mic_ch);
167
168int adm_param_enable(int port_id, int copp_idx, int module_id, int enable);
169
170int adm_send_calibration(int port_id, int copp_idx, int path, int perf_mode,
171 int cal_type, char *params, int size);
172
173int adm_set_wait_parameters(int port_id, int copp_idx);
174
175int adm_reset_wait_parameters(int port_id, int copp_idx);
176
177int adm_wait_timeout(int port_id, int copp_idx, int wait_time);
178
179int adm_store_cal_data(int port_id, int copp_idx, int path, int perf_mode,
180 int cal_type, char *params, int *size);
181
182int adm_send_compressed_device_mute(int port_id, int copp_idx, bool mute_on);
183
184int adm_send_compressed_device_latency(int port_id, int copp_idx, int latency);
185int adm_set_sound_focus(int port_id, int copp_idx,
186 struct sound_focus_param soundFocusData);
187int adm_get_sound_focus(int port_id, int copp_idx,
188 struct sound_focus_param *soundFocusData);
189int adm_get_source_tracking(int port_id, int copp_idx,
190 struct source_tracking_param *sourceTrackingData);
191int adm_swap_speaker_channels(int port_id, int copp_idx, int sample_rate,
192 bool spk_swap);
193int adm_programable_channel_mixer(int port_id, int copp_idx, int session_id,
194 int session_type,
195 struct msm_pcm_channel_mixer *ch_mixer,
Dhanalakshmi Siddani040e0262018-11-26 23:01:26 +0530196 int channel_index, bool use_default_chmap,
197 char *ch_map);
Laxminath Kasam8b1366a2017-10-05 01:44:16 +0530198void msm_dts_srs_acquire_lock(void);
199void msm_dts_srs_release_lock(void);
Dieter Lueckinga8b8e3b2018-09-28 14:29:17 +0200200void adm_set_native_mode(int mode);
Asish Bhattacharya8e2277f2017-07-20 18:31:55 +0530201#endif /* __Q6_ADM_V2_H__ */