1 /*
2  * Copyright (c) 2013-2014, 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 
28 	MODULE_ID,
29 	DEVICE,
30 	NUM_COMMANDS,
31 	COMMAND_ID_1,
32 	CONFIG_CACHE/SET/GET,
33 	OFFSET_1,
34 	LENGTH_1,
35 	VALUES_1,
36 	...,
37 	...,
38 	COMMAND_ID_2,
39 	CONFIG_CACHE/SET/GET,
40 	OFFSET_2,
41 	LENGTH_2,
42 	VALUES_2,
43 	...,
44 	...,
45 	COMMAND_ID_3,
46 	...
47 */
48 
49 
50 /* CONFIG PARAM IDs */
51 #define VIRTUALIZER_MODULE		0x00001000
52 #define VIRTUALIZER_ENABLE		0x00001001
53 #define VIRTUALIZER_STRENGTH		0x00001002
54 #define VIRTUALIZER_OUT_TYPE		0x00001003
55 #define VIRTUALIZER_GAIN_ADJUST		0x00001004
56 #define VIRTUALIZER_ENABLE_PARAM_LEN		1
57 #define VIRTUALIZER_STRENGTH_PARAM_LEN		1
58 #define VIRTUALIZER_OUT_TYPE_PARAM_LEN		1
59 #define VIRTUALIZER_GAIN_ADJUST_PARAM_LEN	1
60 
61 #define REVERB_MODULE			0x00002000
62 #define REVERB_ENABLE			0x00002001
63 #define REVERB_MODE			0x00002002
64 #define REVERB_PRESET			0x00002003
65 #define REVERB_WET_MIX			0x00002004
66 #define REVERB_GAIN_ADJUST		0x00002005
67 #define REVERB_ROOM_LEVEL		0x00002006
68 #define REVERB_ROOM_HF_LEVEL		0x00002007
69 #define REVERB_DECAY_TIME		0x00002008
70 #define REVERB_DECAY_HF_RATIO		0x00002009
71 #define REVERB_REFLECTIONS_LEVEL	0x0000200a
72 #define REVERB_REFLECTIONS_DELAY	0x0000200b
73 #define REVERB_LEVEL			0x0000200c
74 #define REVERB_DELAY			0x0000200d
75 #define REVERB_DIFFUSION		0x0000200e
76 #define REVERB_DENSITY			0x0000200f
77 #define REVERB_ENABLE_PARAM_LEN			1
78 #define REVERB_MODE_PARAM_LEN			1
79 #define REVERB_PRESET_PARAM_LEN			1
80 #define REVERB_WET_MIX_PARAM_LEN		1
81 #define REVERB_GAIN_ADJUST_PARAM_LEN		1
82 #define REVERB_ROOM_LEVEL_PARAM_LEN		1
83 #define REVERB_ROOM_HF_LEVEL_PARAM_LEN		1
84 #define REVERB_DECAY_TIME_PARAM_LEN		1
85 #define REVERB_DECAY_HF_RATIO_PARAM_LEN		1
86 #define REVERB_REFLECTIONS_LEVEL_PARAM_LEN	1
87 #define REVERB_REFLECTIONS_DELAY_PARAM_LEN	1
88 #define REVERB_LEVEL_PARAM_LEN			1
89 #define REVERB_DELAY_PARAM_LEN			1
90 #define REVERB_DIFFUSION_PARAM_LEN		1
91 #define REVERB_DENSITY_PARAM_LEN		1
92 
93 #define BASS_BOOST_MODULE		0x00003000
94 #define BASS_BOOST_ENABLE		0x00003001
95 #define BASS_BOOST_MODE			0x00003002
96 #define BASS_BOOST_STRENGTH		0x00003003
97 #define BASS_BOOST_ENABLE_PARAM_LEN		1
98 #define BASS_BOOST_MODE_PARAM_LEN		1
99 #define BASS_BOOST_STRENGTH_PARAM_LEN		1
100 
101 #define EQ_MODULE			0x00004000
102 #define EQ_ENABLE			0x00004001
103 #define EQ_CONFIG			0x00004002
104 #define EQ_NUM_BANDS			0x00004003
105 #define EQ_BAND_LEVELS			0x00004004
106 #define EQ_BAND_LEVEL_RANGE		0x00004005
107 #define EQ_BAND_FREQS			0x00004006
108 #define EQ_SINGLE_BAND_FREQ_RANGE	0x00004007
109 #define EQ_SINGLE_BAND_FREQ		0x00004008
110 #define EQ_BAND_INDEX			0x00004009
111 #define EQ_PRESET_ID			0x0000400a
112 #define EQ_NUM_PRESETS			0x0000400b
113 #define EQ_PRESET_NAME			0x0000400c
114 #define EQ_ENABLE_PARAM_LEN			1
115 #define EQ_CONFIG_PARAM_LEN			3
116 #define EQ_CONFIG_PER_BAND_PARAM_LEN		5
117 #define EQ_NUM_BANDS_PARAM_LEN			1
118 #define EQ_BAND_LEVELS_PARAM_LEN		13
119 #define EQ_BAND_LEVEL_RANGE_PARAM_LEN		2
120 #define EQ_BAND_FREQS_PARAM_LEN			13
121 #define EQ_SINGLE_BAND_FREQ_RANGE_PARAM_LEN	2
122 #define EQ_SINGLE_BAND_FREQ_PARAM_LEN		1
123 #define EQ_BAND_INDEX_PARAM_LEN			1
124 #define EQ_PRESET_ID_PARAM_LEN			1
125 #define EQ_NUM_PRESETS_PARAM_LEN		1
126 #define EQ_PRESET_NAME_PARAM_LEN		32
127 
128 #define EQ_TYPE_NONE	0
129 #define EQ_BASS_BOOST	1
130 #define EQ_BASS_CUT	2
131 #define EQ_TREBLE_BOOST	3
132 #define EQ_TREBLE_CUT	4
133 #define EQ_BAND_BOOST	5
134 #define EQ_BAND_CUT	6
135 
136 
137 
138 #define COMMAND_PAYLOAD_LEN	3
139 #define COMMAND_PAYLOAD_SZ	(COMMAND_PAYLOAD_LEN * sizeof(uint32_t))
140 #define MAX_INBAND_PARAM_SZ	4096
141 #define Q27_UNITY		(1 << 27)
142 #define Q8_UNITY		(1 << 8)
143 #define CUSTOM_OPENSL_PRESET	18
144 
145 #define VIRTUALIZER_ENABLE_PARAM_SZ	\
146 			(VIRTUALIZER_ENABLE_PARAM_LEN*sizeof(uint32_t))
147 #define VIRTUALIZER_STRENGTH_PARAM_SZ	\
148 			(VIRTUALIZER_STRENGTH_PARAM_LEN*sizeof(uint32_t))
149 #define VIRTUALIZER_OUT_TYPE_PARAM_SZ	\
150 			(VIRTUALIZER_OUT_TYPE_PARAM_LEN*sizeof(uint32_t))
151 #define VIRTUALIZER_GAIN_ADJUST_PARAM_SZ	\
152 			(VIRTUALIZER_GAIN_ADJUST_PARAM_LEN*sizeof(uint32_t))
153 struct virtualizer_params {
154 	uint32_t device;
155 	uint32_t enable_flag;
156 	uint32_t strength;
157 	uint32_t out_type;
158 	int32_t gain_adjust;
159 };
160 
161 #define NUM_OSL_REVERB_PRESETS_SUPPORTED	6
162 #define REVERB_ENABLE_PARAM_SZ		\
163 			(REVERB_ENABLE_PARAM_LEN*sizeof(uint32_t))
164 #define REVERB_MODE_PARAM_SZ		\
165 			(REVERB_MODE_PARAM_LEN*sizeof(uint32_t))
166 #define REVERB_PRESET_PARAM_SZ		\
167 			(REVERB_PRESET_PARAM_LEN*sizeof(uint32_t))
168 #define REVERB_WET_MIX_PARAM_SZ		\
169 			(REVERB_WET_MIX_PARAM_LEN*sizeof(uint32_t))
170 #define REVERB_GAIN_ADJUST_PARAM_SZ	\
171 			(REVERB_GAIN_ADJUST_PARAM_LEN*sizeof(uint32_t))
172 #define REVERB_ROOM_LEVEL_PARAM_SZ	\
173 			(REVERB_ROOM_LEVEL_PARAM_LEN*sizeof(uint32_t))
174 #define REVERB_ROOM_HF_LEVEL_PARAM_SZ	\
175 			(REVERB_ROOM_HF_LEVEL_PARAM_LEN*sizeof(uint32_t))
176 #define REVERB_DECAY_TIME_PARAM_SZ	\
177 			(REVERB_DECAY_TIME_PARAM_LEN*sizeof(uint32_t))
178 #define REVERB_DECAY_HF_RATIO_PARAM_SZ	\
179 			(REVERB_DECAY_HF_RATIO_PARAM_LEN*sizeof(uint32_t))
180 #define REVERB_REFLECTIONS_LEVEL_PARAM_SZ	\
181 			(REVERB_REFLECTIONS_LEVEL_PARAM_LEN*sizeof(uint32_t))
182 #define REVERB_REFLECTIONS_DELAY_PARAM_SZ	\
183 			(REVERB_REFLECTIONS_DELAY_PARAM_LEN*sizeof(uint32_t))
184 #define REVERB_LEVEL_PARAM_SZ		\
185 			(REVERB_LEVEL_PARAM_LEN*sizeof(uint32_t))
186 #define REVERB_DELAY_PARAM_SZ		\
187 			(REVERB_DELAY_PARAM_LEN*sizeof(uint32_t))
188 #define REVERB_DIFFUSION_PARAM_SZ	\
189 			(REVERB_DIFFUSION_PARAM_LEN*sizeof(uint32_t))
190 #define REVERB_DENSITY_PARAM_SZ		\
191 			(REVERB_DENSITY_PARAM_LEN*sizeof(uint32_t))
192 struct reverb_params {
193 	uint32_t device;
194 	uint32_t enable_flag;
195 	uint32_t mode;
196 	uint32_t preset;
197 	uint32_t wet_mix;
198 	int32_t  gain_adjust;
199 	int32_t  room_level;
200 	int32_t  room_hf_level;
201 	uint32_t decay_time;
202 	uint32_t decay_hf_ratio;
203 	int32_t  reflections_level;
204 	uint32_t reflections_delay;
205 	int32_t  level;
206 	uint32_t delay;
207 	uint32_t diffusion;
208 	uint32_t density;
209 };
210 
211 #define BASS_BOOST_ENABLE_PARAM_SZ	\
212 			(BASS_BOOST_ENABLE_PARAM_LEN*sizeof(uint32_t))
213 #define BASS_BOOST_MODE_PARAM_SZ	\
214 			(BASS_BOOST_MODE_PARAM_LEN*sizeof(uint32_t))
215 #define BASS_BOOST_STRENGTH_PARAM_SZ	\
216 			(BASS_BOOST_STRENGTH_PARAM_LEN*sizeof(uint32_t))
217 struct bass_boost_params {
218 	uint32_t device;
219 	uint32_t enable_flag;
220 	uint32_t mode;
221 	uint32_t strength;
222 };
223 
224 
225 #define MAX_EQ_BANDS 12
226 #define MAX_OSL_EQ_BANDS 5
227 #define EQ_ENABLE_PARAM_SZ			\
228 			(EQ_ENABLE_PARAM_LEN*sizeof(uint32_t))
229 #define EQ_CONFIG_PARAM_SZ			\
230 			(EQ_CONFIG_PARAM_LEN*sizeof(uint32_t))
231 #define EQ_CONFIG_PER_BAND_PARAM_SZ		\
232 			(EQ_CONFIG_PER_BAND_PARAM_LEN*sizeof(uint32_t))
233 #define EQ_CONFIG_PARAM_MAX_LEN			(EQ_CONFIG_PARAM_LEN+\
234 			MAX_EQ_BANDS*EQ_CONFIG_PER_BAND_PARAM_LEN)
235 #define EQ_CONFIG_PARAM_MAX_SZ			\
236 			(EQ_CONFIG_PARAM_MAX_LEN*sizeof(uint32_t))
237 #define EQ_NUM_BANDS_PARAM_SZ			\
238 			(EQ_NUM_BANDS_PARAM_LEN*sizeof(uint32_t))
239 #define EQ_BAND_LEVELS_PARAM_SZ			\
240 			(EQ_BAND_LEVELS_PARAM_LEN*sizeof(uint32_t))
241 #define EQ_BAND_LEVEL_RANGE_PARAM_SZ		\
242 			(EQ_BAND_LEVEL_RANGE_PARAM_LEN*sizeof(uint32_t))
243 #define EQ_BAND_FREQS_PARAM_SZ			\
244 			(EQ_BAND_FREQS_PARAM_LEN*sizeof(uint32_t))
245 #define EQ_SINGLE_BAND_FREQ_RANGE_PARAM_SZ	\
246 			(EQ_SINGLE_BAND_FREQ_RANGE_PARAM_LEN*sizeof(uint32_t))
247 #define EQ_SINGLE_BAND_FREQ_PARAM_SZ		\
248 			(EQ_SINGLE_BAND_FREQ_PARAM_LEN*sizeof(uint32_t))
249 #define EQ_BAND_INDEX_PARAM_SZ			\
250 			(EQ_BAND_INDEX_PARAM_LEN*sizeof(uint32_t))
251 #define EQ_PRESET_ID_PARAM_SZ			\
252 			(EQ_PRESET_ID_PARAM_LEN*sizeof(uint32_t))
253 #define EQ_NUM_PRESETS_PARAM_SZ			\
254 			(EQ_NUM_PRESETS_PARAM_LEN*sizeof(uint8_t))
255 struct eq_config_t {
256 	int32_t eq_pregain;
257 	int32_t preset_id;
258 	uint32_t num_bands;
259 };
260 struct eq_per_band_config_t {
261 	int32_t band_idx;
262 	uint32_t filter_type;
263 	uint32_t freq_millihertz;
264 	int32_t  gain_millibels;
265 	uint32_t quality_factor;
266 };
267 struct eq_per_band_freq_range_t {
268 	uint32_t band_index;
269 	uint32_t min_freq_millihertz;
270 	uint32_t max_freq_millihertz;
271 };
272 
273 struct eq_params {
274 	uint32_t device;
275 	uint32_t enable_flag;
276 	struct eq_config_t config;
277 	struct eq_per_band_config_t per_band_cfg[MAX_EQ_BANDS];
278 	struct eq_per_band_freq_range_t per_band_freq_range[MAX_EQ_BANDS];
279 	uint32_t band_index;
280 	uint32_t freq_millihertz;
281 };
282 
283 #endif /*_MSM_AUDIO_EFFECTS_H*/
284