From 3828c7d98202edf885faa978e928760576666a6a Mon Sep 17 00:00:00 2001 From: Thom Johansen Date: Thu, 16 Jun 2005 20:16:58 +0000 Subject: Balance support for UDA1380 based players. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@6730 a1c6a512-1295-4272-9138-f99709370657 --- firmware/drivers/uda1380.c | 23 +++++++++++++++++++++-- firmware/export/uda1380.h | 1 + firmware/sound.c | 2 ++ 3 files changed, 24 insertions(+), 2 deletions(-) diff --git a/firmware/drivers/uda1380.c b/firmware/drivers/uda1380.c index 4eb04d1ba3..bcc94474fa 100644 --- a/firmware/drivers/uda1380.c +++ b/firmware/drivers/uda1380.c @@ -38,6 +38,8 @@ int uda1380_write_reg(unsigned char reg, unsigned short value); unsigned short uda1380_regs[0x30]; +short uda1380_balance; +short uda1380_volume; /* Definition of a playback configuration to start with */ @@ -90,8 +92,23 @@ int uda1380_write_reg(unsigned char reg, unsigned short value) */ int uda1380_setvol(int vol) { + int vol_l, vol_r; + + uda1380_volume = vol; + /* Simple linear volume crossfade curves */ + vol_l = MAX(uda1380_balance*0xff/100, 0); + vol_r = MAX(-uda1380_balance*0xff/100, 0); return uda1380_write_reg(REG_MASTER_VOL, - MASTER_VOL_LEFT(vol) | MASTER_VOL_RIGHT(vol)); + MASTER_VOL_LEFT(vol_l) | MASTER_VOL_RIGHT(vol_r)); +} + +/** + * Sets stereo balance + */ +void uda1380_set_balance(int bal) +{ + uda1380_balance = bal; + uda1380_setvol(uda1380_volume); } /** @@ -165,7 +182,9 @@ int uda1380_init(void) { if (uda1380_set_regs() == -1) return -1; - + uda1380_balance = 0; + uda1380_volume = 0x20; /* Taken from uda1380_defaults */ + return 0; } diff --git a/firmware/export/uda1380.h b/firmware/export/uda1380.h index f7e97e13c7..b09d271808 100644 --- a/firmware/export/uda1380.h +++ b/firmware/export/uda1380.h @@ -23,6 +23,7 @@ extern int uda1380_init(void); extern void uda1380_enable_output(bool enable); extern int uda1380_setvol(int vol); +extern void uda1380_set_balance(int bal); extern void uda1380_set_bass(int value); extern void uda1380_set_treble(int value); extern int uda1380_mute(int mute); diff --git a/firmware/sound.c b/firmware/sound.c index 7558a3349b..7dd1fbf98e 100644 --- a/firmware/sound.c +++ b/firmware/sound.c @@ -491,6 +491,8 @@ void sound_set(int setting, int value) #elif CONFIG_HWCODEC == MAS3507D current_balance = value * 960 / 100; /* tenth of dB */ set_prescaled_volume(); +#elif defined(HAVE_UDA1380) + uda1380_set_balance(value); #endif break; -- cgit v1.2.3