From 05e8488ad8f3ff849ab63f2273e44132c64fbfcd Mon Sep 17 00:00:00 2001 From: Christian Gmeiner Date: Wed, 14 May 2008 21:35:19 +0000 Subject: Introduce PRESCALER_CAP and move some driver specific code to the correct place. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@17516 a1c6a512-1295-4272-9138-f99709370657 --- firmware/drivers/audio/mas35xx.c | 7 +++++++ firmware/drivers/audio/uda1380.c | 5 +++++ firmware/export/audiohw.h | 15 +++++++++++++++ firmware/export/mas35xx.h | 2 +- firmware/export/uda1380.h | 2 +- firmware/sound.c | 8 +++----- 6 files changed, 32 insertions(+), 7 deletions(-) diff --git a/firmware/drivers/audio/mas35xx.c b/firmware/drivers/audio/mas35xx.c index 403ce07068..1a0d2afe45 100644 --- a/firmware/drivers/audio/mas35xx.c +++ b/firmware/drivers/audio/mas35xx.c @@ -161,6 +161,13 @@ void audiohw_set_bass(int val) #endif } +#if CONFIG_CODEC == MAS3507D +void audiohw_set_prescaler(int val) +{ + mas_writereg(MAS_REG_KPRESCALE, prescale_table[val/10]); +} +#endif + void audiohw_set_treble(int val) { #if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) diff --git a/firmware/drivers/audio/uda1380.c b/firmware/drivers/audio/uda1380.c index f6a7c730cb..388e59b1d2 100644 --- a/firmware/drivers/audio/uda1380.c +++ b/firmware/drivers/audio/uda1380.c @@ -282,6 +282,11 @@ void audiohw_postinit(void) audiohw_mute(false); } +void audiohw_set_prescaler(int val) +{ + audiohw_set_mixer_vol(tenthdb2mixer(-val), tenthdb2mixer(-val)); +} + /* Nice shutdown of UDA1380 codec */ void audiohw_close(void) { diff --git a/firmware/export/audiohw.h b/firmware/export/audiohw.h index d11a3b5181..4c9271e03e 100644 --- a/firmware/export/audiohw.h +++ b/firmware/export/audiohw.h @@ -28,6 +28,7 @@ #define BASS_CAP (1 << 1) #define BALANCE_CAP (1 << 2) #define CLIPPING_CAP (1 << 3) +#define PRESCALER_CAP (1 << 4) #ifdef HAVE_UDA1380 #include "uda1380.h" @@ -72,6 +73,10 @@ #if (AUDIOHW_CAPS & CLIPPING_CAP) #define AUDIOHW_HAVE_CLIPPING #endif + +#if (AUDIOHW_CAPS & PRESCALER_CAP) +#define AUDIOHW_HAVE_PRESCALER +#endif #endif /* AUDIOHW_CAPS */ enum { @@ -164,6 +169,16 @@ void audiohw_close(void); void audiohw_set_volume(int val); #endif +#ifdef AUDIOHW_HAVE_PRESCALER +/** + * Set new prescaler value. + * @param val to set. + * NOTE: AUDIOHW_CAPS need to contain + * PRESCALER_CAP + */ +void audiohw_set_prescaler(int val); +#endif + #ifdef AUDIOHW_HAVE_BALANCE /** * Set new balance value diff --git a/firmware/export/mas35xx.h b/firmware/export/mas35xx.h index d28db0fb33..a0da03d0a4 100644 --- a/firmware/export/mas35xx.h +++ b/firmware/export/mas35xx.h @@ -28,7 +28,7 @@ #define VOLUME_MIN -780 #define VOLUME_MAX 180 -#define AUDIOHW_CAPS (BASS_CAP | TREBLE_CAP) +#define AUDIOHW_CAPS (BASS_CAP | TREBLE_CAP | PRESCALER_CAP) #else /* CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F */ diff --git a/firmware/export/uda1380.h b/firmware/export/uda1380.h index c23f95265b..e0125d8d63 100644 --- a/firmware/export/uda1380.h +++ b/firmware/export/uda1380.h @@ -24,7 +24,7 @@ #define VOLUME_MIN -840 #define VOLUME_MAX 0 -#define AUDIOHW_CAPS (BASS_CAP | TREBLE_CAP) +#define AUDIOHW_CAPS (BASS_CAP | TREBLE_CAP | PRESCALER_CAP) extern int tenthdb2master(int db); extern int tenthdb2mixer(int db); diff --git a/firmware/sound.c b/firmware/sound.c index 8282decbbe..5c6a821d48 100644 --- a/firmware/sound.c +++ b/firmware/sound.c @@ -264,12 +264,10 @@ static void set_prescaled_volume(void) prescale = VOLUME_MAX - current_volume; #endif -#if defined(HAVE_SW_TONE_CONTROLS) +#if defined(AUDIOHW_HAVE_PRESCALER) + audiohw_set_prescaler(prescale); +#else dsp_callback(DSP_CALLBACK_SET_PRESCALE, prescale); -#elif CONFIG_CODEC == MAS3507D - mas_writereg(MAS_REG_KPRESCALE, prescale_table[prescale/10]); -#elif defined(HAVE_UDA1380) - audiohw_set_mixer_vol(tenthdb2mixer(-prescale), tenthdb2mixer(-prescale)); #endif if (current_volume == VOLUME_MIN) -- cgit v1.2.3