summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Sevakis <jethead71@rockbox.org>2011-01-21 08:31:40 +0000
committerMichael Sevakis <jethead71@rockbox.org>2011-01-21 08:31:40 +0000
commit485aecd923b4a984c8697fa6c6b773db338b5ab3 (patch)
tree4f2d534943368b83e8560e48bdce3d69162fb43e
parent863c03f2ae08e8fa431f3d40a167605fae726a15 (diff)
downloadrockbox-485aecd923b4a984c8697fa6c6b773db338b5ab3.tar.gz
rockbox-485aecd923b4a984c8697fa6c6b773db338b5ab3.zip
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
-rw-r--r--firmware/drivers/audio/wm8978.c12
-rw-r--r--firmware/sound.c6
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();
}