From 1b967f41df90cd183c42e96d40acaeea671c1016 Mon Sep 17 00:00:00 2001 From: Marcoen Hirschberg Date: Wed, 6 Dec 2006 13:34:15 +0000 Subject: move some audio driver specific code to the correspoding files git-svn-id: svn://svn.rockbox.org/rockbox/trunk@11675 a1c6a512-1295-4272-9138-f99709370657 --- firmware/drivers/tlv320.c | 16 +++++ firmware/drivers/uda1380.c | 26 +++++++ firmware/drivers/wm8731l.c | 28 ++++++++ firmware/drivers/wm8758.c | 31 +++++++++ firmware/drivers/wm8975.c | 30 ++++++++ firmware/export/sound.h | 12 ++++ firmware/export/tlv320.h | 5 ++ firmware/export/uda1380.h | 8 +++ firmware/export/wm8731l.h | 7 ++ firmware/export/wm8758.h | 7 ++ firmware/export/wm8975.h | 7 ++ firmware/sound.c | 168 +-------------------------------------------- 12 files changed, 179 insertions(+), 166 deletions(-) diff --git a/firmware/drivers/tlv320.c b/firmware/drivers/tlv320.c index c9ab094ef3..a88eae5f26 100644 --- a/firmware/drivers/tlv320.c +++ b/firmware/drivers/tlv320.c @@ -33,6 +33,22 @@ #include "i2c-coldfire.h" #include "tlv320.h" +/* convert tenth of dB volume (-840..0) to master volume register value */ +int tenthdb2master(int db) +{ + /* +6 to -73dB 1dB steps (plus mute == 80levels) 7bits */ + /* 1111111 == +6dB (0x7f) */ + /* 1111001 == 0dB (0x79) */ + /* 0110000 == -73dB (0x30 */ + /* 0101111 == mute (0x2f) */ + + if (db < VOLUME_MIN) { + return 0x2f; + } else { + return((db/10)+73+0x30); + } +} + /* local functions and definations */ #define TLV320_ADDR 0x34 diff --git a/firmware/drivers/uda1380.c b/firmware/drivers/uda1380.c index 841e7fbd19..00019148c1 100644 --- a/firmware/drivers/uda1380.c +++ b/firmware/drivers/uda1380.c @@ -35,6 +35,32 @@ #include "uda1380.h" #include "pcf50606.h" +/* convert tenth of dB volume (-840..0) to master volume register value */ +int tenthdb2master(int db) +{ + if (db < -720) /* 1.5 dB steps */ + return (2940 - db) / 15; + else if (db < -660) /* 0.75 dB steps */ + return (1110 - db) * 2 / 15; + else if (db < -520) /* 0.5 dB steps */ + return (520 - db) / 5; + else /* 0.25 dB steps */ + return -db * 2 / 5; +} + +/* convert tenth of dB volume (-780..0) to mixer volume register value */ +int tenthdb2mixer(int db) +{ + if (db < -660) /* 1.5 dB steps */ + return (2640 - db) / 15; + else if (db < -600) /* 0.75 dB steps */ + return (990 - db) * 2 / 15; + else if (db < -460) /* 0.5 dB steps */ + return (460 - db) / 5; + else /* 0.25 dB steps */ + return -db * 2 / 5; +} + /* ------------------------------------------------- */ /* Local functions and variables */ /* ------------------------------------------------- */ diff --git a/firmware/drivers/wm8731l.c b/firmware/drivers/wm8731l.c index 4fc33f882d..30521339e9 100644 --- a/firmware/drivers/wm8731l.c +++ b/firmware/drivers/wm8731l.c @@ -42,6 +42,34 @@ #define IPOD_PCM_LEVEL 0x65 /* -6dB */ +/* convert tenth of dB volume (-730..60) to master volume register value */ +int tenthdb2master(int db) +{ + /* +6 to -73dB 1dB steps (plus mute == 80levels) 7bits */ + /* 1111111 == +6dB (0x7f) */ + /* 1111001 == 0dB (0x79) */ + /* 0110000 == -73dB (0x30 */ + /* 0101111 == mute (0x2f) */ + + if (db < VOLUME_MIN) { + return 0x2f; + } else { + return((db/10)+0x30+73); + } +} + +/* convert tenth of dB volume (-780..0) to mixer volume register value */ +int tenthdb2mixer(int db) +{ + if (db < -660) /* 1.5 dB steps */ + return (2640 - db) / 15; + else if (db < -600) /* 0.75 dB steps */ + return (990 - db) * 2 / 15; + else if (db < -460) /* 0.5 dB steps */ + return (460 - db) / 5; + else /* 0.25 dB steps */ + return -db * 2 / 5; +} int audiohw_mute(int mute) { diff --git a/firmware/drivers/wm8758.c b/firmware/drivers/wm8758.c index 3a4256bb69..268df13f07 100644 --- a/firmware/drivers/wm8758.c +++ b/firmware/drivers/wm8758.c @@ -40,6 +40,37 @@ #include "wmcodec.h" #include "wm8758.h" +/* convert tenth of dB volume (-57..6) to master volume register value */ +int tenthdb2master(int db) +{ + /* +6 to -57dB in 1dB steps == 64 levels = 6 bits */ + /* 0111111 == +6dB (0x3f) = 63) */ + /* 0111001 == 0dB (0x39) = 57) */ + /* 0000001 == -56dB (0x01) = */ + /* 0000000 == -57dB (0x00) */ + + /* 1000000 == Mute (0x40) */ + + if (db < VOLUME_MIN) { + return 0x40; + } else { + return((db/10)+57); + } +} + +/* convert tenth of dB volume (-780..0) to mixer volume register value */ +int tenthdb2mixer(int db) +{ + if (db < -660) /* 1.5 dB steps */ + return (2640 - db) / 15; + else if (db < -600) /* 0.75 dB steps */ + return (990 - db) * 2 / 15; + else if (db < -460) /* 0.5 dB steps */ + return (460 - db) / 5; + else /* 0.25 dB steps */ + return -db * 2 / 5; +} + void audiohw_reset(void); #define IPOD_PCM_LEVEL 0x65 /* -6dB */ diff --git a/firmware/drivers/wm8975.c b/firmware/drivers/wm8975.c index 96a563b1c9..7f2f2c4a7d 100644 --- a/firmware/drivers/wm8975.c +++ b/firmware/drivers/wm8975.c @@ -40,6 +40,36 @@ #include "wmcodec.h" #include "wm8975.h" +/* convert tenth of dB volume (-730..60) to master volume register value */ +int tenthdb2master(int db) +{ + /* +6 to -73dB 1dB steps (plus mute == 80levels) 7bits */ + /* 1111111 == +6dB (0x7f) */ + /* 1111001 == 0dB (0x79) */ + /* 0110000 == -73dB (0x30 */ + /* 0101111 == mute (0x2f) */ + + if (db < VOLUME_MIN) { + return 0x0; + } else { + return((db/10)+73+0x30); + } +} + +/* convert tenth of dB volume (-780..0) to mixer volume register value */ +int tenthdb2mixer(int db) +{ + if (db < -660) /* 1.5 dB steps */ + return (2640 - db) / 15; + else if (db < -600) /* 0.75 dB steps */ + return (990 - db) * 2 / 15; + else if (db < -460) /* 0.5 dB steps */ + return (460 - db) / 5; + else /* 0.25 dB steps */ + return -db * 2 / 5; +} + + void audiohw_reset(void); #define IPOD_PCM_LEVEL 0x65 /* -6dB */ diff --git a/firmware/export/sound.h b/firmware/export/sound.h index 33175e4166..2cf2ad3136 100644 --- a/firmware/export/sound.h +++ b/firmware/export/sound.h @@ -19,6 +19,18 @@ #ifndef SOUND_H #define SOUND_H +#ifdef HAVE_UDA1380 +#include "uda1380.h" +#elif defined(HAVE_WM8975) || defined(HAVE_WM8751) +#include "wm8975.h" +#elif defined(HAVE_WM8758) +#include "wm8758.h" +#elif defined(HAVE_WM8731) || defined(HAVE_WM8721) +#include "wm8731l.h" +#elif defined(HAVE_TLV320) +#include "tlv320.h" +#endif + enum { SOUND_VOLUME = 0, SOUND_BASS, diff --git a/firmware/export/tlv320.h b/firmware/export/tlv320.h index dbb17e35bc..3cf5bd80cd 100644 --- a/firmware/export/tlv320.h +++ b/firmware/export/tlv320.h @@ -20,6 +20,11 @@ #ifndef _TLV320_H_ #define _TLV320_H_ +#define VOLUME_MIN -730 +#define VOLUME_MAX 60 + +extern tenthdb2master(int db); + /*** definitions ***/ extern void audiohw_init(void); diff --git a/firmware/export/uda1380.h b/firmware/export/uda1380.h index 4b70e795bf..f8c8d6dd66 100644 --- a/firmware/export/uda1380.h +++ b/firmware/export/uda1380.h @@ -19,6 +19,14 @@ #ifndef _UDA1380_H #define _UDA1380_H + +/* volume/balance/treble/bass interdependency */ +#define VOLUME_MIN -840 +#define VOLUME_MAX 0 + +extern tenthdb2master(int db); +extern tenthdb2mixer(int db); + extern void audiohw_reset(void); extern int audiohw_init(void); extern void audiohw_enable_output(bool enable); diff --git a/firmware/export/wm8731l.h b/firmware/export/wm8731l.h index 5783be17cc..b6fa13f6cb 100644 --- a/firmware/export/wm8731l.h +++ b/firmware/export/wm8731l.h @@ -20,6 +20,13 @@ #ifndef _WM8731L_H #define _WM8731L_H +/* volume/balance/treble/bass interdependency */ +#define VOLUME_MIN -730 +#define VOLUME_MAX 60 + +extern int tenthdb2master(int db); +extern int tenthdb2mixer(int db); + extern void audiohw_reset(void); extern int audiohw_init(void); extern void audiohw_enable_output(bool enable); diff --git a/firmware/export/wm8758.h b/firmware/export/wm8758.h index ca7074646d..20b26dc11f 100644 --- a/firmware/export/wm8758.h +++ b/firmware/export/wm8758.h @@ -20,6 +20,13 @@ #ifndef _WM8758_H #define _WM8758_H +/* volume/balance/treble/bass interdependency */ +#define VOLUME_MIN -570 +#define VOLUME_MAX 60 + +extern int tenthdb2master(int db); +extern int tenthdb2mixer(int db); + extern void audiohw_reset(void); extern int audiohw_init(void); extern void audiohw_enable_output(bool enable); diff --git a/firmware/export/wm8975.h b/firmware/export/wm8975.h index 005535bfaf..c00303a6a8 100644 --- a/firmware/export/wm8975.h +++ b/firmware/export/wm8975.h @@ -20,6 +20,13 @@ #ifndef _WM8975_H #define _WM8975_H +/* volume/balance/treble/bass interdependency */ +#define VOLUME_MIN -730 +#define VOLUME_MAX 60 + +extern int tenthdb2master(int db); +extern int tenthdb2mixer(int db); + extern void audiohw_reset(void); extern int audiohw_init(void); extern void audiohw_enable_output(bool enable); diff --git a/firmware/sound.c b/firmware/sound.c index 0c4c153797..09fa3dac94 100644 --- a/firmware/sound.c +++ b/firmware/sound.c @@ -24,17 +24,7 @@ #ifndef SIMULATOR #include "i2c.h" #include "mas.h" -#ifdef HAVE_UDA1380 -#include "uda1380.h" -#elif defined(HAVE_WM8975) || defined(HAVE_WM8751) -#include "wm8975.h" -#elif defined(HAVE_WM8758) -#include "wm8758.h" -#elif defined(HAVE_WM8731) || defined(HAVE_WM8721) -#include "wm8731l.h" -#elif defined(HAVE_TLV320) -#include "tlv320.h" -#elif CONFIG_CPU == PNX0101 +#if CONFIG_CPU == PNX0101 #include "pnx0101.h" #endif #include "dac.h" @@ -269,161 +259,7 @@ static int tenthdb2reg(int db) } #endif -#ifdef HAVE_UDA1380 /* volume/balance/treble/bass interdependency */ -#define VOLUME_MIN -840 -#define VOLUME_MAX 0 - -/* convert tenth of dB volume (-840..0) to master volume register value */ -static int tenthdb2master(int db) -{ - if (db < -720) /* 1.5 dB steps */ - return (2940 - db) / 15; - else if (db < -660) /* 0.75 dB steps */ - return (1110 - db) * 2 / 15; - else if (db < -520) /* 0.5 dB steps */ - return (520 - db) / 5; - else /* 0.25 dB steps */ - return -db * 2 / 5; -} - -/* convert tenth of dB volume (-780..0) to mixer volume register value */ -static int tenthdb2mixer(int db) -{ - if (db < -660) /* 1.5 dB steps */ - return (2640 - db) / 15; - else if (db < -600) /* 0.75 dB steps */ - return (990 - db) * 2 / 15; - else if (db < -460) /* 0.5 dB steps */ - return (460 - db) / 5; - else /* 0.25 dB steps */ - return -db * 2 / 5; -} - -#elif defined(HAVE_TLV320) -#define VOLUME_MIN -730 -#define VOLUME_MAX 60 - -/* convert tenth of dB volume (-840..0) to master volume register value */ -static int tenthdb2master(int db) -{ - /* +6 to -73dB 1dB steps (plus mute == 80levels) 7bits */ - /* 1111111 == +6dB (0x7f) */ - /* 1111001 == 0dB (0x79) */ - /* 0110000 == -73dB (0x30 */ - /* 0101111 == mute (0x2f) */ - - if (db < VOLUME_MIN) { - return 0x2f; - } else { - return((db/10)+73+0x30); - } -} - -#elif defined(HAVE_WM8975) || defined(HAVE_WM8751) -/* volume/balance/treble/bass interdependency */ -#define VOLUME_MIN -730 -#define VOLUME_MAX 60 - -/* convert tenth of dB volume (-730..60) to master volume register value */ -static int tenthdb2master(int db) -{ - /* +6 to -73dB 1dB steps (plus mute == 80levels) 7bits */ - /* 1111111 == +6dB (0x7f) */ - /* 1111001 == 0dB (0x79) */ - /* 0110000 == -73dB (0x30 */ - /* 0101111 == mute (0x2f) */ - - if (db < VOLUME_MIN) { - return 0x0; - } else { - return((db/10)+73+0x30); - } -} - -/* convert tenth of dB volume (-780..0) to mixer volume register value */ -static int tenthdb2mixer(int db) -{ - if (db < -660) /* 1.5 dB steps */ - return (2640 - db) / 15; - else if (db < -600) /* 0.75 dB steps */ - return (990 - db) * 2 / 15; - else if (db < -460) /* 0.5 dB steps */ - return (460 - db) / 5; - else /* 0.25 dB steps */ - return -db * 2 / 5; -} - -#elif defined(HAVE_WM8758) -/* volume/balance/treble/bass interdependency */ -#define VOLUME_MIN -570 -#define VOLUME_MAX 60 - -/* convert tenth of dB volume (-57..6) to master volume register value */ -static int tenthdb2master(int db) -{ - /* +6 to -57dB in 1dB steps == 64 levels = 6 bits */ - /* 0111111 == +6dB (0x3f) = 63) */ - /* 0111001 == 0dB (0x39) = 57) */ - /* 0000001 == -56dB (0x01) = */ - /* 0000000 == -57dB (0x00) */ - - /* 1000000 == Mute (0x40) */ - - if (db < VOLUME_MIN) { - return 0x40; - } else { - return((db/10)+57); - } -} - -/* convert tenth of dB volume (-780..0) to mixer volume register value */ -static int tenthdb2mixer(int db) -{ - if (db < -660) /* 1.5 dB steps */ - return (2640 - db) / 15; - else if (db < -600) /* 0.75 dB steps */ - return (990 - db) * 2 / 15; - else if (db < -460) /* 0.5 dB steps */ - return (460 - db) / 5; - else /* 0.25 dB steps */ - return -db * 2 / 5; -} - -#elif defined(HAVE_WM8731) || defined(HAVE_WM8721) -/* volume/balance/treble/bass interdependency */ -#define VOLUME_MIN -730 -#define VOLUME_MAX 60 - -/* convert tenth of dB volume (-730..60) to master volume register value */ -static int tenthdb2master(int db) -{ - /* +6 to -73dB 1dB steps (plus mute == 80levels) 7bits */ - /* 1111111 == +6dB (0x7f) */ - /* 1111001 == 0dB (0x79) */ - /* 0110000 == -73dB (0x30 */ - /* 0101111 == mute (0x2f) */ - - if (db < VOLUME_MIN) { - return 0x2f; - } else { - return((db/10)+0x30+73); - } -} - -/* convert tenth of dB volume (-780..0) to mixer volume register value */ -static int tenthdb2mixer(int db) -{ - if (db < -660) /* 1.5 dB steps */ - return (2640 - db) / 15; - else if (db < -600) /* 0.75 dB steps */ - return (990 - db) * 2 / 15; - else if (db < -460) /* 0.5 dB steps */ - return (460 - db) / 5; - else /* 0.25 dB steps */ - return -db * 2 / 5; -} - -#elif defined(HAVE_PP5024_CODEC) +#if defined(HAVE_PP5024_CODEC) /* TODO: Work out volume/balance/treble/bass interdependency */ #define VOLUME_MIN 0 #define VOLUME_MAX 1 -- cgit v1.2.3