diff options
Diffstat (limited to 'firmware/export/audiohw.h')
-rw-r--r-- | firmware/export/audiohw.h | 252 |
1 files changed, 241 insertions, 11 deletions
diff --git a/firmware/export/audiohw.h b/firmware/export/audiohw.h index 22f6e68562..12c4738f7c 100644 --- a/firmware/export/audiohw.h +++ b/firmware/export/audiohw.h | |||
@@ -26,13 +26,15 @@ | |||
26 | #include <stdbool.h> | 26 | #include <stdbool.h> |
27 | 27 | ||
28 | /* define some audiohw caps */ | 28 | /* define some audiohw caps */ |
29 | #define TREBLE_CAP (1 << 0) | 29 | #define TREBLE_CAP (1 << 0) |
30 | #define BASS_CAP (1 << 1) | 30 | #define BASS_CAP (1 << 1) |
31 | #define BALANCE_CAP (1 << 2) | 31 | #define BALANCE_CAP (1 << 2) |
32 | #define CLIPPING_CAP (1 << 3) | 32 | #define CLIPPING_CAP (1 << 3) |
33 | #define PRESCALER_CAP (1 << 4) | 33 | #define PRESCALER_CAP (1 << 4) |
34 | #define BASS_CUTOFF_CAP (1 << 5) | 34 | #define BASS_CUTOFF_CAP (1 << 5) |
35 | #define TREBLE_CUTOFF_CAP (1 << 6) | 35 | #define TREBLE_CUTOFF_CAP (1 << 6) |
36 | #define EQ_CAP (1 << 7) | ||
37 | #define DEPTH_3D_CAP (1 << 8) | ||
36 | 38 | ||
37 | #ifdef HAVE_UDA1380 | 39 | #ifdef HAVE_UDA1380 |
38 | #include "uda1380.h" | 40 | #include "uda1380.h" |
@@ -75,12 +77,17 @@ | |||
75 | #define VOLUME_MAX 0 | 77 | #define VOLUME_MAX 0 |
76 | #endif | 78 | #endif |
77 | 79 | ||
80 | #ifndef AUDIOHW_NUM_TONE_CONTROLS | ||
81 | #define AUDIOHW_NUM_TONE_CONTROLS 0 | ||
82 | #endif | ||
83 | |||
78 | /* volume/balance/treble/bass interdependency main part */ | 84 | /* volume/balance/treble/bass interdependency main part */ |
79 | #define VOLUME_RANGE (VOLUME_MAX - VOLUME_MIN) | 85 | #define VOLUME_RANGE (VOLUME_MAX - VOLUME_MIN) |
80 | 86 | ||
81 | 87 | ||
82 | /* convert caps into defines */ | 88 | /* convert caps into defines */ |
83 | #ifdef AUDIOHW_CAPS | 89 | #ifdef AUDIOHW_CAPS |
90 | /* Tone controls */ | ||
84 | #if (AUDIOHW_CAPS & TREBLE_CAP) | 91 | #if (AUDIOHW_CAPS & TREBLE_CAP) |
85 | #define AUDIOHW_HAVE_TREBLE | 92 | #define AUDIOHW_HAVE_TREBLE |
86 | #endif | 93 | #endif |
@@ -89,6 +96,14 @@ | |||
89 | #define AUDIOHW_HAVE_BASS | 96 | #define AUDIOHW_HAVE_BASS |
90 | #endif | 97 | #endif |
91 | 98 | ||
99 | #if (AUDIOHW_CAPS & BASS_CUTOFF_CAP) | ||
100 | #define AUDIOHW_HAVE_BASS_CUTOFF | ||
101 | #endif | ||
102 | |||
103 | #if (AUDIOHW_CAPS & TREBLE_CUTOFF_CAP) | ||
104 | #define AUDIOHW_HAVE_TREBLE_CUTOFF | ||
105 | #endif | ||
106 | |||
92 | #if (AUDIOHW_CAPS & BALANCE_CAP) | 107 | #if (AUDIOHW_CAPS & BALANCE_CAP) |
93 | #define AUDIOHW_HAVE_BALANCE | 108 | #define AUDIOHW_HAVE_BALANCE |
94 | #endif | 109 | #endif |
@@ -101,19 +116,127 @@ | |||
101 | #define AUDIOHW_HAVE_PRESCALER | 116 | #define AUDIOHW_HAVE_PRESCALER |
102 | #endif | 117 | #endif |
103 | 118 | ||
104 | #if (AUDIOHW_CAPS & BASS_CUTOFF_CAP) | 119 | /* Hardware EQ tone controls */ |
105 | #define AUDIOHW_HAVE_BASS_CUTOFF | 120 | #if (AUDIOHW_CAPS & EQ_CAP) |
121 | /* A hardware equalizer is present (or perhaps some tone control variation | ||
122 | * that is not Bass and/or Treble) */ | ||
123 | #define AUDIOHW_HAVE_EQ | ||
124 | |||
125 | /* Defined band indexes for supported bands */ | ||
126 | enum | ||
127 | { | ||
128 | /* Band 1 is implied; bands must be contiguous, 1 to N */ | ||
129 | AUDIOHW_EQ_BAND1 = 0, | ||
130 | #define AUDIOHW_HAVE_EQ_BAND1 | ||
131 | #if (AUDIOHW_EQ_BAND_CAPS & (EQ_CAP << 1)) | ||
132 | AUDIOHW_EQ_BAND2, | ||
133 | #define AUDIOHW_HAVE_EQ_BAND2 | ||
134 | #if (AUDIOHW_EQ_BAND_CAPS & (EQ_CAP << 2)) | ||
135 | AUDIOHW_EQ_BAND3, | ||
136 | #define AUDIOHW_HAVE_EQ_BAND3 | ||
137 | #if (AUDIOHW_EQ_BAND_CAPS & (EQ_CAP << 3)) | ||
138 | AUDIOHW_EQ_BAND4, | ||
139 | #define AUDIOHW_HAVE_EQ_BAND4 | ||
140 | #if (AUDIOHW_EQ_BAND_CAPS & (EQ_CAP << 4)) | ||
141 | AUDIOHW_EQ_BAND5, | ||
142 | #define AUDIOHW_HAVE_EQ_BAND5 | ||
143 | #endif /* 5 */ | ||
144 | #endif /* 4 */ | ||
145 | #endif /* 3 */ | ||
146 | #endif /* 2 */ | ||
147 | AUDIOHW_EQ_BAND_NUM, /* Keep last */ | ||
148 | }; | ||
149 | |||
150 | #ifdef AUDIOHW_EQ_FREQUENCY_CAPS | ||
151 | /* One or more bands supports frequency cutoff or center adjustment */ | ||
152 | #define AUDIOHW_HAVE_EQ_FREQUENCY | ||
153 | enum | ||
154 | { | ||
155 | __AUDIOHW_EQ_BAND_FREQUENCY = -1, | ||
156 | #if defined(AUDIOHW_HAVE_EQ_BAND1) && \ | ||
157 | (AUDIOHW_EQ_FREQUENCY_CAPS & (EQ_CAP << 0)) | ||
158 | AUDIOHW_EQ_BAND1_FREQUENCY, | ||
159 | #define AUDIOHW_HAVE_EQ_BAND1_FREQUENCY | ||
160 | #endif | ||
161 | #if defined(AUDIOHW_HAVE_EQ_BAND2) && \ | ||
162 | (AUDIOHW_EQ_FREQUENCY_CAPS & (EQ_CAP << 1)) | ||
163 | AUDIOHW_EQ_BAND2_FREQUENCY, | ||
164 | #define AUDIOHW_HAVE_EQ_BAND2_FREQUENCY | ||
106 | #endif | 165 | #endif |
166 | #if defined(AUDIOHW_HAVE_EQ_BAND3) && \ | ||
167 | (AUDIOHW_EQ_FREQUENCY_CAPS & (EQ_CAP << 2)) | ||
168 | AUDIOHW_EQ_BAND3_FREQUENCY, | ||
169 | #define AUDIOHW_HAVE_EQ_BAND3_FREQUENCY | ||
170 | #endif | ||
171 | #if defined(AUDIOHW_HAVE_EQ_BAND4) && \ | ||
172 | (AUDIOHW_EQ_FREQUENCY_CAPS & (EQ_CAP << 3)) | ||
173 | AUDIOHW_EQ_BAND4_FREQUENCY, | ||
174 | #define AUDIOHW_HAVE_EQ_BAND4_FREQUENCY | ||
175 | #endif | ||
176 | #if defined(AUDIOHW_HAVE_EQ_BAND5) && \ | ||
177 | (AUDIOHW_EQ_FREQUENCY_CAPS & (EQ_CAP << 4)) | ||
178 | AUDIOHW_EQ_BAND5_FREQUENCY, | ||
179 | #define AUDIOHW_HAVE_EQ_BAND5_FREQUENCY | ||
180 | #endif | ||
181 | AUDIOHW_EQ_FREQUENCY_NUM, | ||
182 | }; | ||
183 | #endif /* AUDIOHW_EQ_FREQUENCY_CAPS */ | ||
184 | |||
185 | #ifdef AUDIOHW_EQ_WIDTH_CAPS | ||
186 | /* One or more bands supports bandwidth adjustment */ | ||
187 | #define AUDIOHW_HAVE_EQ_WIDTH | ||
188 | enum | ||
189 | { | ||
190 | __AUDIOHW_EQ_BAND_WIDTH = -1, | ||
191 | #if defined(AUDIOHW_HAVE_EQ_BAND1) && \ | ||
192 | (AUDIOHW_EQ_WIDTH_CAPS & (EQ_CAP << 1)) | ||
193 | AUDIOHW_EQ_BAND2_WIDTH, | ||
194 | #define AUDIOHW_HAVE_EQ_BAND2_WIDTH | ||
195 | #endif | ||
196 | #if defined(AUDIOHW_HAVE_EQ_BAND2) && \ | ||
197 | (AUDIOHW_EQ_WIDTH_CAPS & (EQ_CAP << 2)) | ||
198 | AUDIOHW_EQ_BAND3_WIDTH, | ||
199 | #define AUDIOHW_HAVE_EQ_BAND3_WIDTH | ||
200 | #endif | ||
201 | #if defined(AUDIOHW_HAVE_EQ_BAND3) && \ | ||
202 | (AUDIOHW_EQ_WIDTH_CAPS & (EQ_CAP << 3)) | ||
203 | AUDIOHW_EQ_BAND4_WIDTH, | ||
204 | #define AUDIOHW_HAVE_EQ_BAND4_WIDTH | ||
205 | #endif | ||
206 | AUDIOHW_EQ_WIDTH_NUM, /* Keep last */ | ||
207 | }; | ||
208 | #endif /* AUDIOHW_EQ_WIDTH_CAPS */ | ||
209 | |||
210 | /* Types and number of settings types (gain, frequency, width) */ | ||
211 | enum AUDIOHW_EQ_SETTINGS | ||
212 | { | ||
213 | AUDIOHW_EQ_GAIN = 0, | ||
214 | #ifdef AUDIOHW_HAVE_EQ_FREQUENCY | ||
215 | AUDIOHW_EQ_FREQUENCY, | ||
216 | #endif | ||
217 | #ifdef AUDIOHW_HAVE_EQ_WIDTH | ||
218 | AUDIOHW_EQ_WIDTH, | ||
219 | #endif | ||
220 | AUDIOHW_EQ_SETTING_NUM | ||
221 | }; | ||
107 | 222 | ||
108 | #if (AUDIOHW_CAPS & TREBLE_CUTOFF_CAP) | 223 | #endif /* (AUDIOHW_CAPS & EQ_CAP) */ |
109 | #define AUDIOHW_HAVE_TREBLE_CUTOFF | 224 | |
225 | #if (AUDIOHW_CAPS & DEPTH_3D_CAP) | ||
226 | #define AUDIOHW_HAVE_DEPTH_3D | ||
110 | #endif | 227 | #endif |
228 | |||
111 | #endif /* AUDIOHW_CAPS */ | 229 | #endif /* AUDIOHW_CAPS */ |
112 | 230 | ||
113 | enum { | 231 | enum { |
114 | SOUND_VOLUME = 0, | 232 | SOUND_VOLUME = 0, |
233 | /* Tone control */ | ||
234 | #if defined(AUDIOHW_HAVE_BASS) | ||
115 | SOUND_BASS, | 235 | SOUND_BASS, |
236 | #endif | ||
237 | #if defined(AUDIOHW_HAVE_TREBLE) | ||
116 | SOUND_TREBLE, | 238 | SOUND_TREBLE, |
239 | #endif | ||
117 | SOUND_BALANCE, | 240 | SOUND_BALANCE, |
118 | SOUND_CHANNELS, | 241 | SOUND_CHANNELS, |
119 | SOUND_STEREO_WIDTH, | 242 | SOUND_STEREO_WIDTH, |
@@ -132,12 +255,61 @@ enum { | |||
132 | SOUND_RIGHT_GAIN, | 255 | SOUND_RIGHT_GAIN, |
133 | SOUND_MIC_GAIN, | 256 | SOUND_MIC_GAIN, |
134 | #endif | 257 | #endif |
258 | /* Bass and treble tone controls */ | ||
135 | #if defined(AUDIOHW_HAVE_BASS_CUTOFF) | 259 | #if defined(AUDIOHW_HAVE_BASS_CUTOFF) |
136 | SOUND_BASS_CUTOFF, | 260 | SOUND_BASS_CUTOFF, |
137 | #endif | 261 | #endif |
138 | #if defined(AUDIOHW_HAVE_TREBLE_CUTOFF) | 262 | #if defined(AUDIOHW_HAVE_TREBLE_CUTOFF) |
139 | SOUND_TREBLE_CUTOFF, | 263 | SOUND_TREBLE_CUTOFF, |
140 | #endif | 264 | #endif |
265 | /* 3D effect */ | ||
266 | #if defined(AUDIOHW_HAVE_DEPTH_3D) | ||
267 | SOUND_DEPTH_3D, | ||
268 | #endif | ||
269 | /* Hardware EQ tone controls */ | ||
270 | /* Band gains */ | ||
271 | #if defined(AUDIOHW_HAVE_EQ) | ||
272 | /* Band 1 implied */ | ||
273 | SOUND_EQ_BAND1_GAIN, | ||
274 | #if defined(AUDIOHW_HAVE_EQ_BAND2) | ||
275 | SOUND_EQ_BAND2_GAIN, | ||
276 | #endif | ||
277 | #if defined(AUDIOHW_HAVE_EQ_BAND3) | ||
278 | SOUND_EQ_BAND3_GAIN, | ||
279 | #endif | ||
280 | #if defined(AUDIOHW_HAVE_EQ_BAND4) | ||
281 | SOUND_EQ_BAND4_GAIN, | ||
282 | #endif | ||
283 | #if defined(AUDIOHW_HAVE_EQ_BAND5) | ||
284 | SOUND_EQ_BAND5_GAIN, | ||
285 | #endif | ||
286 | /* Band frequencies */ | ||
287 | #if defined(AUDIOHW_HAVE_EQ_BAND1_FREQUENCY) | ||
288 | SOUND_EQ_BAND1_FREQUENCY, | ||
289 | #endif | ||
290 | #if defined(AUDIOHW_HAVE_EQ_BAND2_FREQUENCY) | ||
291 | SOUND_EQ_BAND2_FREQUENCY, | ||
292 | #endif | ||
293 | #if defined(AUDIOHW_HAVE_EQ_BAND3_FREQUENCY) | ||
294 | SOUND_EQ_BAND3_FREQUENCY, | ||
295 | #endif | ||
296 | #if defined(AUDIOHW_HAVE_EQ_BAND4_FREQUENCY) | ||
297 | SOUND_EQ_BAND4_FREQUENCY, | ||
298 | #endif | ||
299 | #if defined(AUDIOHW_HAVE_EQ_BAND5_FREQUENCY) | ||
300 | SOUND_EQ_BAND5_FREQUENCY, | ||
301 | #endif | ||
302 | /* Band widths */ | ||
303 | #if defined(AUDIOHW_HAVE_EQ_BAND2_WIDTH) | ||
304 | SOUND_EQ_BAND2_WIDTH, | ||
305 | #endif | ||
306 | #if defined(AUDIOHW_HAVE_EQ_BAND3_WIDTH) | ||
307 | SOUND_EQ_BAND3_WIDTH, | ||
308 | #endif | ||
309 | #if defined(AUDIOHW_HAVE_EQ_BAND4_WIDTH) | ||
310 | SOUND_EQ_BAND4_WIDTH, | ||
311 | #endif | ||
312 | #endif /* AUDIOHW_HAVE_EQ */ | ||
141 | SOUND_LAST_SETTING, /* Keep this last */ | 313 | SOUND_LAST_SETTING, /* Keep this last */ |
142 | }; | 314 | }; |
143 | 315 | ||
@@ -262,6 +434,64 @@ void audiohw_set_bass_cutoff(int val); | |||
262 | void audiohw_set_treble_cutoff(int val); | 434 | void audiohw_set_treble_cutoff(int val); |
263 | #endif | 435 | #endif |
264 | 436 | ||
437 | #ifdef AUDIOHW_HAVE_EQ | ||
438 | /** | ||
439 | * Set new band gain value. | ||
440 | * @param band index to which val is set | ||
441 | * @param val to set. | ||
442 | * NOTE: AUDIOHW_CAPS need to contain | ||
443 | * EQ_CAP | ||
444 | * | ||
445 | * AUDIOHW_EQ_BAND_CAPS must be defined as a bitmask | ||
446 | * of EQ_CAP each shifted by the zero-based band number | ||
447 | * for each band. Bands 1 to N are indexed 0 to N-1. | ||
448 | */ | ||
449 | void audiohw_set_eq_band_gain(unsigned int band, int val); | ||
450 | #endif | ||
451 | |||
452 | #ifdef AUDIOHW_HAVE_EQ_FREQUENCY | ||
453 | /** | ||
454 | * Set new band cutoff or center frequency value. | ||
455 | * @param band index to which val is set | ||
456 | * @param val to set. | ||
457 | * NOTE: AUDIOHW_CAPS need to contain | ||
458 | * EQ_CAP | ||
459 | * | ||
460 | * AUDIOHW_EQ_FREQUENCY_CAPS must be defined as a bitmask | ||
461 | * of EQ_CAP each shifted by the zero-based band number | ||
462 | * for each band that supports frequency adjustment. | ||
463 | * Bands 1 to N are indexed 0 to N-1. | ||
464 | */ | ||
465 | void audiohw_set_eq_band_frequency(unsigned int band, int val); | ||
466 | #endif | ||
467 | |||
468 | #ifdef AUDIOHW_HAVE_EQ_WIDTH | ||
469 | /** | ||
470 | * Set new band cutoff or center frequency value. | ||
471 | * @param band index to which val is set | ||
472 | * @param val to set. | ||
473 | * NOTE: AUDIOHW_CAPS need to contain | ||
474 | * EQ_CAP | ||
475 | * | ||
476 | * AUDIOHW_EQ_WIDTH_CAPS must be defined as a bitmask | ||
477 | * of EQ_CAP each shifted by the zero-based band number | ||
478 | * for each band that supports width adjustment. | ||
479 | * Bands 1 to N are indexed 0 to N-1. | ||
480 | */ | ||
481 | void audiohw_set_eq_band_width(unsigned int band, int val); | ||
482 | #endif | ||
483 | |||
484 | #ifdef AUDIOHW_HAVE_DEPTH_3D | ||
485 | /** | ||
486 | * Set new 3-d enhancement (stereo expansion) effect value. | ||
487 | * @param val to set. | ||
488 | * NOTE: AUDIOHW_CAPS need to contain | ||
489 | * DEPTH_3D_CAP | ||
490 | */ | ||
491 | void audiohw_set_depth_3d(int val); | ||
492 | #endif | ||
493 | |||
494 | |||
265 | void audiohw_set_frequency(int fsel); | 495 | void audiohw_set_frequency(int fsel); |
266 | 496 | ||
267 | #ifdef HAVE_RECORDING | 497 | #ifdef HAVE_RECORDING |