diff options
Diffstat (limited to 'firmware/export/audiohw.h')
-rw-r--r-- | firmware/export/audiohw.h | 149 |
1 files changed, 111 insertions, 38 deletions
diff --git a/firmware/export/audiohw.h b/firmware/export/audiohw.h index 304c5aa460..e18e996282 100644 --- a/firmware/export/audiohw.h +++ b/firmware/export/audiohw.h | |||
@@ -35,6 +35,35 @@ | |||
35 | #define TREBLE_CUTOFF_CAP (1 << 6) | 35 | #define TREBLE_CUTOFF_CAP (1 << 6) |
36 | #define EQ_CAP (1 << 7) | 36 | #define EQ_CAP (1 << 7) |
37 | #define DEPTH_3D_CAP (1 << 8) | 37 | #define DEPTH_3D_CAP (1 << 8) |
38 | #define LINEOUT_CAP (1 << 9) | ||
39 | #define MONO_VOL_CAP (1 << 10) | ||
40 | #define LIN_GAIN_CAP (1 << 11) | ||
41 | #define MIC_GAIN_CAP (1 << 12) | ||
42 | |||
43 | /* Used by every driver to export its min/max/default values for its audio | ||
44 | settings. */ | ||
45 | #ifdef AUDIOHW_IS_SOUND_C | ||
46 | /* This is the master file with the settings table... */ | ||
47 | struct sound_settings_info | ||
48 | { | ||
49 | const char *unit; | ||
50 | char numdecimals; | ||
51 | char steps; | ||
52 | short minval; | ||
53 | short maxval; | ||
54 | short defaultval; | ||
55 | }; | ||
56 | |||
57 | #define AUDIOHW_SETTING(name, us, nd, st, minv, maxv, defv, expr...) \ | ||
58 | static const struct sound_settings_info _audiohw_setting_##name = \ | ||
59 | { .unit = us, .numdecimals = nd, .steps = st, \ | ||
60 | .minval = minv, .maxval = maxv, .defaultval = defv }; \ | ||
61 | static inline int _sound_val2phys_##name(int val) \ | ||
62 | { return #expr[0] ? expr : val; } | ||
63 | #else | ||
64 | /* ...otherwise these produce nothing. */ | ||
65 | #define AUDIOHW_SETTING(name, us, nd, st, minv, maxv, defv, expr...) | ||
66 | #endif | ||
38 | 67 | ||
39 | #ifdef HAVE_UDA1380 | 68 | #ifdef HAVE_UDA1380 |
40 | #include "uda1380.h" | 69 | #include "uda1380.h" |
@@ -78,17 +107,25 @@ | |||
78 | #include "imx233-codec.h" | 107 | #include "imx233-codec.h" |
79 | #elif defined(HAVE_DUMMY_CODEC) | 108 | #elif defined(HAVE_DUMMY_CODEC) |
80 | #include "dummy_codec.h" | 109 | #include "dummy_codec.h" |
81 | #endif | 110 | #elif (CONFIG_PLATFORM & (PLATFORM_ANDROID | PLATFORM_MAEMO\ |
82 | #if (CONFIG_PLATFORM & (PLATFORM_ANDROID|PLATFORM_MAEMO|PLATFORM_PANDORA|PLATFORM_SDL)) | 111 | | PLATFORM_PANDORA | PLATFORM_SDL)) |
83 | /* #include <SDL_audio.h> gives errors in other code areas, | 112 | #include "hosted_codec.h" |
84 | * we don't really need it here, so don't. but it should maybe be fixed */ | ||
85 | #ifndef SIMULATOR /* simulator gets values from the target .h files */ | ||
86 | #define VOLUME_MIN -990 | ||
87 | #define VOLUME_MAX 0 | ||
88 | #endif | ||
89 | #endif | 113 | #endif |
90 | 114 | ||
115 | #if defined(SIMULATOR) && !defined(HAVE_SW_VOLUME_CONTROL) | ||
116 | /* For now, without software volume control, sim only supports mono control */ | ||
117 | #define AUDIOHW_HAVE_MONO_VOLUME | ||
118 | #endif | ||
91 | 119 | ||
120 | /* Some values are the same for every codec and can be defined here one | ||
121 | time. */ | ||
122 | #ifdef HAVE_SW_TONE_CONTROLS | ||
123 | AUDIOHW_SETTING(BASS, "dB", 0, 1, -24, 24, 0) | ||
124 | AUDIOHW_SETTING(TREBLE, "dB", 0, 1, -24, 24, 0) | ||
125 | #endif /* HAVE_SW_TONE_CONTROLS */ | ||
126 | AUDIOHW_SETTING(BALANCE, "%", 0, 1, -100, 100, 0) | ||
127 | AUDIOHW_SETTING(CHANNELS, "", 0, 1, 0, 5, 0) | ||
128 | AUDIOHW_SETTING(STEREO_WIDTH, "%", 0, 5, 0, 250, 100) | ||
92 | 129 | ||
93 | #define ONE_DB 10 | 130 | #define ONE_DB 10 |
94 | 131 | ||
@@ -246,7 +283,26 @@ enum AUDIOHW_EQ_SETTINGS | |||
246 | #if (AUDIOHW_CAPS & DEPTH_3D_CAP) | 283 | #if (AUDIOHW_CAPS & DEPTH_3D_CAP) |
247 | #define AUDIOHW_HAVE_DEPTH_3D | 284 | #define AUDIOHW_HAVE_DEPTH_3D |
248 | #endif | 285 | #endif |
249 | #else | 286 | |
287 | #if (AUDIOHW_CAPS & LINEOUT_CAP) | ||
288 | #define AUDIOHW_HAVE_LINEOUT | ||
289 | #endif | ||
290 | |||
291 | #if (AUDIOHW_CAPS & MONO_VOL_CAP) | ||
292 | #define AUDIOHW_HAVE_MONO_VOLUME | ||
293 | #endif | ||
294 | |||
295 | #ifdef HAVE_RECORDING | ||
296 | #if (AUDIOHW_CAPS & LIN_GAIN_CAP) | ||
297 | #define AUDIOHW_HAVE_LIN_GAIN | ||
298 | #endif | ||
299 | |||
300 | #if (AUDIOHW_CAPS & MIC_GAIN_CAP) | ||
301 | #define AUDIOHW_HAVE_MIC_GAIN | ||
302 | #endif | ||
303 | #endif /* HAVE_RECORDING */ | ||
304 | |||
305 | #else /* ndef AUDIOHW_CAPS */ | ||
250 | #if defined (HAVE_SW_TONE_CONTROLS) | 306 | #if defined (HAVE_SW_TONE_CONTROLS) |
251 | /* Needed for proper sound support */ | 307 | /* Needed for proper sound support */ |
252 | #define AUDIOHW_HAVE_BASS | 308 | #define AUDIOHW_HAVE_BASS |
@@ -255,6 +311,7 @@ enum AUDIOHW_EQ_SETTINGS | |||
255 | #endif /* AUDIOHW_CAPS */ | 311 | #endif /* AUDIOHW_CAPS */ |
256 | 312 | ||
257 | enum { | 313 | enum { |
314 | /* TODO: Volume shouldn't be needed if device doesn't have digital control */ | ||
258 | SOUND_VOLUME = 0, | 315 | SOUND_VOLUME = 0, |
259 | /* Tone control */ | 316 | /* Tone control */ |
260 | #if defined(AUDIOHW_HAVE_BASS) | 317 | #if defined(AUDIOHW_HAVE_BASS) |
@@ -276,9 +333,11 @@ enum { | |||
276 | SOUND_MDB_ENABLE, | 333 | SOUND_MDB_ENABLE, |
277 | SOUND_SUPERBASS, | 334 | SOUND_SUPERBASS, |
278 | #endif | 335 | #endif |
279 | #if defined(HAVE_RECORDING) | 336 | #if defined(AUDIOHW_HAVE_LIN_GAIN) |
280 | SOUND_LEFT_GAIN, | 337 | SOUND_LEFT_GAIN, |
281 | SOUND_RIGHT_GAIN, | 338 | SOUND_RIGHT_GAIN, |
339 | #endif | ||
340 | #if defined(AUDIOHW_HAVE_MIC_GAIN) | ||
282 | SOUND_MIC_GAIN, | 341 | SOUND_MIC_GAIN, |
283 | #endif | 342 | #endif |
284 | /* Bass and treble tone controls */ | 343 | /* Bass and treble tone controls */ |
@@ -339,7 +398,8 @@ enum { | |||
339 | SOUND_LAST_SETTING, /* Keep this last */ | 398 | SOUND_LAST_SETTING, /* Keep this last */ |
340 | }; | 399 | }; |
341 | 400 | ||
342 | enum Channel { | 401 | enum Channel |
402 | { | ||
343 | SOUND_CHAN_STEREO, | 403 | SOUND_CHAN_STEREO, |
344 | SOUND_CHAN_MONO, | 404 | SOUND_CHAN_MONO, |
345 | SOUND_CHAN_CUSTOM, | 405 | SOUND_CHAN_CUSTOM, |
@@ -349,19 +409,6 @@ enum Channel { | |||
349 | SOUND_CHAN_NUM_MODES, | 409 | SOUND_CHAN_NUM_MODES, |
350 | }; | 410 | }; |
351 | 411 | ||
352 | struct sound_settings_info { | ||
353 | const char *unit; | ||
354 | char numdecimals; | ||
355 | char steps; | ||
356 | short minval; | ||
357 | short maxval; | ||
358 | short defaultval; | ||
359 | }; | ||
360 | |||
361 | /* This struct is used by every driver to export its min/max/default values for | ||
362 | * its audio settings. Keep in mind that the order must be correct! */ | ||
363 | extern const struct sound_settings_info audiohw_settings[]; | ||
364 | |||
365 | /* All usable functions implemented by a audio codec drivers. Most of | 412 | /* All usable functions implemented by a audio codec drivers. Most of |
366 | * the function in sound settings are only called, when in audio codecs | 413 | * the function in sound settings are only called, when in audio codecs |
367 | * .h file suitable defines are added. | 414 | * .h file suitable defines are added. |
@@ -390,17 +437,35 @@ void audiohw_postinit(void); | |||
390 | */ | 437 | */ |
391 | void audiohw_close(void); | 438 | void audiohw_close(void); |
392 | 439 | ||
393 | #if defined(AUDIOHW_HAVE_CLIPPING) || defined(HAVE_SDL_AUDIO) || defined(ANDROID) | 440 | #ifdef AUDIOHW_HAVE_MONO_VOLUME |
394 | /** | 441 | /** |
395 | * Set new volume value | 442 | * Set new volume value |
396 | * @param val to set. | 443 | * @param val to set. |
397 | * NOTE: AUDIOHW_CAPS need to contain | 444 | * NOTE: AUDIOHW_CAPS need to contain |
398 | * CLIPPING_CAP | 445 | * CLIPPING_CAP |
399 | */ | 446 | */ |
400 | void audiohw_set_volume(int val); | 447 | void audiohw_set_volume(int val); |
448 | #else /* Stereo volume */ | ||
449 | /** | ||
450 | * Set new voluem value for each channel | ||
451 | * @param vol_l sets left channel volume | ||
452 | * @param vol_r sets right channel volume | ||
453 | */ | ||
454 | void audiohw_set_volume(int vol_l, int vol_r); | ||
455 | #endif /* AUDIOHW_HAVE_MONO_VOLUME */ | ||
456 | |||
457 | #ifdef AUDIOHW_HAVE_LINEOUT | ||
458 | /** | ||
459 | * Set new voluem value for each channel | ||
460 | * @param vol_l sets left channel volume | ||
461 | * @param vol_r sets right channel volume | ||
462 | */ | ||
463 | void audiohw_set_lineout_volume(int vol_l, int vol_r); | ||
401 | #endif | 464 | #endif |
402 | 465 | ||
403 | #ifdef AUDIOHW_HAVE_PRESCALER | 466 | #ifndef AUDIOHW_HAVE_CLIPPING |
467 | #if defined(AUDIOHW_HAVE_BASS) || defined(AUDIOHW_HAVE_TREBLE) \ | ||
468 | || defined(AUDIOHW_HAVE_EQ) | ||
404 | /** | 469 | /** |
405 | * Set new prescaler value. | 470 | * Set new prescaler value. |
406 | * @param val to set. | 471 | * @param val to set. |
@@ -409,6 +474,7 @@ void audiohw_set_volume(int val); | |||
409 | */ | 474 | */ |
410 | void audiohw_set_prescaler(int val); | 475 | void audiohw_set_prescaler(int val); |
411 | #endif | 476 | #endif |
477 | #endif /* !AUDIOHW_HAVE_CLIPPING */ | ||
412 | 478 | ||
413 | #ifdef AUDIOHW_HAVE_BALANCE | 479 | #ifdef AUDIOHW_HAVE_BALANCE |
414 | /** | 480 | /** |
@@ -552,31 +618,38 @@ void audiohw_set_recvol(int left, int right, int type); | |||
552 | void audiohw_set_monitor(bool enable); | 618 | void audiohw_set_monitor(bool enable); |
553 | #endif | 619 | #endif |
554 | 620 | ||
555 | |||
556 | |||
557 | #if CONFIG_CODEC != SWCODEC | ||
558 | |||
559 | /* functions which are only used by mas35xx codecs, but are also | ||
560 | aviable on SWCODECS through dsp */ | ||
561 | |||
562 | /** | 621 | /** |
563 | * Set channel configuration. | 622 | * Set channel configuration. |
564 | * @param val new channel value (see enum Channel). | 623 | * @param val new channel value (see enum Channel). |
565 | */ | 624 | */ |
566 | void audiohw_set_channel(int val); | 625 | void audiohw_set_channel(int val); |
567 | 626 | ||
627 | #ifdef HAVE_PITCHCONTROL | ||
628 | /** | ||
629 | * Set the pitch ratio | ||
630 | * @param ratio to set in .01% units | ||
631 | */ | ||
632 | void audiohw_set_pitch(int32_t val); | ||
633 | |||
634 | /** | ||
635 | * Return the set pitch ratio | ||
636 | */ | ||
637 | int32_t audiohw_get_pitch(void); | ||
638 | #endif /* HAVE_PITCHCONTROL */ | ||
639 | |||
568 | /** | 640 | /** |
569 | * Set stereo width. | 641 | * Set stereo width. |
570 | * @param val new stereo width value. | 642 | * @param val new stereo width value. |
571 | */ | 643 | */ |
572 | void audiohw_set_stereo_width(int val); | 644 | void audiohw_set_stereo_width(int val); |
573 | 645 | ||
574 | #endif /* CONFIG_CODEC != SWCODEC */ | ||
575 | |||
576 | #ifdef HAVE_SPEAKER | 646 | #ifdef HAVE_SPEAKER |
577 | |||
578 | void audiohw_enable_speaker(bool on); | 647 | void audiohw_enable_speaker(bool on); |
579 | |||
580 | #endif /* HAVE_SPEAKER */ | 648 | #endif /* HAVE_SPEAKER */ |
581 | 649 | ||
650 | #if CONFIG_CODEC == SWCODEC | ||
651 | typedef int (*audiohw_swcodec_cb_type)(int msg, intptr_t param); | ||
652 | void audiohw_swcodec_set_callback(audiohw_swcodec_cb_type func); | ||
653 | #endif /* CONFIG_CODEC == SWCODEC */ | ||
654 | |||
582 | #endif /* _AUDIOHW_H_ */ | 655 | #endif /* _AUDIOHW_H_ */ |