summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--apps/codecs.c1
-rw-r--r--apps/debug_menu.c1
-rw-r--r--apps/menus/recording_menu.c1
-rw-r--r--apps/mpeg.c4
-rw-r--r--apps/plugin.h2
-rw-r--r--apps/radio/radio.c1
-rw-r--r--apps/recorder/peakmeter.c1
-rw-r--r--apps/recorder/peakmeter.h1
-rw-r--r--apps/recorder/recording.c1
-rw-r--r--firmware/SOURCES22
-rw-r--r--firmware/drivers/audio/dac3550a.c (renamed from firmware/drivers/dac.c)15
-rw-r--r--firmware/drivers/audio/mas35xx.c99
-rw-r--r--firmware/drivers/tuner/s1a0903x01.c2
-rw-r--r--firmware/export/audiohw.h3
-rw-r--r--firmware/export/dac3550a.h (renamed from firmware/drivers/dac.h)13
-rw-r--r--firmware/export/mas.h184
-rw-r--r--firmware/export/mas35xx.h162
-rw-r--r--firmware/export/mascodec.h43
-rw-r--r--firmware/sound.c85
-rw-r--r--firmware/target/sh/archos/audio-archos.c (renamed from firmware/mp3_playback.c)55
-rw-r--r--firmware/target/sh/archos/mascodec-archos.c (renamed from firmware/drivers/mas.c)4
-rw-r--r--firmware/test/i2c/main.c4
-rw-r--r--uisimulator/common/stubs.c108
23 files changed, 450 insertions, 362 deletions
diff --git a/apps/codecs.c b/apps/codecs.c
index 3fa05be59a..88478e8566 100644
--- a/apps/codecs.c
+++ b/apps/codecs.c
@@ -36,7 +36,6 @@
36#include "kernel.h" 36#include "kernel.h"
37#include "screens.h" 37#include "screens.h"
38#include "misc.h" 38#include "misc.h"
39#include "mas.h"
40#include "codecs.h" 39#include "codecs.h"
41#include "lang.h" 40#include "lang.h"
42#include "keyboard.h" 41#include "keyboard.h"
diff --git a/apps/debug_menu.c b/apps/debug_menu.c
index 2497b17826..bedc98ae10 100644
--- a/apps/debug_menu.c
+++ b/apps/debug_menu.c
@@ -61,7 +61,6 @@
61#include "rtc.h" 61#include "rtc.h"
62#include "storage.h" 62#include "storage.h"
63#include "fat.h" 63#include "fat.h"
64#include "mas.h"
65#include "eeprom_24cxx.h" 64#include "eeprom_24cxx.h"
66#if (CONFIG_STORAGE & STORAGE_MMC) || (CONFIG_STORAGE & STORAGE_SD) 65#if (CONFIG_STORAGE & STORAGE_MMC) || (CONFIG_STORAGE & STORAGE_SD)
67#include "sdmmc.h" 66#include "sdmmc.h"
diff --git a/apps/menus/recording_menu.c b/apps/menus/recording_menu.c
index 6a1c1d31e8..8eaeab699c 100644
--- a/apps/menus/recording_menu.c
+++ b/apps/menus/recording_menu.c
@@ -49,7 +49,6 @@
49#endif 49#endif
50#ifdef HAVE_RECORDING 50#ifdef HAVE_RECORDING
51#include "peakmeter.h" 51#include "peakmeter.h"
52#include "mas.h"
53#endif 52#endif
54#include "splash.h" 53#include "splash.h"
55#if CONFIG_CODEC == SWCODEC 54#if CONFIG_CODEC == SWCODEC
diff --git a/apps/mpeg.c b/apps/mpeg.c
index 62fda5e3cb..583e4e2122 100644
--- a/apps/mpeg.c
+++ b/apps/mpeg.c
@@ -45,7 +45,7 @@
45#include "settings.h" 45#include "settings.h"
46#ifndef SIMULATOR 46#ifndef SIMULATOR
47#include "i2c.h" 47#include "i2c.h"
48#include "mas.h" 48#include "mas35xx.h"
49#include "system.h" 49#include "system.h"
50#include "usb.h" 50#include "usb.h"
51#include "file.h" 51#include "file.h"
@@ -53,7 +53,7 @@
53#endif /* !SIMULATOR */ 53#endif /* !SIMULATOR */
54#ifdef HAVE_LCD_BITMAP 54#ifdef HAVE_LCD_BITMAP
55#include "lcd.h" 55#include "lcd.h"
56#endif 56#endif /* CONFIG_CODEC != SWCODEC */
57 57
58#define MPEG_SWAP_CHUNKSIZE 0x2000 58#define MPEG_SWAP_CHUNKSIZE 0x2000
59#define MPEG_HIGH_WATER 2 /* We leave 2 bytes empty because otherwise we 59#define MPEG_HIGH_WATER 2 /* We leave 2 bytes empty because otherwise we
diff --git a/apps/plugin.h b/apps/plugin.h
index 56e0bfcd04..0503980c1e 100644
--- a/apps/plugin.h
+++ b/apps/plugin.h
@@ -77,7 +77,7 @@ void* plugin_get_buffer(size_t *buffer_size);
77#include "recording.h" 77#include "recording.h"
78#endif 78#endif
79#else 79#else
80#include "mas.h" 80#include "mas35xx.h"
81#endif /* CONFIG_CODEC == SWCODEC */ 81#endif /* CONFIG_CODEC == SWCODEC */
82#include "settings.h" 82#include "settings.h"
83#include "timer.h" 83#include "timer.h"
diff --git a/apps/radio/radio.c b/apps/radio/radio.c
index 6f1903d79c..5fe1fabef0 100644
--- a/apps/radio/radio.c
+++ b/apps/radio/radio.c
@@ -23,7 +23,6 @@
23#include <stdio.h> 23#include <stdio.h>
24#include <stdbool.h> 24#include <stdbool.h>
25#include <stdlib.h> 25#include <stdlib.h>
26#include "mas.h"
27#include "settings.h" 26#include "settings.h"
28#include "button.h" 27#include "button.h"
29#include "status.h" 28#include "status.h"
diff --git a/apps/recorder/peakmeter.c b/apps/recorder/peakmeter.c
index 2450559b8d..aacfc23cee 100644
--- a/apps/recorder/peakmeter.c
+++ b/apps/recorder/peakmeter.c
@@ -22,7 +22,6 @@
22#if defined(SIMULATOR) && (CONFIG_CODEC != SWCODEC) 22#if defined(SIMULATOR) && (CONFIG_CODEC != SWCODEC)
23#include <stdlib.h> /* sim uses rand for peakmeter simulation */ 23#include <stdlib.h> /* sim uses rand for peakmeter simulation */
24#endif 24#endif
25#include "mas.h"
26#include "thread.h" 25#include "thread.h"
27#include "kernel.h" 26#include "kernel.h"
28#include "settings.h" 27#include "settings.h"
diff --git a/apps/recorder/peakmeter.h b/apps/recorder/peakmeter.h
index 308e5fb916..4abcc154f3 100644
--- a/apps/recorder/peakmeter.h
+++ b/apps/recorder/peakmeter.h
@@ -22,6 +22,7 @@
22#define __PEAKMETER_H__ 22#define __PEAKMETER_H__
23 23
24#define PEAK_METER_FPS 20 24#define PEAK_METER_FPS 20
25#define MAX_PEAK 0x8000
25 26
26/*#define PM_DEBUG */ 27/*#define PM_DEBUG */
27#ifdef PM_DEBUG 28#ifdef PM_DEBUG
diff --git a/apps/recorder/recording.c b/apps/recorder/recording.c
index 9adb3c1839..fdeae03f9b 100644
--- a/apps/recorder/recording.c
+++ b/apps/recorder/recording.c
@@ -42,7 +42,6 @@
42#include "pcm_record.h" 42#include "pcm_record.h"
43#include "recording.h" 43#include "recording.h"
44#include "mp3_playback.h" 44#include "mp3_playback.h"
45#include "mas.h"
46#include "button.h" 45#include "button.h"
47#include "kernel.h" 46#include "kernel.h"
48#include "settings.h" 47#include "settings.h"
diff --git a/firmware/SOURCES b/firmware/SOURCES
index f118f6a396..5b7a582604 100644
--- a/firmware/SOURCES
+++ b/firmware/SOURCES
@@ -175,7 +175,7 @@ drivers/led.c
175drivers/button.c 175drivers/button.c
176#if (CONFIG_PLATFORM & PLATFORM_NATIVE) 176#if (CONFIG_PLATFORM & PLATFORM_NATIVE)
177#ifdef HAVE_DAC3550A 177#ifdef HAVE_DAC3550A
178drivers/dac.c 178drivers/audio/dac3550a.c
179#endif 179#endif
180#ifdef HAVE_SERIAL 180#ifdef HAVE_SERIAL
181drivers/serial.c 181drivers/serial.c
@@ -289,9 +289,6 @@ drivers/tuner/rda5802.c
289#endif /* BOOTLOADER */ 289#endif /* BOOTLOADER */
290 290
291/* Sound */ 291/* Sound */
292#if CONFIG_CODEC != SWCODEC
293mp3_playback.c
294#endif /* CONFIG_CODEC != SWCODEC */
295sound.c 292sound.c
296 293
297#if CONFIG_CODEC == SWCODEC 294#if CONFIG_CODEC == SWCODEC
@@ -303,15 +300,6 @@ pcm.c
303enc_base.c 300enc_base.c
304#endif /* HAVE_RECORDING */ 301#endif /* HAVE_RECORDING */
305#endif /* BOOTLOADER */ 302#endif /* BOOTLOADER */
306
307#else /* !SWCODEC */
308
309#ifndef BOOTLOADER
310#ifndef SIMULATOR
311drivers/mas.c
312#endif /* SIMULATOR */
313#endif /* BOOTLOADER */
314
315#endif /* SWCODEC */ 303#endif /* SWCODEC */
316 304
317/* Audio codec */ 305/* Audio codec */
@@ -574,6 +562,8 @@ target/sh/archos/player/lcd-player.c
574target/sh/archos/player/power-player.c 562target/sh/archos/player/power-player.c
575target/sh/archos/player/powermgmt-player.c 563target/sh/archos/player/powermgmt-player.c
576target/sh/archos/player/usb-player.c 564target/sh/archos/player/usb-player.c
565target/sh/archos/mascodec-archos.c
566target/sh/archos/audio-archos.c
577#endif /* SIMULATOR */ 567#endif /* SIMULATOR */
578#endif /* ARCHOS_PLAYER */ 568#endif /* ARCHOS_PLAYER */
579 569
@@ -588,6 +578,8 @@ target/sh/archos/recorder/button-recorder.c
588target/sh/archos/recorder/power-recorder.c 578target/sh/archos/recorder/power-recorder.c
589target/sh/archos/recorder/powermgmt-recorder.c 579target/sh/archos/recorder/powermgmt-recorder.c
590target/sh/archos/recorder/usb-recorder.c 580target/sh/archos/recorder/usb-recorder.c
581target/sh/archos/mascodec-archos.c
582target/sh/archos/audio-archos.c
591#endif /* SIMULATOR */ 583#endif /* SIMULATOR */
592#endif /* ARCHOS_RECORDER */ 584#endif /* ARCHOS_RECORDER */
593 585
@@ -602,6 +594,8 @@ target/sh/archos/fm_v2/button-fm_v2.c
602target/sh/archos/fm_v2/power-fm_v2.c 594target/sh/archos/fm_v2/power-fm_v2.c
603target/sh/archos/fm_v2/powermgmt-fm_v2.c 595target/sh/archos/fm_v2/powermgmt-fm_v2.c
604target/sh/archos/fm_v2/usb-fm_v2.c 596target/sh/archos/fm_v2/usb-fm_v2.c
597target/sh/archos/mascodec-archos.c
598target/sh/archos/audio-archos.c
605#endif /* SIMULATOR */ 599#endif /* SIMULATOR */
606#endif /* ARCHOS_FMRECORDER || ARCHOS_RECORDERV2 */ 600#endif /* ARCHOS_FMRECORDER || ARCHOS_RECORDERV2 */
607 601
@@ -614,6 +608,8 @@ target/sh/archos/ondio/button-ondio.c
614target/sh/archos/ondio/power-ondio.c 608target/sh/archos/ondio/power-ondio.c
615target/sh/archos/ondio/powermgmt-ondio.c 609target/sh/archos/ondio/powermgmt-ondio.c
616target/sh/archos/ondio/usb-ondio.c 610target/sh/archos/ondio/usb-ondio.c
611target/sh/archos/mascodec-archos.c
612target/sh/archos/audio-archos.c
617#if (CONFIG_TUNER & TEA5767) 613#if (CONFIG_TUNER & TEA5767)
618target/sh/archos/ondio/fmradio_i2c-ondio.c 614target/sh/archos/ondio/fmradio_i2c-ondio.c
619#endif 615#endif
diff --git a/firmware/drivers/dac.c b/firmware/drivers/audio/dac3550a.c
index f21ef9a802..e13602e481 100644
--- a/firmware/drivers/dac.c
+++ b/firmware/drivers/audio/dac3550a.c
@@ -5,7 +5,7 @@
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < 5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ 6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
7 * \/ \/ \/ \/ \/ 7 * \/ \/ \/ \/ \/
8 * $Id$ 8 * $Id: dac.c 17847 2008-06-28 18:10:04Z bagder $
9 * 9 *
10 * Copyright (C) 2002 by Linus Nielsen Feltzing 10 * Copyright (C) 2002 by Linus Nielsen Feltzing
11 * 11 *
@@ -22,13 +22,19 @@
22#include "stdbool.h" 22#include "stdbool.h"
23#include "i2c.h" 23#include "i2c.h"
24#include "debug.h" 24#include "debug.h"
25#include "dac.h" 25#include "dac3550a.h"
26
27#ifdef HAVE_DAC3550A
28 26
29static bool line_in_enabled = false; 27static bool line_in_enabled = false;
30static bool dac_enabled = false; 28static bool dac_enabled = false;
31 29
30/* convert tenth of dB volume (-780..+180) to dac3550 register value */
31int tenthdb2reg(int db)
32{
33 if (db < -540) /* 3 dB steps */
34 return (db + 780) / 30;
35 else /* 1.5 dB steps */
36 return (db + 660) / 15;
37}
32 38
33int dac_volume(unsigned int left, unsigned int right, bool deemph) 39int dac_volume(unsigned int left, unsigned int right, bool deemph)
34{ 40{
@@ -116,4 +122,3 @@ void dac_init(void)
116 i2c_end(); 122 i2c_end();
117} 123}
118 124
119#endif
diff --git a/firmware/drivers/audio/mas35xx.c b/firmware/drivers/audio/mas35xx.c
index 342d8a3c2e..e6cc665109 100644
--- a/firmware/drivers/audio/mas35xx.c
+++ b/firmware/drivers/audio/mas35xx.c
@@ -23,8 +23,8 @@
23 ****************************************************************************/ 23 ****************************************************************************/
24 24
25#include "config.h" 25#include "config.h"
26#include "system.h" /* MAX MIN macros */
26#include "audiohw.h" 27#include "audiohw.h"
27#include "mas.h"
28 28
29const struct sound_settings_info audiohw_settings[] = { 29const struct sound_settings_info audiohw_settings[] = {
30#if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) 30#if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F)
@@ -56,10 +56,15 @@ const struct sound_settings_info audiohw_settings[] = {
56#endif 56#endif
57}; 57};
58 58
59
60int channel_configuration = SOUND_CHAN_STEREO; 59int channel_configuration = SOUND_CHAN_STEREO;
61int stereo_width = 100; 60int stereo_width = 100;
62 61
62#if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F)
63unsigned long mdb_shape_shadow = 0;
64unsigned long loudness_shadow = 0;
65unsigned long shadow_io_control_main;
66#endif
67
63 68
64static void set_channel_config(void) 69static void set_channel_config(void)
65{ 70{
@@ -181,13 +186,97 @@ void audiohw_set_treble(int val)
181} 186}
182 187
183#if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) 188#if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F)
184void audiohw_set_volume(int val) { 189void audiohw_set_volume(int val)
190{
185 unsigned tmp = ((unsigned)(val + 115) & 0xff) << 8; 191 unsigned tmp = ((unsigned)(val + 115) & 0xff) << 8;
186 mas_codec_writereg(MAS_REG_VOLUME_CONTROL, tmp); 192 mas_codec_writereg(MAS_REG_VOLUME_CONTROL, tmp);
187} 193}
188 194
189void audiohw_set_balance(int val) { 195void audiohw_set_loudness(int value)
196{
197 loudness_shadow = (loudness_shadow & 0x04) |
198 (MAX(MIN(value * 4, 0x44), 0) << 8);
199 mas_codec_writereg(MAS_REG_KLOUDNESS, loudness_shadow);
200}
201
202void audiohw_set_avc(int value)
203{
204 int tmp;
205
206 static const uint16_t avc_vals[] =
207 {
208 (0x1 << 8) | (0x8 << 12), /* 20ms */
209 (0x2 << 8) | (0x8 << 12), /* 2s */
210 (0x4 << 8) | (0x8 << 12), /* 4s */
211 (0x8 << 8) | (0x8 << 12), /* 8s */
212 };
213 switch (value) {
214 case 1:
215 case 2:
216 case 3:
217 case 4:
218 tmp = avc_vals[value -1];
219 break;
220 case -1: /* turn off and then turn on again to decay quickly */
221 tmp = mas_codec_readreg(MAS_REG_KAVC);
222 mas_codec_writereg(MAS_REG_KAVC, 0);
223 break;
224 default: /* off */
225 tmp = 0;
226 break;
227 }
228 mas_codec_writereg(MAS_REG_KAVC, tmp);
229}
230
231void audiohw_set_mdb_strength(int value)
232{
233 mas_codec_writereg(MAS_REG_KMDB_STR, (value & 0x7f) << 8);
234}
235
236void audiohw_set_mdb_harmonics(int value)
237{
238 int tmp = value * 127 / 100;
239 mas_codec_writereg(MAS_REG_KMDB_HAR, (tmp & 0x7f) << 8);
240}
241
242void audiohw_set_mdb_center(int value)
243{
244 mas_codec_writereg(MAS_REG_KMDB_FC, (value/10) << 8);
245}
246
247void audiohw_set_mdb_shape(int value)
248{
249 mdb_shape_shadow = (mdb_shape_shadow & 0x02) | ((value/10) << 8);
250 mas_codec_writereg(MAS_REG_KMDB_SWITCH, mdb_shape_shadow);
251}
252
253void audiohw_set_mdb_enable(int value)
254{
255 mdb_shape_shadow = (mdb_shape_shadow & ~0x02) | (value?2:0);
256 mas_codec_writereg(MAS_REG_KMDB_SWITCH, mdb_shape_shadow);
257}
258
259void audiohw_set_superbass(int value)
260{
261 loudness_shadow = (loudness_shadow & ~0x04) | (value?4:0);
262 mas_codec_writereg(MAS_REG_KLOUDNESS, loudness_shadow);
263}
264
265void audiohw_set_balance(int val)
266{
190 unsigned tmp = ((unsigned)(val * 127 / 100) & 0xff) << 8; 267 unsigned tmp = ((unsigned)(val * 127 / 100) & 0xff) << 8;
191 mas_codec_writereg(MAS_REG_BALANCE, tmp); 268 mas_codec_writereg(MAS_REG_BALANCE, tmp);
192} 269}
193#endif 270
271void audiohw_set_pitch(unsigned long val)
272{
273 mas_writemem(MAS_BANK_D0, MAS_D0_OFREQ_CONTROL, &val, 1);
274
275 /* We must tell the MAS that the frequency has changed.
276 * This will unfortunately cause a short silence. */
277
278 mas_writemem(MAS_BANK_D0, MAS_D0_IO_CONTROL_MAIN, &shadow_io_control_main, 1);
279}
280
281#endif /* CONFIG_CODEC == MAS3587F || CONFIG_CODEC == MAS3539F */
282
diff --git a/firmware/drivers/tuner/s1a0903x01.c b/firmware/drivers/tuner/s1a0903x01.c
index 3a417d73af..2c93ebdaad 100644
--- a/firmware/drivers/tuner/s1a0903x01.c
+++ b/firmware/drivers/tuner/s1a0903x01.c
@@ -27,7 +27,7 @@
27#include "tuner.h" /* tuner abstraction interface */ 27#include "tuner.h" /* tuner abstraction interface */
28#include "fmradio.h" /* physical interface driver */ 28#include "fmradio.h" /* physical interface driver */
29#include "sound.h" 29#include "sound.h"
30#include "mas.h" 30#include "mas35xx.h"
31#include "power.h" 31#include "power.h"
32 32
33#define DEFAULT_IN1 0x100003 /* Mute */ 33#define DEFAULT_IN1 0x100003 /* Mute */
diff --git a/firmware/export/audiohw.h b/firmware/export/audiohw.h
index 56f4d3dbea..930c671c20 100644
--- a/firmware/export/audiohw.h
+++ b/firmware/export/audiohw.h
@@ -59,6 +59,9 @@
59#include "as3514.h" 59#include "as3514.h"
60#elif defined(HAVE_MAS35XX) 60#elif defined(HAVE_MAS35XX)
61#include "mas35xx.h" 61#include "mas35xx.h"
62#if defined(HAVE_DAC3550A)
63#include "dac3550a.h"
64#endif /* HAVE_DAC3550A */
62#elif defined(HAVE_TSC2100) 65#elif defined(HAVE_TSC2100)
63#include "tsc2100.h" 66#include "tsc2100.h"
64#elif defined(HAVE_JZ4740_CODEC) 67#elif defined(HAVE_JZ4740_CODEC)
diff --git a/firmware/drivers/dac.h b/firmware/export/dac3550a.h
index 121ce74e9d..3744b221ed 100644
--- a/firmware/drivers/dac.h
+++ b/firmware/export/dac3550a.h
@@ -5,7 +5,7 @@
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < 5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ 6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
7 * \/ \/ \/ \/ \/ 7 * \/ \/ \/ \/ \/
8 * $Id$ 8 * $Id: dac.h 24158 2010-01-03 11:31:14Z Buschel $
9 * 9 *
10 * Copyright (C) 2002 by Linus Nielsen Feltzing 10 * Copyright (C) 2002 by Linus Nielsen Feltzing
11 * 11 *
@@ -18,13 +18,11 @@
18 * KIND, either express or implied. 18 * KIND, either express or implied.
19 * 19 *
20 ****************************************************************************/ 20 ****************************************************************************/
21#ifndef _DAC_H_ 21#ifndef _DAC3550A_H_
22#define _DAC_H_ 22#define _DAC3550A_H_
23 23
24#include "config.h" 24#include "config.h"
25 25
26#ifdef HAVE_DAC3550A
27
28/* 26/*
29 DAC I2C defs 27 DAC I2C defs
30*/ 28*/
@@ -38,11 +36,12 @@
38#define DAC_AVOL 2 36#define DAC_AVOL 2
39#define DAC_GCFG 3 37#define DAC_GCFG 3
40 38
39/* function prototypes */
40extern int tenthdb2reg(int db);
41extern int dac_volume(unsigned int left, unsigned int right, bool deemph); 41extern int dac_volume(unsigned int left, unsigned int right, bool deemph);
42extern void dac_enable(bool enable); 42extern void dac_enable(bool enable);
43extern void dac_line_in(bool enable); 43extern void dac_line_in(bool enable);
44extern void dac_init(void); 44extern void dac_init(void);
45 45
46#endif 46#endif /* _DAC3550A_H_ */
47 47
48#endif
diff --git a/firmware/export/mas.h b/firmware/export/mas.h
deleted file mode 100644
index 9cbe970b94..0000000000
--- a/firmware/export/mas.h
+++ /dev/null
@@ -1,184 +0,0 @@
1/***************************************************************************
2 * __________ __ ___.
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
7 * \/ \/ \/ \/ \/
8 * $Id$
9 *
10 * Copyright (C) 2002 by Linus Nielsen Feltzing
11 *
12 * This program is free software; you can redistribute it and/or
13 * modify it under the terms of the GNU General Public License
14 * as published by the Free Software Foundation; either version 2
15 * of the License, or (at your option) any later version.
16 *
17 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
18 * KIND, either express or implied.
19 *
20 ****************************************************************************/
21#ifndef _MAS_H_
22#define _MAS_H_
23
24#define MAS_BANK_D0 0
25#define MAS_BANK_D1 1
26
27#define MAX_PEAK 0x8000
28
29/*
30 MAS I2C defs
31*/
32#if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F)
33#define MAS_ADR 0x3c
34#define MAS_DEV_WRITE (MAS_ADR | 0x00)
35#define MAS_DEV_READ (MAS_ADR | 0x01)
36
37#elif CONFIG_CODEC == MAS3507D
38#define MAS_ADR 0x3a
39#define MAS_DEV_WRITE (MAS_ADR | 0x00)
40#define MAS_DEV_READ (MAS_ADR | 0x01)
41#endif
42
43/* registers..*/
44#if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F)
45#define MAS_DATA_WRITE 0x68
46#define MAS_DATA_READ 0x69
47#define MAS_CODEC_WRITE 0x6c
48#define MAS_CODEC_READ 0x6d
49#define MAS_CONTROL 0x6a
50#define MAS_DCCF 0x76
51#define MAS_DCFR 0x77
52
53#elif CONFIG_CODEC == MAS3507D
54#define MAS_DATA_WRITE 0x68
55#define MAS_DATA_READ 0x69
56#define MAS_CONTROL 0x6a
57#endif
58
59/*
60 * MAS register
61 */
62#define MAS_REG_DCCF 0x8e
63#define MAS_REG_MUTE 0xaa
64#define MAS_REG_PIODATA 0xc8
65#define MAS_REG_StartUpConfig 0xe6
66#define MAS_REG_KPRESCALE 0xe7
67#if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F)
68#define MAS_REG_KMDB_SWITCH 0x21
69#define MAS_REG_KMDB_STR 0x22
70#define MAS_REG_KMDB_HAR 0x23
71#define MAS_REG_KMDB_FC 0x24
72#define MAS_REG_KLOUDNESS 0x1e
73#define MAS_REG_QPEAK_L 0x0a
74#define MAS_REG_QPEAK_R 0x0b
75#define MAS_REG_DQPEAK_L 0x0c
76#define MAS_REG_DQPEAK_R 0x0d
77#define MAS_REG_VOLUME_CONTROL 0x10
78#define MAS_REG_BALANCE 0x11
79#define MAS_REG_KAVC 0x12
80#define MAS_REG_KBASS 0x14
81#define MAS_REG_KTREBLE 0x15
82
83#elif CONFIG_CODEC == MAS3507D
84#define MAS_REG_KBASS 0x6b
85#define MAS_REG_KTREBLE 0x6f
86#endif
87
88/*
89 * MAS commands
90 */
91#if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F)
92#define MAS_CMD_READ_ANCILLARY 0x50
93#define MAS_CMD_FAST_PRG_DL 0x60
94#define MAS_CMD_READ_IC_VER 0x70
95#define MAS_CMD_READ_REG 0xa0
96#define MAS_CMD_WRITE_REG 0xb0
97#define MAS_CMD_READ_D0_MEM 0xc0
98#define MAS_CMD_READ_D1_MEM 0xd0
99#define MAS_CMD_WRITE_D0_MEM 0xe0
100#define MAS_CMD_WRITE_D1_MEM 0xf0
101
102#elif CONFIG_CODEC == MAS3507D
103#define MAS_CMD_READ_ANCILLARY 0x30
104#define MAS_CMD_WRITE_REG 0x90
105#define MAS_CMD_WRITE_D0_MEM 0xa0
106#define MAS_CMD_WRITE_D1_MEM 0xb0
107#define MAS_CMD_READ_REG 0xd0
108#define MAS_CMD_READ_D0_MEM 0xe0
109#define MAS_CMD_READ_D1_MEM 0xf0
110#endif
111
112/*
113 * MAS D0 memory cells (MAS3587F / MAS3539F)
114 */
115#if CONFIG_CODEC == MAS3587F
116#define MAS_D0_APP_SELECT 0x7f6
117#define MAS_D0_APP_RUNNING 0x7f7
118#define MAS_D0_ENCODER_CONTROL 0x7f0
119#define MAS_D0_IO_CONTROL_MAIN 0x7f1
120#define MAS_D0_INTERFACE_CONTROL 0x7f2
121#define MAS_D0_OFREQ_CONTROL 0x7f3
122#define MAS_D0_OUT_CLK_CONFIG 0x7f4
123#define MAS_D0_SPD_OUT_BITS 0x7f8
124#define MAS_D0_SOFT_MUTE 0x7f9
125#define MAS_D0_OUT_LL 0x7fc
126#define MAS_D0_OUT_LR 0x7fd
127#define MAS_D0_OUT_RL 0x7fe
128#define MAS_D0_OUT_RR 0x7ff
129#define MAS_D0_MPEG_FRAME_COUNT 0xfd0
130#define MAS_D0_MPEG_STATUS_1 0xfd1
131#define MAS_D0_MPEG_STATUS_2 0xfd2
132#define MAS_D0_CRC_ERROR_COUNT 0xfd3
133
134#elif CONFIG_CODEC == MAS3539F
135#define MAS_D0_APP_SELECT 0x34b
136#define MAS_D0_APP_RUNNING 0x34c
137/* no encoder :( */
138#define MAS_D0_IO_CONTROL_MAIN 0x346
139#define MAS_D0_INTERFACE_CONTROL 0x347
140#define MAS_D0_OFREQ_CONTROL 0x348
141#define MAS_D0_OUT_CLK_CONFIG 0x349
142#define MAS_D0_SPD_OUT_BITS 0x351
143#define MAS_D0_SOFT_MUTE 0x350
144#define MAS_D0_OUT_LL 0x354
145#define MAS_D0_OUT_LR 0x355
146#define MAS_D0_OUT_RL 0x356
147#define MAS_D0_OUT_RR 0x357
148#define MAS_D0_MPEG_FRAME_COUNT 0xfd0
149#define MAS_D0_MPEG_STATUS_1 0xfd1
150#define MAS_D0_MPEG_STATUS_2 0xfd2
151#define MAS_D0_CRC_ERROR_COUNT 0xfd3
152
153#elif CONFIG_CODEC == MAS3507D
154#define MAS_D0_MPEG_FRAME_COUNT 0x300
155#define MAS_D0_MPEG_STATUS_1 0x301
156#define MAS_D0_MPEG_STATUS_2 0x302
157#define MAS_D0_CRC_ERROR_COUNT 0x303
158#define MAS_D0_OUT_LL 0x7f8
159#define MAS_D0_OUT_LR 0x7f9
160#define MAS_D0_OUT_RL 0x7fa
161#define MAS_D0_OUT_RR 0x7fb
162
163#endif
164
165int mas_default_read(unsigned short *buf);
166int mas_run(unsigned short address);
167int mas_readmem(int bank, int addr, unsigned long* dest, int len);
168int mas_writemem(int bank, int addr, const unsigned long* src, int len);
169int mas_readreg(int reg);
170int mas_writereg(int reg, unsigned int val);
171void mas_reset(void);
172int mas_direct_config_read(unsigned char reg);
173int mas_direct_config_write(unsigned char reg, unsigned int val);
174int mas_codec_writereg(int reg, unsigned int val);
175int mas_codec_readreg(int reg);
176unsigned long mas_readver(void);
177
178#endif
179
180#if CONFIG_TUNER & S1A0903X01
181void mas_store_pllfreq(int freq);
182int mas_get_pllfreq(void);
183#endif
184
diff --git a/firmware/export/mas35xx.h b/firmware/export/mas35xx.h
index 1c50b7f02b..f75658fce1 100644
--- a/firmware/export/mas35xx.h
+++ b/firmware/export/mas35xx.h
@@ -25,27 +25,55 @@
25#define _MAS35XX_H 25#define _MAS35XX_H
26 26
27#include "config.h" 27#include "config.h"
28#include "mascodec.h"
28 29
29#if CONFIG_CODEC == MAS3507D 30#define MAS_BANK_D0 0
31#define MAS_BANK_D1 1
30 32
31#define VOLUME_MIN -780 33/* registers common to all MAS35xx */
32#define VOLUME_MAX 180 34#define MAS_REG_DCCF 0x8e
33#define AUDIOHW_CAPS (BASS_CAP | TREBLE_CAP | PRESCALER_CAP) 35#define MAS_REG_MUTE 0xaa
36#define MAS_REG_PIODATA 0xc8
37#define MAS_REG_StartUpConfig 0xe6
38#define MAS_REG_KPRESCALE 0xe7
34 39
35#else /* CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F */ 40#if CONFIG_CODEC == MAS3507D
36 41
37/* MAS3587F and MAS3539F handle clipping prevention internally so we do not need 42/* I2C defines */
38 * the prescaler -> CLIPPING_CAP 43#define MAS_ADR 0x3a
39 */ 44#define MAS_DEV_WRITE (MAS_ADR | 0x00)
45#define MAS_DEV_READ (MAS_ADR | 0x01)
40 46
41#define VOLUME_MIN -400 47/* MAS3507D registers */
42#define VOLUME_MAX 600 48#define MAS_DATA_WRITE 0x68
43#define AUDIOHW_CAPS (BASS_CAP | TREBLE_CAP | BALANCE_CAP | CLIPPING_CAP) 49#define MAS_DATA_READ 0x69
50#define MAS_CONTROL 0x6a
44 51
45#endif 52#define MAS_REG_KBASS 0x6b
53#define MAS_REG_KTREBLE 0x6f
46 54
55/* MAS3507D commands */
56#define MAS_CMD_READ_ANCILLARY 0x30
57#define MAS_CMD_WRITE_REG 0x90
58#define MAS_CMD_WRITE_D0_MEM 0xa0
59#define MAS_CMD_WRITE_D1_MEM 0xb0
60#define MAS_CMD_READ_REG 0xd0
61#define MAS_CMD_READ_D0_MEM 0xe0
62#define MAS_CMD_READ_D1_MEM 0xf0
47 63
48#if CONFIG_CODEC == MAS3507D 64/* MAS3507D D0 memmory cells */
65#define MAS_D0_MPEG_FRAME_COUNT 0x300
66#define MAS_D0_MPEG_STATUS_1 0x301
67#define MAS_D0_MPEG_STATUS_2 0x302
68#define MAS_D0_CRC_ERROR_COUNT 0x303
69#define MAS_D0_OUT_LL 0x7f8
70#define MAS_D0_OUT_LR 0x7f9
71#define MAS_D0_OUT_RL 0x7fa
72#define MAS_D0_OUT_RR 0x7fb
73
74#define VOLUME_MIN -780
75#define VOLUME_MAX 180
76#define AUDIOHW_CAPS (BASS_CAP | TREBLE_CAP | PRESCALER_CAP)
49 77
50static const unsigned int bass_table[] = 78static const unsigned int bass_table[] =
51{ 79{
@@ -136,6 +164,112 @@ static const unsigned int prescale_table[] =
136 0xe6800, /* 14dB */ 164 0xe6800, /* 14dB */
137 0xe9400 /* 15dB */ 165 0xe9400 /* 15dB */
138}; 166};
139#endif /*CONFIG_CODEC == MAS3507D*/ 167
168#else /* CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F */
169
170/* I2C defines */
171#define MAS_ADR 0x3c
172#define MAS_DEV_WRITE (MAS_ADR | 0x00)
173#define MAS_DEV_READ (MAS_ADR | 0x01)
174
175/* MAS3587F/MAS3539F registers */
176#define MAS_DATA_WRITE 0x68
177#define MAS_DATA_READ 0x69
178#define MAS_CODEC_WRITE 0x6c
179#define MAS_CODEC_READ 0x6d
180#define MAS_CONTROL 0x6a
181#define MAS_DCCF 0x76
182#define MAS_DCFR 0x77
183
184#define MAS_REG_KMDB_SWITCH 0x21
185#define MAS_REG_KMDB_STR 0x22
186#define MAS_REG_KMDB_HAR 0x23
187#define MAS_REG_KMDB_FC 0x24
188#define MAS_REG_KLOUDNESS 0x1e
189#define MAS_REG_QPEAK_L 0x0a
190#define MAS_REG_QPEAK_R 0x0b
191#define MAS_REG_DQPEAK_L 0x0c
192#define MAS_REG_DQPEAK_R 0x0d
193#define MAS_REG_VOLUME_CONTROL 0x10
194#define MAS_REG_BALANCE 0x11
195#define MAS_REG_KAVC 0x12
196#define MAS_REG_KBASS 0x14
197#define MAS_REG_KTREBLE 0x15
198
199/* MAS3587F/MAS3539F commands */
200#define MAS_CMD_READ_ANCILLARY 0x50
201#define MAS_CMD_FAST_PRG_DL 0x60
202#define MAS_CMD_READ_IC_VER 0x70
203#define MAS_CMD_READ_REG 0xa0
204#define MAS_CMD_WRITE_REG 0xb0
205#define MAS_CMD_READ_D0_MEM 0xc0
206#define MAS_CMD_READ_D1_MEM 0xd0
207#define MAS_CMD_WRITE_D0_MEM 0xe0
208#define MAS_CMD_WRITE_D1_MEM 0xf0
209
210/* MAS3587F D0 memory cells */
211#if CONFIG_CODEC == MAS3587F
212#define MAS_D0_APP_SELECT 0x7f6
213#define MAS_D0_APP_RUNNING 0x7f7
214#define MAS_D0_ENCODER_CONTROL 0x7f0
215#define MAS_D0_IO_CONTROL_MAIN 0x7f1
216#define MAS_D0_INTERFACE_CONTROL 0x7f2
217#define MAS_D0_OFREQ_CONTROL 0x7f3
218#define MAS_D0_OUT_CLK_CONFIG 0x7f4
219#define MAS_D0_SPD_OUT_BITS 0x7f8
220#define MAS_D0_SOFT_MUTE 0x7f9
221#define MAS_D0_OUT_LL 0x7fc
222#define MAS_D0_OUT_LR 0x7fd
223#define MAS_D0_OUT_RL 0x7fe
224#define MAS_D0_OUT_RR 0x7ff
225#define MAS_D0_MPEG_FRAME_COUNT 0xfd0
226#define MAS_D0_MPEG_STATUS_1 0xfd1
227#define MAS_D0_MPEG_STATUS_2 0xfd2
228#define MAS_D0_CRC_ERROR_COUNT 0xfd3
229
230/* MAS3539F D0 memory cells */
231#elif CONFIG_CODEC == MAS3539F
232#define MAS_D0_APP_SELECT 0x34b
233#define MAS_D0_APP_RUNNING 0x34c
234/* no encoder :( */
235#define MAS_D0_IO_CONTROL_MAIN 0x346
236#define MAS_D0_INTERFACE_CONTROL 0x347
237#define MAS_D0_OFREQ_CONTROL 0x348
238#define MAS_D0_OUT_CLK_CONFIG 0x349
239#define MAS_D0_SPD_OUT_BITS 0x351
240#define MAS_D0_SOFT_MUTE 0x350
241#define MAS_D0_OUT_LL 0x354
242#define MAS_D0_OUT_LR 0x355
243#define MAS_D0_OUT_RL 0x356
244#define MAS_D0_OUT_RR 0x357
245#define MAS_D0_MPEG_FRAME_COUNT 0xfd0
246#define MAS_D0_MPEG_STATUS_1 0xfd1
247#define MAS_D0_MPEG_STATUS_2 0xfd2
248#define MAS_D0_CRC_ERROR_COUNT 0xfd3
249#endif
250
251/* MAS3587F and MAS3539F handle clipping prevention internally so we do not need
252 * the prescaler -> CLIPPING_CAP
253 */
254
255#define VOLUME_MIN -400
256#define VOLUME_MAX 600
257#define AUDIOHW_CAPS (BASS_CAP | TREBLE_CAP | BALANCE_CAP | CLIPPING_CAP)
258
259#endif /* CONFIG_CODEC */
260
261/* Function prototypes */
262#if CONFIG_CODEC == MAS3587F || CONFIG_CODEC == MAS3539F
263extern void audiohw_set_loudness(int value);
264extern void audiohw_set_avc(int value);
265extern void audiohw_set_mdb_strength(int value);
266extern void audiohw_set_mdb_harmonics(int value);
267extern void audiohw_set_mdb_center(int value);
268extern void audiohw_set_mdb_shape(int value);
269extern void audiohw_set_mdb_enable(int value);
270extern void audiohw_set_superbass(int value);
271extern void audiohw_set_balance(int val);
272extern void audiohw_set_pitch(unsigned long val);
273#endif
140 274
141#endif /* _MAS35XX_H */ 275#endif /* _MAS35XX_H */
diff --git a/firmware/export/mascodec.h b/firmware/export/mascodec.h
new file mode 100644
index 0000000000..82a71e30c8
--- /dev/null
+++ b/firmware/export/mascodec.h
@@ -0,0 +1,43 @@
1/***************************************************************************
2 * __________ __ ___.
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
7 * \/ \/ \/ \/ \/
8 * $Id: mas.h 24154 2010-01-03 10:27:43Z Buschel $
9 *
10 * Copyright (C) 2002 by Linus Nielsen Feltzing
11 *
12 * This program is free software; you can redistribute it and/or
13 * modify it under the terms of the GNU General Public License
14 * as published by the Free Software Foundation; either version 2
15 * of the License, or (at your option) any later version.
16 *
17 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
18 * KIND, either express or implied.
19 *
20 ****************************************************************************/
21#ifndef _MASCODEC_H_
22#define _MASCODEC_H_
23
24int mas_default_read(unsigned short *buf);
25int mas_run(unsigned short address);
26int mas_readmem(int bank, int addr, unsigned long* dest, int len);
27int mas_writemem(int bank, int addr, const unsigned long* src, int len);
28int mas_readreg(int reg);
29int mas_writereg(int reg, unsigned int val);
30void mas_reset(void);
31int mas_direct_config_read(unsigned char reg);
32int mas_direct_config_write(unsigned char reg, unsigned int val);
33int mas_codec_writereg(int reg, unsigned int val);
34int mas_codec_readreg(int reg);
35unsigned long mas_readver(void);
36
37#endif
38
39#if CONFIG_TUNER & S1A0903X01
40void mas_store_pllfreq(int freq);
41int mas_get_pllfreq(void);
42#endif
43
diff --git a/firmware/sound.c b/firmware/sound.c
index bede18615a..82d5cdf47d 100644
--- a/firmware/sound.c
+++ b/firmware/sound.c
@@ -26,16 +26,17 @@
26#include "logf.h" 26#include "logf.h"
27#include "system.h" 27#include "system.h"
28#include "i2c.h" 28#include "i2c.h"
29#include "mas.h"
30#if (CONFIG_PLATFORM & PLATFORM_NATIVE) 29#if (CONFIG_PLATFORM & PLATFORM_NATIVE)
31#if CONFIG_CPU == PNX0101 30#if CONFIG_CPU == PNX0101
32#include "pnx0101.h" 31#include "pnx0101.h"
33#endif 32#endif /* CONFIG_CPU == PNX101 */
34#include "dac.h"
35#if CONFIG_CODEC == SWCODEC 33#if CONFIG_CODEC == SWCODEC
36#include "pcm.h" 34#include "pcm.h"
35#else /* !CONFIG_CODEC == HWCODEC */
36#include "mas35xx.h"
37#include "dac3550a.h"
37#endif 38#endif
38#endif 39#endif /* !SIMULATOR */
39 40
40/* TODO 41/* TODO
41 * find a nice way to handle 1.5db steps -> see wm8751 ifdef in sound_set_bass/treble 42 * find a nice way to handle 1.5db steps -> see wm8751 ifdef in sound_set_bass/treble
@@ -162,18 +163,6 @@ void sound_set_dsp_callback(int (*func)(int, intptr_t))
162} 163}
163#endif 164#endif
164 165
165#if (CONFIG_CODEC == MAS3507D) && !defined(SIMULATOR)
166/* convert tenth of dB volume (-780..+180) to dac3550 register value */
167static int tenthdb2reg(int db)
168{
169 if (db < -540) /* 3 dB steps */
170 return (db + 780) / 30;
171 else /* 1.5 dB steps */
172 return (db + 660) / 15;
173}
174#endif
175
176
177#if !defined(AUDIOHW_HAVE_CLIPPING) 166#if !defined(AUDIOHW_HAVE_CLIPPING)
178/* 167/*
179 * The prescaler compensates for any kind of boosts, to prevent clipping. 168 * The prescaler compensates for any kind of boosts, to prevent clipping.
@@ -282,12 +271,6 @@ static void set_prescaled_volume(void)
282} 271}
283#endif /* (CONFIG_CODEC == MAS3507D) || defined HAVE_UDA1380 */ 272#endif /* (CONFIG_CODEC == MAS3507D) || defined HAVE_UDA1380 */
284 273
285
286#if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F)
287static unsigned long mdb_shape_shadow = 0;
288static unsigned long loudness_shadow = 0;
289#endif
290
291void sound_set_volume(int value) 274void sound_set_volume(int value)
292{ 275{
293 if(!audio_is_initialized) 276 if(!audio_is_initialized)
@@ -620,86 +603,64 @@ void sound_set_loudness(int value)
620{ 603{
621 if(!audio_is_initialized) 604 if(!audio_is_initialized)
622 return; 605 return;
623 loudness_shadow = (loudness_shadow & 0x04) | 606
624 (MAX(MIN(value * 4, 0x44), 0) << 8); 607 audiohw_set_loudness(value);
625 mas_codec_writereg(MAS_REG_KLOUDNESS, loudness_shadow);
626} 608}
627 609
628void sound_set_avc(int value) 610void sound_set_avc(int value)
629{ 611{
630 if(!audio_is_initialized) 612 if(!audio_is_initialized)
631 return; 613 return;
632 int tmp;
633 614
634 static const uint16_t avc_vals[] = 615 audiohw_set_avc(value);
635 {
636 (0x1 << 8) | (0x8 << 12), /* 20ms */
637 (0x2 << 8) | (0x8 << 12), /* 2s */
638 (0x4 << 8) | (0x8 << 12), /* 4s */
639 (0x8 << 8) | (0x8 << 12), /* 8s */
640 };
641 switch (value) {
642 case 1:
643 case 2:
644 case 3:
645 case 4:
646 tmp = avc_vals[value -1];
647 break;
648 case -1: /* turn off and then turn on again to decay quickly */
649 tmp = mas_codec_readreg(MAS_REG_KAVC);
650 mas_codec_writereg(MAS_REG_KAVC, 0);
651 break;
652 default: /* off */
653 tmp = 0;
654 break;
655 }
656 mas_codec_writereg(MAS_REG_KAVC, tmp);
657} 616}
658 617
659void sound_set_mdb_strength(int value) 618void sound_set_mdb_strength(int value)
660{ 619{
661 if(!audio_is_initialized) 620 if(!audio_is_initialized)
662 return; 621 return;
663 mas_codec_writereg(MAS_REG_KMDB_STR, (value & 0x7f) << 8); 622
623 audiohw_set_mdb_strength(value);
664} 624}
665 625
666void sound_set_mdb_harmonics(int value) 626void sound_set_mdb_harmonics(int value)
667{ 627{
668 if(!audio_is_initialized) 628 if(!audio_is_initialized)
669 return; 629 return;
670 int tmp = value * 127 / 100; 630
671 mas_codec_writereg(MAS_REG_KMDB_HAR, (tmp & 0x7f) << 8); 631 audiohw_set_mdb_harmonics(value);
672} 632}
673 633
674void sound_set_mdb_center(int value) 634void sound_set_mdb_center(int value)
675{ 635{
676 if(!audio_is_initialized) 636 if(!audio_is_initialized)
677 return; 637 return;
678 mas_codec_writereg(MAS_REG_KMDB_FC, (value/10) << 8); 638
639 audiohw_set_mdb_center(value);
679} 640}
680 641
681void sound_set_mdb_shape(int value) 642void sound_set_mdb_shape(int value)
682{ 643{
683 if(!audio_is_initialized) 644 if(!audio_is_initialized)
684 return; 645 return;
685 mdb_shape_shadow = (mdb_shape_shadow & 0x02) | ((value/10) << 8); 646
686 mas_codec_writereg(MAS_REG_KMDB_SWITCH, mdb_shape_shadow); 647 audiohw_set_mdb_shape(value);
687} 648}
688 649
689void sound_set_mdb_enable(int value) 650void sound_set_mdb_enable(int value)
690{ 651{
691 if(!audio_is_initialized) 652 if(!audio_is_initialized)
692 return; 653 return;
693 mdb_shape_shadow = (mdb_shape_shadow & ~0x02) | (value?2:0); 654
694 mas_codec_writereg(MAS_REG_KMDB_SWITCH, mdb_shape_shadow); 655 audiohw_set_mdb_enable(value);
695} 656}
696 657
697void sound_set_superbass(int value) 658void sound_set_superbass(int value)
698{ 659{
699 if(!audio_is_initialized) 660 if(!audio_is_initialized)
700 return; 661 return;
701 loudness_shadow = (loudness_shadow & ~0x04) | (value?4:0); 662
702 mas_codec_writereg(MAS_REG_KLOUDNESS, loudness_shadow); 663 audiohw_set_superbass(value);
703} 664}
704#endif /* (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) */ 665#endif /* (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) */
705 666
@@ -847,11 +808,7 @@ void sound_set_pitch(int32_t pitch)
847 /* Calculate the new (bogus) frequency */ 808 /* Calculate the new (bogus) frequency */
848 val = 18432 * PITCH_SPEED_100 / pitch; 809 val = 18432 * PITCH_SPEED_100 / pitch;
849 810
850 mas_writemem(MAS_BANK_D0, MAS_D0_OFREQ_CONTROL, &val, 1); 811 audiohw_set_pitch(val);
851
852 /* We must tell the MAS that the frequency has changed.
853 * This will unfortunately cause a short silence. */
854 mas_writemem(MAS_BANK_D0, MAS_D0_IO_CONTROL_MAIN, &shadow_io_control_main, 1);
855 812
856 last_pitch = pitch; 813 last_pitch = pitch;
857 } 814 }
diff --git a/firmware/mp3_playback.c b/firmware/target/sh/archos/audio-archos.c
index 8e19829f56..e2d8b6f157 100644
--- a/firmware/mp3_playback.c
+++ b/firmware/target/sh/archos/audio-archos.c
@@ -28,12 +28,8 @@
28#include <kernel.h> 28#include <kernel.h>
29#include "mp3_playback.h" 29#include "mp3_playback.h"
30#include "sound.h" 30#include "sound.h"
31#ifndef SIMULATOR
32#include "i2c.h" 31#include "i2c.h"
33#include "mas.h"
34#include "dac.h"
35#include "system.h" 32#include "system.h"
36#endif
37#include "audiohw.h" 33#include "audiohw.h"
38 34
39/* hacking into mpeg.c, recording is still there */ 35/* hacking into mpeg.c, recording is still there */
@@ -56,14 +52,12 @@ extern unsigned shadow_codec_reg0;
56static bool paused; /* playback is paused */ 52static bool paused; /* playback is paused */
57static bool playing; /* We are playing an MP3 stream */ 53static bool playing; /* We are playing an MP3 stream */
58 54
59#ifndef SIMULATOR
60/* for measuring the play time */ 55/* for measuring the play time */
61static long playstart_tick; 56static long playstart_tick;
62static long cumulative_ticks; 57static long cumulative_ticks;
63 58
64/* the registered callback function to ask for more mp3 data */ 59/* the registered callback function to ask for more mp3 data */
65static void (*callback_for_more)(unsigned char**, size_t*); 60static void (*callback_for_more)(unsigned char**, size_t*);
66#endif /* #ifndef SIMULATOR */
67 61
68/* list of tracks in memory */ 62/* list of tracks in memory */
69#define MAX_ID3_TAGS (1<<4) /* Must be power of 2 */ 63#define MAX_ID3_TAGS (1<<4) /* Must be power of 2 */
@@ -77,8 +71,6 @@ bool audio_is_initialized = false;
77extern void playback_tick(void); 71extern void playback_tick(void);
78extern void rec_tick(void); 72extern void rec_tick(void);
79 73
80#ifndef SIMULATOR
81
82unsigned long mas_version_code; 74unsigned long mas_version_code;
83 75
84#if CONFIG_CODEC == MAS3507D 76#if CONFIG_CODEC == MAS3507D
@@ -133,7 +125,6 @@ static void postpone_dma_tick(void)
133} 125}
134#endif 126#endif
135 127
136
137#if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) 128#if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F)
138void demand_irq_enable(bool on) 129void demand_irq_enable(bool on)
139{ 130{
@@ -328,7 +319,6 @@ static void init_playback(void)
328 DEBUGF("MAS Decoding application started\n"); 319 DEBUGF("MAS Decoding application started\n");
329} 320}
330#endif /* #if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) */ 321#endif /* #if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) */
331#endif /* SIMULATOR */
332 322
333void mp3_init(int volume, int bass, int treble, int balance, int loudness, 323void mp3_init(int volume, int bass, int treble, int balance, int loudness,
334 int avc, int channel_config, int stereo_width, 324 int avc, int channel_config, int stereo_width,
@@ -336,23 +326,6 @@ void mp3_init(int volume, int bass, int treble, int balance, int loudness,
336 int mdb_center, int mdb_shape, bool mdb_enable, 326 int mdb_center, int mdb_shape, bool mdb_enable,
337 bool superbass) 327 bool superbass)
338{ 328{
339#ifdef SIMULATOR
340 (void)volume;
341 (void)bass;
342 (void)treble;
343 (void)balance;
344 (void)loudness;
345 (void)avc;
346 (void)channel_config;
347 (void)stereo_width;
348 (void)mdb_strength;
349 (void)mdb_harmonics;
350 (void)mdb_center;
351 (void)mdb_shape;
352 (void)mdb_enable;
353 (void)superbass;
354 audio_is_initialized = true;
355#else
356#if CONFIG_CODEC == MAS3507D 329#if CONFIG_CODEC == MAS3507D
357 unsigned long val; 330 unsigned long val;
358 (void)loudness; 331 (void)loudness;
@@ -469,7 +442,6 @@ void mp3_init(int volume, int bass, int treble, int balance, int loudness,
469 sound_set(SOUND_MDB_ENABLE, mdb_enable); 442 sound_set(SOUND_MDB_ENABLE, mdb_enable);
470 sound_set(SOUND_SUPERBASS, superbass); 443 sound_set(SOUND_SUPERBASS, superbass);
471#endif 444#endif
472#endif /* !SIMULATOR */
473 445
474 playing = false; 446 playing = false;
475 paused = true; 447 paused = true;
@@ -477,7 +449,6 @@ void mp3_init(int volume, int bass, int treble, int balance, int loudness,
477 449
478void mp3_shutdown(void) 450void mp3_shutdown(void)
479{ 451{
480#ifndef SIMULATOR
481#if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) 452#if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F)
482 unsigned long val = 1; 453 unsigned long val = 1;
483 mas_writemem(MAS_BANK_D0, MAS_D0_SOFT_MUTE, &val, 1); /* Mute */ 454 mas_writemem(MAS_BANK_D0, MAS_D0_SOFT_MUTE, &val, 1); /* Mute */
@@ -486,14 +457,10 @@ void mp3_shutdown(void)
486#if CONFIG_CODEC == MAS3507D 457#if CONFIG_CODEC == MAS3507D
487 dac_volume(0, 0, false); 458 dac_volume(0, 0, false);
488#endif 459#endif
489
490#endif
491} 460}
492 461
493/* new functions, to be exported to plugin API */ 462/* new functions, to be exported to plugin API */
494 463
495#ifndef SIMULATOR
496
497void mp3_play_init(void) 464void mp3_play_init(void)
498{ 465{
499#if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) 466#if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F)
@@ -594,25 +561,3 @@ unsigned char* mp3_get_pos(void)
594{ 561{
595 return (unsigned char*)SAR3; 562 return (unsigned char*)SAR3;
596} 563}
597#else /* #ifndef SIMULATOR */
598
599void mp3_play_pause(bool play)
600{
601 (void)play;
602}
603void mp3_play_stop(void)
604{
605}
606
607unsigned char* mp3_get_pos(void)
608{
609 return NULL;
610}
611
612void mp3_play_data(const unsigned char* start, int size,
613 void (*get_more)(unsigned char** start, size_t* size) /* callback fn */
614)
615{
616 (void)start; (void)size; (void)get_more;
617}
618#endif
diff --git a/firmware/drivers/mas.c b/firmware/target/sh/archos/mascodec-archos.c
index 4f384d3b98..3f932166eb 100644
--- a/firmware/drivers/mas.c
+++ b/firmware/target/sh/archos/mascodec-archos.c
@@ -5,7 +5,7 @@
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < 5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ 6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
7 * \/ \/ \/ \/ \/ 7 * \/ \/ \/ \/ \/
8 * $Id$ 8 * $Id: mas.c 18807 2008-10-14 11:12:20Z zagor $
9 * 9 *
10 * Copyright (C) 2002 by Linus Nielsen Feltzing 10 * Copyright (C) 2002 by Linus Nielsen Feltzing
11 * 11 *
@@ -23,7 +23,7 @@
23#include "sh7034.h" 23#include "sh7034.h"
24#include "i2c.h" 24#include "i2c.h"
25#include "debug.h" 25#include "debug.h"
26#include "mas.h" 26#include "mas35xx.h"
27#include "kernel.h" 27#include "kernel.h"
28#include "system.h" 28#include "system.h"
29#include "hwcompat.h" 29#include "hwcompat.h"
diff --git a/firmware/test/i2c/main.c b/firmware/test/i2c/main.c
index ad0f8efcbd..7a2ff49fcb 100644
--- a/firmware/test/i2c/main.c
+++ b/firmware/test/i2c/main.c
@@ -46,9 +46,9 @@
46 46
47#include "i2c.h" 47#include "i2c.h"
48 48
49#include "mas.h" 49#include "mas35xx.h"
50 50
51#include "dac.h" 51#include "dac3550a.h"
52 52
53#include "sh7034.h" 53#include "sh7034.h"
54 54
diff --git a/uisimulator/common/stubs.c b/uisimulator/common/stubs.c
index a9011b9aa5..e0372d2683 100644
--- a/uisimulator/common/stubs.c
+++ b/uisimulator/common/stubs.c
@@ -40,7 +40,113 @@ void audio_set_buffer_margin(int seconds)
40{ 40{
41 (void)seconds; 41 (void)seconds;
42} 42}
43#endif 43
44/* firmware/target/sh/archos/audio-archos.c */
45
46/* list of tracks in memory */
47#define MAX_ID3_TAGS (1<<4) /* Must be power of 2 */
48#define MAX_ID3_TAGS_MASK (MAX_ID3_TAGS - 1)
49
50static bool paused; /* playback is paused */
51static bool playing; /* We are playing an MP3 stream */
52
53bool audio_is_initialized = false;
54
55void mp3_init(int volume, int bass, int treble, int balance, int loudness,
56 int avc, int channel_config, int stereo_width,
57 int mdb_strength, int mdb_harmonics,
58 int mdb_center, int mdb_shape, bool mdb_enable,
59 bool superbass)
60{
61 (void)volume;
62 (void)bass;
63 (void)treble;
64 (void)balance;
65 (void)loudness;
66 (void)avc;
67 (void)channel_config;
68 (void)stereo_width;
69 (void)mdb_strength;
70 (void)mdb_harmonics;
71 (void)mdb_center;
72 (void)mdb_shape;
73 (void)mdb_enable;
74 (void)superbass;
75 audio_is_initialized = true;
76
77 playing = false;
78 paused = true;
79}
80
81void mp3_play_pause(bool play)
82{
83 (void)play;
84}
85
86void mp3_play_stop(void)
87{
88}
89
90unsigned char* mp3_get_pos(void)
91{
92 return NULL;
93}
94
95void mp3_play_data(const unsigned char* start, int size,
96 void (*get_more)(unsigned char** start, size_t* size) /* callback fn */
97)
98{
99 (void)start; (void)size; (void)get_more;
100}
101
102/* firmware/drivers/audio/mas35xx.c */
103#if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F)
104void audiohw_set_loudness(int value)
105{
106 (void)value;
107}
108
109void audiohw_set_avc(int value)
110{
111 (void)value;
112}
113
114void audiohw_set_mdb_strength(int value)
115{
116 (void)value;
117}
118
119void audiohw_set_mdb_harmonics(int value)
120{
121 (void)value;
122}
123
124void audiohw_set_mdb_center(int value)
125{
126 (void)value;
127}
128
129void audiohw_set_mdb_shape(int value)
130{
131 (void)value;
132}
133
134void audiohw_set_mdb_enable(int value)
135{
136 (void)value;
137}
138
139void audiohw_set_superbass(int value)
140{
141 (void)value;
142}
143
144void audiohw_set_pitch(unsigned long value)
145{
146 (void)value;
147}
148#endif /* (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) */
149#endif /* CODEC != SWCODEC */
44 150
45int fat_startsector(void) 151int fat_startsector(void)
46{ 152{