blob: 063b5c1a8b57ca0a8c8d2957ecca6ea8a98ad0b4 [file] [log] [blame]
Banajit Goswami0530e2f2016-12-09 21:34:37 -08001/*
2 * Copyright (c) 2013-2015, 2017 The Linux Foundation. All rights reserved.
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License version 2 and
6 * only version 2 as published by the Free Software Foundation.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 */
13
14#ifndef _AUDIO_EFFECTS_H
15#define _AUDIO_EFFECTS_H
16
17/** AUDIO EFFECTS **/
18
19
20/* CONFIG GET/SET */
21#define CONFIG_CACHE 0
22#define CONFIG_SET 1
23#define CONFIG_GET 2
24
25/* CONFIG HEADER */
26/*
27 * MODULE_ID,
28 * DEVICE,
29 * NUM_COMMANDS,
30 * COMMAND_ID_1,
31 * CONFIG_CACHE/SET/GET,
32 * OFFSET_1,
33 * LENGTH_1,
34 * VALUES_1,
35 * ...,
36 * ...,
37 * COMMAND_ID_2,
38 * CONFIG_CACHE/SET/GET,
39 * OFFSET_2,
40 * LENGTH_2,
41 * VALUES_2,
42 * ...,
43 * ...,
44 * COMMAND_ID_3,
45 * ...
46 */
47
48
49/* CONFIG PARAM IDs */
50#define VIRTUALIZER_MODULE 0x00001000
51#define VIRTUALIZER_ENABLE 0x00001001
52#define VIRTUALIZER_STRENGTH 0x00001002
53#define VIRTUALIZER_OUT_TYPE 0x00001003
54#define VIRTUALIZER_GAIN_ADJUST 0x00001004
55#define VIRTUALIZER_ENABLE_PARAM_LEN 1
56#define VIRTUALIZER_STRENGTH_PARAM_LEN 1
57#define VIRTUALIZER_OUT_TYPE_PARAM_LEN 1
58#define VIRTUALIZER_GAIN_ADJUST_PARAM_LEN 1
59
60#define REVERB_MODULE 0x00002000
61#define REVERB_ENABLE 0x00002001
62#define REVERB_MODE 0x00002002
63#define REVERB_PRESET 0x00002003
64#define REVERB_WET_MIX 0x00002004
65#define REVERB_GAIN_ADJUST 0x00002005
66#define REVERB_ROOM_LEVEL 0x00002006
67#define REVERB_ROOM_HF_LEVEL 0x00002007
68#define REVERB_DECAY_TIME 0x00002008
69#define REVERB_DECAY_HF_RATIO 0x00002009
70#define REVERB_REFLECTIONS_LEVEL 0x0000200a
71#define REVERB_REFLECTIONS_DELAY 0x0000200b
72#define REVERB_LEVEL 0x0000200c
73#define REVERB_DELAY 0x0000200d
74#define REVERB_DIFFUSION 0x0000200e
75#define REVERB_DENSITY 0x0000200f
76#define REVERB_ENABLE_PARAM_LEN 1
77#define REVERB_MODE_PARAM_LEN 1
78#define REVERB_PRESET_PARAM_LEN 1
79#define REVERB_WET_MIX_PARAM_LEN 1
80#define REVERB_GAIN_ADJUST_PARAM_LEN 1
81#define REVERB_ROOM_LEVEL_PARAM_LEN 1
82#define REVERB_ROOM_HF_LEVEL_PARAM_LEN 1
83#define REVERB_DECAY_TIME_PARAM_LEN 1
84#define REVERB_DECAY_HF_RATIO_PARAM_LEN 1
85#define REVERB_REFLECTIONS_LEVEL_PARAM_LEN 1
86#define REVERB_REFLECTIONS_DELAY_PARAM_LEN 1
87#define REVERB_LEVEL_PARAM_LEN 1
88#define REVERB_DELAY_PARAM_LEN 1
89#define REVERB_DIFFUSION_PARAM_LEN 1
90#define REVERB_DENSITY_PARAM_LEN 1
91
92#define BASS_BOOST_MODULE 0x00003000
93#define BASS_BOOST_ENABLE 0x00003001
94#define BASS_BOOST_MODE 0x00003002
95#define BASS_BOOST_STRENGTH 0x00003003
96#define BASS_BOOST_ENABLE_PARAM_LEN 1
97#define BASS_BOOST_MODE_PARAM_LEN 1
98#define BASS_BOOST_STRENGTH_PARAM_LEN 1
99
100#define EQ_MODULE 0x00004000
101#define EQ_ENABLE 0x00004001
102#define EQ_CONFIG 0x00004002
103#define EQ_NUM_BANDS 0x00004003
104#define EQ_BAND_LEVELS 0x00004004
105#define EQ_BAND_LEVEL_RANGE 0x00004005
106#define EQ_BAND_FREQS 0x00004006
107#define EQ_SINGLE_BAND_FREQ_RANGE 0x00004007
108#define EQ_SINGLE_BAND_FREQ 0x00004008
109#define EQ_BAND_INDEX 0x00004009
110#define EQ_PRESET_ID 0x0000400a
111#define EQ_NUM_PRESETS 0x0000400b
112#define EQ_PRESET_NAME 0x0000400c
113#define EQ_ENABLE_PARAM_LEN 1
114#define EQ_CONFIG_PARAM_LEN 3
115#define EQ_CONFIG_PER_BAND_PARAM_LEN 5
116#define EQ_NUM_BANDS_PARAM_LEN 1
117#define EQ_BAND_LEVELS_PARAM_LEN 13
118#define EQ_BAND_LEVEL_RANGE_PARAM_LEN 2
119#define EQ_BAND_FREQS_PARAM_LEN 13
120#define EQ_SINGLE_BAND_FREQ_RANGE_PARAM_LEN 2
121#define EQ_SINGLE_BAND_FREQ_PARAM_LEN 1
122#define EQ_BAND_INDEX_PARAM_LEN 1
123#define EQ_PRESET_ID_PARAM_LEN 1
124#define EQ_NUM_PRESETS_PARAM_LEN 1
125#define EQ_PRESET_NAME_PARAM_LEN 32
126
127#define EQ_TYPE_NONE 0
128#define EQ_BASS_BOOST 1
129#define EQ_BASS_CUT 2
130#define EQ_TREBLE_BOOST 3
131#define EQ_TREBLE_CUT 4
132#define EQ_BAND_BOOST 5
133#define EQ_BAND_CUT 6
134
135#define SOFT_VOLUME_MODULE 0x00006000
136#define SOFT_VOLUME_ENABLE 0x00006001
137#define SOFT_VOLUME_GAIN_2CH 0x00006002
138#define SOFT_VOLUME_GAIN_MASTER 0x00006003
139#define SOFT_VOLUME_ENABLE_PARAM_LEN 1
140#define SOFT_VOLUME_GAIN_2CH_PARAM_LEN 2
141#define SOFT_VOLUME_GAIN_MASTER_PARAM_LEN 1
142
143#define SOFT_VOLUME2_MODULE 0x00007000
144#define SOFT_VOLUME2_ENABLE 0x00007001
145#define SOFT_VOLUME2_GAIN_2CH 0x00007002
146#define SOFT_VOLUME2_GAIN_MASTER 0x00007003
147#define SOFT_VOLUME2_ENABLE_PARAM_LEN SOFT_VOLUME_ENABLE_PARAM_LEN
148#define SOFT_VOLUME2_GAIN_2CH_PARAM_LEN SOFT_VOLUME_GAIN_2CH_PARAM_LEN
149#define SOFT_VOLUME2_GAIN_MASTER_PARAM_LEN \
150 SOFT_VOLUME_GAIN_MASTER_PARAM_LEN
151
152#define PBE_CONF_MODULE_ID 0x00010C2A
153#define PBE_CONF_PARAM_ID 0x00010C49
154
155#define PBE_MODULE 0x00008000
156#define PBE_ENABLE 0x00008001
157#define PBE_CONFIG 0x00008002
158#define PBE_ENABLE_PARAM_LEN 1
159#define PBE_CONFIG_PARAM_LEN 28
160
161#define COMMAND_PAYLOAD_LEN 3
162#define COMMAND_PAYLOAD_SZ (COMMAND_PAYLOAD_LEN * sizeof(uint32_t))
163#define MAX_INBAND_PARAM_SZ 4096
164#define Q27_UNITY (1 << 27)
165#define Q8_UNITY (1 << 8)
166#define CUSTOM_OPENSL_PRESET 18
167
168#define VIRTUALIZER_ENABLE_PARAM_SZ \
169 (VIRTUALIZER_ENABLE_PARAM_LEN*sizeof(uint32_t))
170#define VIRTUALIZER_STRENGTH_PARAM_SZ \
171 (VIRTUALIZER_STRENGTH_PARAM_LEN*sizeof(uint32_t))
172#define VIRTUALIZER_OUT_TYPE_PARAM_SZ \
173 (VIRTUALIZER_OUT_TYPE_PARAM_LEN*sizeof(uint32_t))
174#define VIRTUALIZER_GAIN_ADJUST_PARAM_SZ \
175 (VIRTUALIZER_GAIN_ADJUST_PARAM_LEN*sizeof(uint32_t))
176struct virtualizer_params {
177 uint32_t device;
178 uint32_t enable_flag;
179 uint32_t strength;
180 uint32_t out_type;
181 int32_t gain_adjust;
182};
183
184#define NUM_OSL_REVERB_PRESETS_SUPPORTED 6
185#define REVERB_ENABLE_PARAM_SZ \
186 (REVERB_ENABLE_PARAM_LEN*sizeof(uint32_t))
187#define REVERB_MODE_PARAM_SZ \
188 (REVERB_MODE_PARAM_LEN*sizeof(uint32_t))
189#define REVERB_PRESET_PARAM_SZ \
190 (REVERB_PRESET_PARAM_LEN*sizeof(uint32_t))
191#define REVERB_WET_MIX_PARAM_SZ \
192 (REVERB_WET_MIX_PARAM_LEN*sizeof(uint32_t))
193#define REVERB_GAIN_ADJUST_PARAM_SZ \
194 (REVERB_GAIN_ADJUST_PARAM_LEN*sizeof(uint32_t))
195#define REVERB_ROOM_LEVEL_PARAM_SZ \
196 (REVERB_ROOM_LEVEL_PARAM_LEN*sizeof(uint32_t))
197#define REVERB_ROOM_HF_LEVEL_PARAM_SZ \
198 (REVERB_ROOM_HF_LEVEL_PARAM_LEN*sizeof(uint32_t))
199#define REVERB_DECAY_TIME_PARAM_SZ \
200 (REVERB_DECAY_TIME_PARAM_LEN*sizeof(uint32_t))
201#define REVERB_DECAY_HF_RATIO_PARAM_SZ \
202 (REVERB_DECAY_HF_RATIO_PARAM_LEN*sizeof(uint32_t))
203#define REVERB_REFLECTIONS_LEVEL_PARAM_SZ \
204 (REVERB_REFLECTIONS_LEVEL_PARAM_LEN*sizeof(uint32_t))
205#define REVERB_REFLECTIONS_DELAY_PARAM_SZ \
206 (REVERB_REFLECTIONS_DELAY_PARAM_LEN*sizeof(uint32_t))
207#define REVERB_LEVEL_PARAM_SZ \
208 (REVERB_LEVEL_PARAM_LEN*sizeof(uint32_t))
209#define REVERB_DELAY_PARAM_SZ \
210 (REVERB_DELAY_PARAM_LEN*sizeof(uint32_t))
211#define REVERB_DIFFUSION_PARAM_SZ \
212 (REVERB_DIFFUSION_PARAM_LEN*sizeof(uint32_t))
213#define REVERB_DENSITY_PARAM_SZ \
214 (REVERB_DENSITY_PARAM_LEN*sizeof(uint32_t))
215struct reverb_params {
216 uint32_t device;
217 uint32_t enable_flag;
218 uint32_t mode;
219 uint32_t preset;
220 uint32_t wet_mix;
221 int32_t gain_adjust;
222 int32_t room_level;
223 int32_t room_hf_level;
224 uint32_t decay_time;
225 uint32_t decay_hf_ratio;
226 int32_t reflections_level;
227 uint32_t reflections_delay;
228 int32_t level;
229 uint32_t delay;
230 uint32_t diffusion;
231 uint32_t density;
232};
233
234#define BASS_BOOST_ENABLE_PARAM_SZ \
235 (BASS_BOOST_ENABLE_PARAM_LEN*sizeof(uint32_t))
236#define BASS_BOOST_MODE_PARAM_SZ \
237 (BASS_BOOST_MODE_PARAM_LEN*sizeof(uint32_t))
238#define BASS_BOOST_STRENGTH_PARAM_SZ \
239 (BASS_BOOST_STRENGTH_PARAM_LEN*sizeof(uint32_t))
240struct bass_boost_params {
241 uint32_t device;
242 uint32_t enable_flag;
243 uint32_t mode;
244 uint32_t strength;
245};
246
247
248#define MAX_EQ_BANDS 12
249#define MAX_OSL_EQ_BANDS 5
250#define EQ_ENABLE_PARAM_SZ \
251 (EQ_ENABLE_PARAM_LEN*sizeof(uint32_t))
252#define EQ_CONFIG_PARAM_SZ \
253 (EQ_CONFIG_PARAM_LEN*sizeof(uint32_t))
254#define EQ_CONFIG_PER_BAND_PARAM_SZ \
255 (EQ_CONFIG_PER_BAND_PARAM_LEN*sizeof(uint32_t))
256#define EQ_CONFIG_PARAM_MAX_LEN (EQ_CONFIG_PARAM_LEN+\
257 MAX_EQ_BANDS*EQ_CONFIG_PER_BAND_PARAM_LEN)
258#define EQ_CONFIG_PARAM_MAX_SZ \
259 (EQ_CONFIG_PARAM_MAX_LEN*sizeof(uint32_t))
260#define EQ_NUM_BANDS_PARAM_SZ \
261 (EQ_NUM_BANDS_PARAM_LEN*sizeof(uint32_t))
262#define EQ_BAND_LEVELS_PARAM_SZ \
263 (EQ_BAND_LEVELS_PARAM_LEN*sizeof(uint32_t))
264#define EQ_BAND_LEVEL_RANGE_PARAM_SZ \
265 (EQ_BAND_LEVEL_RANGE_PARAM_LEN*sizeof(uint32_t))
266#define EQ_BAND_FREQS_PARAM_SZ \
267 (EQ_BAND_FREQS_PARAM_LEN*sizeof(uint32_t))
268#define EQ_SINGLE_BAND_FREQ_RANGE_PARAM_SZ \
269 (EQ_SINGLE_BAND_FREQ_RANGE_PARAM_LEN*sizeof(uint32_t))
270#define EQ_SINGLE_BAND_FREQ_PARAM_SZ \
271 (EQ_SINGLE_BAND_FREQ_PARAM_LEN*sizeof(uint32_t))
272#define EQ_BAND_INDEX_PARAM_SZ \
273 (EQ_BAND_INDEX_PARAM_LEN*sizeof(uint32_t))
274#define EQ_PRESET_ID_PARAM_SZ \
275 (EQ_PRESET_ID_PARAM_LEN*sizeof(uint32_t))
276#define EQ_NUM_PRESETS_PARAM_SZ \
277 (EQ_NUM_PRESETS_PARAM_LEN*sizeof(uint8_t))
278struct eq_config_t {
279 int32_t eq_pregain;
280 int32_t preset_id;
281 uint32_t num_bands;
282};
283struct eq_per_band_config_t {
284 int32_t band_idx;
285 uint32_t filter_type;
286 uint32_t freq_millihertz;
287 int32_t gain_millibels;
288 uint32_t quality_factor;
289};
290struct eq_per_band_freq_range_t {
291 uint32_t band_index;
292 uint32_t min_freq_millihertz;
293 uint32_t max_freq_millihertz;
294};
295
296struct eq_params {
297 uint32_t device;
298 uint32_t enable_flag;
299 struct eq_config_t config;
300 struct eq_per_band_config_t per_band_cfg[MAX_EQ_BANDS];
301 struct eq_per_band_freq_range_t per_band_freq_range[MAX_EQ_BANDS];
302 uint32_t band_index;
303 uint32_t freq_millihertz;
304};
305
306#define PBE_ENABLE_PARAM_SZ \
307 (PBE_ENABLE_PARAM_LEN*sizeof(uint32_t))
308#define PBE_CONFIG_PARAM_SZ \
309 (PBE_CONFIG_PARAM_LEN*sizeof(uint16_t))
310struct pbe_config_t {
311 int16_t real_bass_mix;
312 int16_t bass_color_control;
313 uint16_t main_chain_delay;
314 uint16_t xover_filter_order;
315 uint16_t bandpass_filter_order;
316 int16_t drc_delay;
317 uint16_t rms_tav;
318 int16_t exp_threshold;
319 uint16_t exp_slope;
320 int16_t comp_threshold;
321 uint16_t comp_slope;
322 uint16_t makeup_gain;
323 uint32_t comp_attack;
324 uint32_t comp_release;
325 uint32_t exp_attack;
326 uint32_t exp_release;
327 int16_t limiter_bass_threshold;
328 int16_t limiter_high_threshold;
329 int16_t limiter_bass_makeup_gain;
330 int16_t limiter_high_makeup_gain;
331 int16_t limiter_bass_gc;
332 int16_t limiter_high_gc;
333 int16_t limiter_delay;
334 uint16_t reserved;
335 /* place holder for filter coeffs to be followed */
336 int32_t p1LowPassCoeffs[5*2];
337 int32_t p1HighPassCoeffs[5*2];
338 int32_t p1BandPassCoeffs[5*3];
339 int32_t p1BassShelfCoeffs[5];
340 int32_t p1TrebleShelfCoeffs[5];
341} __packed;
342
343struct pbe_params {
344 uint32_t device;
345 uint32_t enable_flag;
346 uint32_t cfg_len;
347 struct pbe_config_t config;
348};
349
350#define SOFT_VOLUME_ENABLE_PARAM_SZ \
351 (SOFT_VOLUME_ENABLE_PARAM_LEN*sizeof(uint32_t))
352#define SOFT_VOLUME_GAIN_MASTER_PARAM_SZ \
353 (SOFT_VOLUME_GAIN_MASTER_PARAM_LEN*sizeof(uint32_t))
354#define SOFT_VOLUME_GAIN_2CH_PARAM_SZ \
355 (SOFT_VOLUME_GAIN_2CH_PARAM_LEN*sizeof(uint16_t))
356struct soft_volume_params {
357 uint32_t device;
358 uint32_t enable_flag;
359 uint32_t master_gain;
360 uint32_t left_gain;
361 uint32_t right_gain;
362};
363
364struct msm_nt_eff_all_config {
365 struct bass_boost_params bass_boost;
366 struct pbe_params pbe;
367 struct virtualizer_params virtualizer;
368 struct reverb_params reverb;
369 struct eq_params equalizer;
370 struct soft_volume_params saplus_vol;
371 struct soft_volume_params topo_switch_vol;
372};
373
374#endif /*_MSM_AUDIO_EFFECTS_H*/