From e0d88a11d9e0d8c29fc1cea507f7ebdf1e07bf7a Mon Sep 17 00:00:00 2001 From: Linus Nielsen Feltzing Date: Mon, 22 Jul 2002 16:38:02 +0000 Subject: Loudness and Superbass patch by Heikki Hannikainen git-svn-id: svn://svn.rockbox.org/rockbox/trunk@1400 a1c6a512-1295-4272-9138-f99709370657 --- firmware/drivers/mas.h | 5 ++++ firmware/mpeg.c | 77 ++++++++++++++++++++++++++++++++++++++++++++------ firmware/mpeg.h | 2 +- 3 files changed, 74 insertions(+), 10 deletions(-) diff --git a/firmware/drivers/mas.h b/firmware/drivers/mas.h index 32314fc789..f5ab554ca1 100644 --- a/firmware/drivers/mas.h +++ b/firmware/drivers/mas.h @@ -60,6 +60,11 @@ #define MAS_REG_KPRESCALE 0xe7 #define MAS_REG_KBASS 0x6b #define MAS_REG_KTREBLE 0x6f +#define MAS_REG_KMDB_SWITCH 0x21 +#define MAS_REG_KMDB_STR 0x22 +#define MAS_REG_KMDB_HAR 0x23 +#define MAS_REG_KMDB_FC 0x24 +#define MAS_REG_KLOUDNESS 0x1e /* * MAS commands diff --git a/firmware/mpeg.c b/firmware/mpeg.c index 70232571b7..9906620fdb 100644 --- a/firmware/mpeg.c +++ b/firmware/mpeg.c @@ -56,21 +56,30 @@ static char *units[] = { "%", /* Volume */ "dB", /* Bass */ - "dB" /* Treble */ + "dB", /* Treble */ + "", /* Balance */ + "dB", /* Loudness */ + "%" /* Bass boost */ }; static int numdecimals[] = { 0, /* Volume */ 0, /* Bass */ - 0 /* Treble */ + 0, /* Treble */ + 0, /* Balance */ + 0, /* Loudness */ + 0 /* Bass boost */ }; static int minval[] = { 0, /* Volume */ 0, /* Bass */ - 0 /* Treble */ + 0, /* Treble */ + 0, /* Balance */ + 0, /* Loudness */ + 0 /* Bass boost */ }; static int maxval[] = @@ -78,11 +87,14 @@ static int maxval[] = 50, /* Volume */ #ifdef ARCHOS_RECORDER 24, /* Bass */ - 24 /* Treble */ + 24, /* Treble */ #else 30, /* Bass */ - 30 /* Treble */ + 30, /* Treble */ #endif + 100, /* Balance */ + 17, /* Loudness */ + 10 /* Bass boost */ }; static int defaultval[] = @@ -90,11 +102,14 @@ static int defaultval[] = 70/2, /* Volume */ #ifdef ARCHOS_RECORDER 12+6, /* Bass */ - 12+6 /* Treble */ + 12+6, /* Treble */ #else 15+7, /* Bass */ - 15+7 /* Treble */ + 15+7, /* Treble */ #endif + 50, /* Balance */ + 0, /* Loudness */ + 0 /* Bass boost */ }; char *mpeg_sound_unit(int setting) @@ -965,6 +980,34 @@ void mpeg_sound_set(int setting, int value) set_prescaled_volume(); #endif break; + +#ifdef ARCHOS_RECORDER + case SOUND_SUPERBASS: + if (value) { + tmp = MAX(MIN(value * 12, 0x7f), 0); + mas_codec_writereg(MAS_REG_KMDB_STR, (tmp & 0xff) << 8); + tmp = 0x30; /* MDB_HAR: Space for experiment here */ + mas_codec_writereg(MAS_REG_KMDB_HAR, (tmp & 0xff) << 8); + tmp = 60 / 10; /* calculate MDB_FC, 60hz - experiment here, + this would depend on the earphones... + perhaps make it tunable? */ + mas_codec_writereg(MAS_REG_KMDB_FC, (tmp & 0xff) << 8); + tmp = (3 * tmp) / 2; /* calculate MDB_SHAPE */ + mas_codec_writereg(MAS_REG_KMDB_SWITCH, + ((tmp & 0xff) << 8) /* MDB_SHAPE */ + | 2); /* MDB_SWITCH enable */ + } else { + mas_codec_writereg(MAS_REG_KMDB_STR, 0); + mas_codec_writereg(MAS_REG_KMDB_HAR, 0); + mas_codec_writereg(MAS_REG_KMDB_SWITCH, 0); /* MDB_SWITCH disable */ + } + break; + + case SOUND_LOUDNESS: + tmp = MAX(MIN(value * 4, 0x44), 0); + mas_codec_writereg(MAS_REG_KLOUDNESS, (tmp & 0xff) << 8); + break; +#endif } #endif /* SIMULATOR */ } @@ -994,18 +1037,30 @@ int mpeg_val2phys(int setting, int value) result = value - 15; #endif break; + +#ifdef ARCHOS_RECORDER + case SOUND_LOUDNESS: + result = value; + break; + + case SOUND_SUPERBASS: + result = value * 10; + break; +#endif } return result; } -void mpeg_init(int volume, int bass, int treble) +void mpeg_init(int volume, int bass, int treble, int loudness, int bass_boost) { #ifdef SIMULATOR - volume = bass = treble; + volume = bass = treble = loudness = bass_boost; #else #ifdef ARCHOS_RECORDER int rc; unsigned long val; +#else + loudness = bass_boost; #endif setup_sci0(); @@ -1069,5 +1124,9 @@ void mpeg_init(int volume, int bass, int treble) mpeg_sound_set(SOUND_BASS, bass); mpeg_sound_set(SOUND_TREBLE, treble); mpeg_sound_set(SOUND_VOLUME, volume); +#ifdef ARCHOS_RECORDER + mpeg_sound_set(SOUND_LOUDNESS, loudness); + mpeg_sound_set(SOUND_SUPERBASS, bass_boost); +#endif #endif /* SIMULATOR */ } diff --git a/firmware/mpeg.h b/firmware/mpeg.h index baf6b7b476..4150181620 100644 --- a/firmware/mpeg.h +++ b/firmware/mpeg.h @@ -21,7 +21,7 @@ #include -void mpeg_init(int volume, int bass, int treble); +void mpeg_init(int volume, int bass, int treble, int loudness, int bass_boost); void mpeg_play(char* trackname); void mpeg_stop(void); void mpeg_pause(void); -- cgit v1.2.3