From 485aecd923b4a984c8697fa6c6b773db338b5ab3 Mon Sep 17 00:00:00 2001 From: Michael Sevakis Date: Fri, 21 Jan 2011 08:31:40 +0000 Subject: WM8978: sound.c weirdness strikes again. Prescaler values have to be in centibels. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@29100 a1c6a512-1295-4272-9138-f99709370657 --- firmware/drivers/audio/wm8978.c | 12 ++++++++++-- firmware/sound.c | 6 +++++- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/firmware/drivers/audio/wm8978.c b/firmware/drivers/audio/wm8978.c index 2a19e22df3..f83a832854 100644 --- a/firmware/drivers/audio/wm8978.c +++ b/firmware/drivers/audio/wm8978.c @@ -217,6 +217,14 @@ int sound_val2phys(int setting, int value) break; #endif + case SOUND_EQ_BAND1_GAIN+0x10000: + case SOUND_EQ_BAND2_GAIN+0x10000: + case SOUND_EQ_BAND3_GAIN+0x10000: + case SOUND_EQ_BAND4_GAIN+0x10000: + case SOUND_EQ_BAND5_GAIN+0x10000: + result = value * 10; + break; + case SOUND_DEPTH_3D: result = (100 * value + 8) / 15; break; @@ -330,7 +338,7 @@ static void sync_prescaler(void) /* Combine all prescaling into a single DAC attenuation */ if (wmc_vol.eq_on) - prescaler = wmc_vol.prescaler * 2; + prescaler = wmc_vol.prescaler; if (wmc_vol.enh_3d_on) prescaler += wmc_vol.enh_3d_prescaler; @@ -460,7 +468,7 @@ void audiohw_set_eq_band_width(unsigned int band, int val) * gain to EQ bands. */ void audiohw_set_prescaler(int val) { - wmc_vol.prescaler = val; + wmc_vol.prescaler = val / 5; /* centibels->semi-decibels */ sync_prescaler(); } diff --git a/firmware/sound.c b/firmware/sound.c index de96360198..4dea2b8a84 100644 --- a/firmware/sound.c +++ b/firmware/sound.c @@ -477,10 +477,14 @@ int sound_enum_hw_eq_band_setting(unsigned int band, static void sound_set_hw_eq_band_gain(unsigned int band, int value) { + int setting; + if(!audio_is_initialized) return; - current_eq_band_gain[band] = value; + setting = sound_enum_hw_eq_band_setting(band, AUDIOHW_EQ_GAIN); + current_eq_band_gain[band] = sound_val2phys(setting + 0x10000, value); + audiohw_set_eq_band_gain(band, value); set_prescaled_volume(); } -- cgit v1.2.3