summaryrefslogtreecommitdiff
path: root/firmware/export
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/export')
-rw-r--r--firmware/export/audiohw.h252
-rw-r--r--firmware/export/config/gigabeats.h3
-rw-r--r--firmware/export/sound.h62
-rw-r--r--firmware/export/wm8978.h13
4 files changed, 315 insertions, 15 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 */
126enum
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
153enum
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
188enum
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) */
211enum 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
113enum { 231enum {
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);
262void audiohw_set_treble_cutoff(int val); 434void 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 */
449void 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 */
465void 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 */
481void 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 */
491void audiohw_set_depth_3d(int val);
492#endif
493
494
265void audiohw_set_frequency(int fsel); 495void audiohw_set_frequency(int fsel);
266 496
267#ifdef HAVE_RECORDING 497#ifdef HAVE_RECORDING
diff --git a/firmware/export/config/gigabeats.h b/firmware/export/config/gigabeats.h
index 2bc56ec98c..73eb79ce90 100644
--- a/firmware/export/config/gigabeats.h
+++ b/firmware/export/config/gigabeats.h
@@ -90,9 +90,6 @@
90/* Define this if you have the WM8978 audio codec */ 90/* Define this if you have the WM8978 audio codec */
91#define HAVE_WM8978 91#define HAVE_WM8978
92 92
93/* Tone controls for WM8978 have not been implemented yet */
94#define HAVE_SW_TONE_CONTROLS
95
96/* Define bitmask of input sources - recordable bitmask can be defined 93/* Define bitmask of input sources - recordable bitmask can be defined
97 explicitly if different */ 94 explicitly if different */
98#define INPUT_SRC_CAPS SRC_CAP_FMRADIO 95#define INPUT_SRC_CAPS SRC_CAP_FMRADIO
diff --git a/firmware/export/sound.h b/firmware/export/sound.h
index e68ae23774..7243f48e79 100644
--- a/firmware/export/sound.h
+++ b/firmware/export/sound.h
@@ -55,10 +55,70 @@ void sound_set_bass(int value);
55void sound_set_treble(int value); 55void sound_set_treble(int value);
56void sound_set_channels(int value); 56void sound_set_channels(int value);
57void sound_set_stereo_width(int value); 57void sound_set_stereo_width(int value);
58#if defined(HAVE_WM8758) || defined(HAVE_WM8985) 58#if defined(AUDIOHW_HAVE_BASS_CUTOFF)
59void sound_set_bass_cutoff(int value); 59void sound_set_bass_cutoff(int value);
60#endif
61#if defined(AUDIOHW_HAVE_TREBLE_CUTOFF)
60void sound_set_treble_cutoff(int value); 62void sound_set_treble_cutoff(int value);
61#endif 63#endif
64
65#if defined(AUDIOHW_HAVE_DEPTH_3D)
66void sound_set_depth_3d(int value);
67#endif
68
69#ifdef AUDIOHW_HAVE_EQ
70/*
71 * band = SOUND_EQ_BANDb
72 * band_setting = AUDIOHW_EQ_s
73 *
74 * Returns SOUND_EQ_BANDb_s or -1 if it doesn't exist.
75 *
76 * b: band number
77 * s: one of GAIN, FREQUENCY, WIDTH
78 */
79int sound_enum_hw_eq_band_setting(unsigned int band,
80 unsigned int band_setting);
81/* Band1 implied */
82void sound_set_hw_eq_band1_gain(int value);
83#ifdef AUDIOHW_HAVE_EQ_BAND1_FREQUENCY
84void sound_set_hw_eq_band1_frequency(int value);
85#endif
86#ifdef AUDIOHW_HAVE_EQ_BAND2
87void sound_set_hw_eq_band2_gain(int value);
88#ifdef AUDIOHW_HAVE_EQ_BAND2_FREQUENCY
89void sound_set_hw_eq_band2_frequency(int value);
90#endif
91#ifdef AUDIOHW_HAVE_EQ_BAND2_WIDTH
92void sound_set_hw_eq_band2_width(int value);
93#endif
94#endif /* AUDIOHW_HAVE_EQ_BAND2 */
95#ifdef AUDIOHW_HAVE_EQ_BAND3
96/* Band 3 */
97void sound_set_hw_eq_band3_gain(int value);
98#ifdef AUDIOHW_HAVE_EQ_BAND3_FREQUENCY
99void sound_set_hw_eq_band3_frequency(int value);
100#endif
101#if defined(AUDIOHW_HAVE_EQ_BAND3_WIDTH)
102void sound_set_hw_eq_band3_width(int value);
103#endif
104#endif /* AUDIOHW_HAVE_EQ_BAND3 */
105#ifdef AUDIOHW_HAVE_EQ_BAND4
106void sound_set_hw_eq_band4_gain(int value);
107#ifdef AUDIOHW_HAVE_EQ_BAND4_FREQUENCY
108void sound_set_hw_eq_band4_frequency(int value);
109#endif
110#ifdef AUDIOHW_HAVE_EQ_BAND4_WIDTH
111void sound_set_hw_eq_band4_width(int value);
112#endif
113#endif /* AUDIOHW_HAVE_EQ_BAND4 */
114#ifdef AUDIOHW_HAVE_EQ_BAND5
115void sound_set_hw_eq_band5_gain(int value);
116#ifdef AUDIOHW_HAVE_EQ_BAND5_FREQUENCY
117void sound_set_hw_eq_band5_frequency(int value);
118#endif
119#endif /* AUDIOHW_HAVE_EQ_BAND5 */
120#endif /* AUDIOHW_HAVE_EQ */
121
62#if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) 122#if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F)
63void sound_set_loudness(int value); 123void sound_set_loudness(int value);
64void sound_set_avc(int value); 124void sound_set_avc(int value);
diff --git a/firmware/export/wm8978.h b/firmware/export/wm8978.h
index 270c666a4a..4081d05a89 100644
--- a/firmware/export/wm8978.h
+++ b/firmware/export/wm8978.h
@@ -26,6 +26,19 @@
26#define VOLUME_MIN -900 26#define VOLUME_MIN -900
27#define VOLUME_MAX 60 27#define VOLUME_MAX 60
28 28
29#define AUDIOHW_CAPS (EQ_CAP | PRESCALER_CAP | DEPTH_3D_CAP)
30/* Filter bitmask */
31#define AUDIOHW_EQ_BAND_CAPS ((EQ_CAP << 0) | (EQ_CAP << 1) | \
32 (EQ_CAP << 2) | (EQ_CAP << 3) | \
33 (EQ_CAP << 4))
34/* Filters that can adjust cutoff and center frequency */
35#define AUDIOHW_EQ_FREQUENCY_CAPS ((EQ_CAP << 0) | (EQ_CAP << 1) | \
36 (EQ_CAP << 2) | (EQ_CAP << 3) | \
37 (EQ_CAP << 4))
38/* Filters that can adjust band width */
39#define AUDIOHW_EQ_WIDTH_CAPS ((EQ_CAP << 1) | (EQ_CAP << 2) | \
40 (EQ_CAP << 3))
41
29int tenthdb2master(int db); 42int tenthdb2master(int db);
30void audiohw_set_headphone_vol(int vol_l, int vol_r); 43void audiohw_set_headphone_vol(int vol_l, int vol_r);
31void audiohw_set_recsrc(int source, bool recording); 44void audiohw_set_recsrc(int source, bool recording);