diff options
author | Michael Sevakis <jethead71@rockbox.org> | 2008-05-03 16:10:46 +0000 |
---|---|---|
committer | Michael Sevakis <jethead71@rockbox.org> | 2008-05-03 16:10:46 +0000 |
commit | 8f0a1b3e6cd466b8016e79ee49fc342986a787ad (patch) | |
tree | 8b99f65380c447c93407ada021041ba8799c6ab5 /firmware/drivers/audio/wm8978.c | |
parent | 28df6bf869353d9a288f7a11cb7341177cc6b386 (diff) | |
download | rockbox-8f0a1b3e6cd466b8016e79ee49fc342986a787ad.tar.gz rockbox-8f0a1b3e6cd466b8016e79ee49fc342986a787ad.zip |
It's better not to use fixed constants since the lower volume limit may not be constant.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@17329 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware/drivers/audio/wm8978.c')
-rw-r--r-- | firmware/drivers/audio/wm8978.c | 42 |
1 files changed, 24 insertions, 18 deletions
diff --git a/firmware/drivers/audio/wm8978.c b/firmware/drivers/audio/wm8978.c index f94f1db87f..9ebfeca820 100644 --- a/firmware/drivers/audio/wm8978.c +++ b/firmware/drivers/audio/wm8978.c @@ -26,9 +26,15 @@ //#define LOGF_ENABLE #include "logf.h" -#define HW_VOL_MIN 0 -#define HW_VOL_MUTE 0 -#define HW_VOL_MAX 96 +/* #define to help adjust lower volume limit */ +#define HW_VOL_MIN 0 +#define HW_VOL_MUTE 0 +#define HW_VOL_MAX 96 +#define HW_VOL_ANA_MIN 0 +#define HW_VOL_ANA_MAX 63 +#define HW_VOL_DIG_MAX 255 +#define HW_VOL_DIG_THRESHOLD (HW_VOL_MAX - HW_VOL_ANA_MAX) +#define HW_VOL_DIG_MIN (HW_VOL_DIG_MAX - 2*HW_VOL_DIG_THRESHOLD) /* TODO: Define/refine an API for special hardware steps outside the * main codec driver such as special GPIO handling. */ @@ -119,7 +125,7 @@ struct bool ahw_mute; } wmc_vol = { - 0, 0, false + HW_VOL_MUTE, HW_VOL_MUTE, false }; static void wmc_write(unsigned int reg, unsigned int val) @@ -222,10 +228,10 @@ void audiohw_postinit(void) wmc_write(WMC_ADDITIONAL_CTRL, WMC_SR_48KHZ); /* 44.1 */ /* Initialize to minimum volume */ - wmc_write_masked(WMC_LEFT_DAC_DIGITAL_VOL, 189, WMC_DVOL); - wmc_write_masked(WMC_LOUT1_HP_VOLUME_CTRL, 0, WMC_AVOL); - wmc_write_masked(WMC_RIGHT_DAC_DIGITAL_VOL, 189, WMC_DVOL); - wmc_write_masked(WMC_ROUT1_HP_VOLUME_CTRL, 0, WMC_AVOL); + wmc_write_masked(WMC_LEFT_DAC_DIGITAL_VOL, HW_VOL_DIG_MIN, WMC_DVOL); + wmc_write_masked(WMC_LOUT1_HP_VOLUME_CTRL, HW_VOL_ANA_MIN, WMC_AVOL); + wmc_write_masked(WMC_RIGHT_DAC_DIGITAL_VOL, HW_VOL_DIG_MIN, WMC_DVOL); + wmc_write_masked(WMC_ROUT1_HP_VOLUME_CTRL, HW_VOL_ANA_MIN, WMC_AVOL); /* ADC silenced */ wmc_write_masked(WMC_LEFT_ADC_DIGITAL_VOL, 0x00, WMC_DVOL); @@ -245,38 +251,38 @@ void audiohw_set_headphone_vol(int vol_l, int vol_r) /* When analogue volume falls below -57dB (0x00) start attenuating the * DAC volume */ - if (vol_l >= 33) + if (vol_l >= HW_VOL_DIG_THRESHOLD) { if (vol_l > HW_VOL_MAX) vol_l = HW_VOL_MAX; - dac_l = 255; - vol_l -= 33; + dac_l = HW_VOL_DIG_MAX; + vol_l -= HW_VOL_DIG_THRESHOLD; } else { if (vol_l < HW_VOL_MIN) vol_l = HW_VOL_MIN; - dac_l = 2*vol_l + 189; - vol_l = 0; + dac_l = 2*vol_l + HW_VOL_DIG_MIN; + vol_l = HW_VOL_ANA_MIN; } - if (vol_r >= 33) + if (vol_r >= HW_VOL_DIG_THRESHOLD) { if (vol_r > HW_VOL_MAX) vol_r = HW_VOL_MAX; - dac_r = 255; - vol_r -= 33; + dac_r = HW_VOL_DIG_MAX; + vol_r -= HW_VOL_DIG_THRESHOLD; } else { if (vol_r < HW_VOL_MIN) vol_r = HW_VOL_MIN; - dac_r = 2*vol_r + 189; - vol_r = 0; + dac_r = 2*vol_r + HW_VOL_DIG_MIN; + vol_r = HW_VOL_ANA_MIN; } /* Have to write both channels always to have the latching work */ |