summaryrefslogtreecommitdiffstats
path: root/firmware
diff options
context:
space:
mode:
authorLinus Nielsen Feltzing <linus@haxx.se>2003-11-03 23:36:36 +0000
committerLinus Nielsen Feltzing <linus@haxx.se>2003-11-03 23:36:36 +0000
commitc22b411731b0a743382d7d7146e8ab59172ac764 (patch)
treeb338bae2b270f819219ace242001f5872d1815db /firmware
parent51d962f99b997aaed509c24daf15e25f8069fc47 (diff)
downloadrockbox-c22b411731b0a743382d7d7146e8ab59172ac764.tar.gz
rockbox-c22b411731b0a743382d7d7146e8ab59172ac764.zip
Patch #798050 by Leslie Donaldson, activates Line In on Player models
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@4008 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware')
-rw-r--r--firmware/drivers/dac.c27
-rw-r--r--firmware/drivers/dac.h5
-rw-r--r--firmware/mpeg.c2
3 files changed, 28 insertions, 6 deletions
diff --git a/firmware/drivers/dac.c b/firmware/drivers/dac.c
index c8a5414611..4212b322f0 100644
--- a/firmware/drivers/dac.c
+++ b/firmware/drivers/dac.c
@@ -24,6 +24,10 @@
#ifdef HAVE_DAC3550A
+static bool line_in_enabled = false;
+static bool dac_enabled = false;
+
+
int dac_volume(unsigned int left, unsigned int right, bool deemph)
{
int ret = 0;
@@ -54,12 +58,16 @@ int dac_volume(unsigned int left, unsigned int right, bool deemph)
** Bit6: 0 = 3V 1 = 5V
** Bit5: 0 = normal 1 = low power
** Bit4: 0 = AUX2 off 1 = AUX2 on
-** Bit3: 0 = AUX1 off 1 = AUX2 on
+** Bit3: 0 = AUX1 off 1 = AUX1 on
** Bit2: 0 = DAC off 1 = DAC on
** Bit1: 0 = stereo 1 = mono
** Bit0: 0 = normal right amp 1 = inverted right amp
******************************************************************/
-int dac_config(int value)
+/* dac_config is called once to initialize it. we will apply
+ our static settings because of the init flow.
+ dac_init -> dac_line_in -> mpeg_init -> dac_config
+*/
+static int dac_config(void)
{
int ret = 0;
unsigned char buf[2];
@@ -67,7 +75,8 @@ int dac_config(int value)
i2c_begin();
buf[0] = DAC_REG_WRITE | DAC_GCFG;
- buf[1] = value;
+ buf[1] = (dac_enabled ? 0x04 : 0) |
+ (line_in_enabled ? 0x08 : 0);
/* send write command */
if (i2c_write(DAC_DEV_WRITE,buf,2))
@@ -79,6 +88,18 @@ int dac_config(int value)
return ret;
}
+void dac_enable(bool enable)
+{
+ dac_enabled = enable;
+ dac_config();
+}
+
+void dac_line_in(bool enable)
+{
+ line_in_enabled = enable;
+ dac_config();
+}
+
void dac_init(void)
{
unsigned char buf[2];
diff --git a/firmware/drivers/dac.h b/firmware/drivers/dac.h
index ef5e4e992d..dc953c1420 100644
--- a/firmware/drivers/dac.h
+++ b/firmware/drivers/dac.h
@@ -36,8 +36,9 @@
#define DAC_AVOL 2
#define DAC_GCFG 3
-extern int dac_volume(unsigned int left, unsigned int right, bool deemph);
-extern int dac_config(int value);
+extern int dac_volume(unsigned int left, unsigned int right, bool deemph);
+extern void dac_enable(bool enable);
+extern void dac_line_in(bool enable);
extern void dac_init(void);
#endif
diff --git a/firmware/mpeg.c b/firmware/mpeg.c
index 24b3a68008..ef6972f3e4 100644
--- a/firmware/mpeg.c
+++ b/firmware/mpeg.c
@@ -3212,7 +3212,7 @@ void mpeg_init(int volume, int bass, int treble, int balance, int loudness,
mas_poll_start(1);
mas_writereg(MAS_REG_KPRESCALE, 0xe9400);
- dac_config(0x04); /* DAC on, all else off */
+ dac_enable(true);
mpeg_sound_channel_config(channel_config);
#endif