summaryrefslogtreecommitdiff
path: root/firmware/drivers
diff options
context:
space:
mode:
authorLinus Nielsen Feltzing <linus@haxx.se>2002-06-24 12:35:37 +0000
committerLinus Nielsen Feltzing <linus@haxx.se>2002-06-24 12:35:37 +0000
commite1cb054fa0bebd10b40156e4b0318d233ca11d8f (patch)
treef6442d6cd4d8e9add63769455c67db6ea2b7a03d /firmware/drivers
parentb38c2d996d339a68f33a8b681cce359a86f65bcf (diff)
downloadrockbox-e1cb054fa0bebd10b40156e4b0318d233ca11d8f.zip
rockbox-e1cb054fa0bebd10b40156e4b0318d233ca11d8f.tar.gz
rockbox-e1cb054fa0bebd10b40156e4b0318d233ca11d8f.tar.bz2
rockbox-e1cb054fa0bebd10b40156e4b0318d233ca11d8f.tar.xz
Now uses i2c_begin/end
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@1147 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware/drivers')
-rw-r--r--firmware/drivers/dac.c38
-rw-r--r--firmware/drivers/mas.c172
2 files changed, 127 insertions, 83 deletions
diff --git a/firmware/drivers/dac.c b/firmware/drivers/dac.c
index c968246..63695c3 100644
--- a/firmware/drivers/dac.c
+++ b/firmware/drivers/dac.c
@@ -22,23 +22,26 @@
int dac_volume(unsigned int volume)
{
- int i;
- unsigned char buf[16];
+ int ret = 0;
+ unsigned char buf[3];
+
+ i2c_begin();
if(volume > 0x38)
volume = 0x38;
- i=0;
- buf[i++] = DAC_REG_WRITE | DAC_AVOL;
- buf[i++] = (volume & 0x3f) | 0x40; /* Deemphasis ON */
- buf[i++] = volume & 0x3f;
+ buf[0] = DAC_REG_WRITE | DAC_AVOL;
+ buf[1] = (volume & 0x3f) | 0x40; /* Deemphasis ON */
+ buf[2] = volume & 0x3f;
/* send read command */
- if (i2c_write(DAC_DEV_WRITE,buf,i))
+ if (i2c_write(DAC_DEV_WRITE,buf,3))
{
- return -1;
+ ret = -1;
}
- return 0;
+
+ i2c_end();
+ return ret;
}
/******************************************************************
@@ -52,17 +55,20 @@ int dac_volume(unsigned int volume)
******************************************************************/
int dac_config(int value)
{
- int i;
- unsigned char buf[16];
+ int ret = 0;
+ unsigned char buf[2];
- i=0;
- buf[i++] = DAC_REG_WRITE | DAC_GCFG;
- buf[i++] = value;
+ i2c_begin();
+
+ buf[0] = DAC_REG_WRITE | DAC_GCFG;
+ buf[1] = value;
/* send read command */
- if (i2c_write(DAC_DEV_WRITE,buf,i))
+ if (i2c_write(DAC_DEV_WRITE,buf,2))
{
- return -1;
+ ret = -1;
}
+
+ i2c_end();
return 0;
}
diff --git a/firmware/drivers/mas.c b/firmware/drivers/mas.c
index 86a188d..c8082c8 100644
--- a/firmware/drivers/mas.c
+++ b/firmware/drivers/mas.c
@@ -20,10 +20,14 @@
#include "debug.h"
#include "mas.h"
+static int mas_devread(unsigned long *dest, int len);
+
int mas_default_read(unsigned short *buf)
{
unsigned char *dest = (unsigned char *)buf;
int ret = 0;
+
+ i2c_begin();
i2c_start();
i2c_outb(MAS_DEV_WRITE);
@@ -47,59 +51,69 @@ int mas_default_read(unsigned short *buf)
i2c_stop();
+ i2c_end();
return ret;
}
int mas_run(unsigned short address)
{
- int i;
- unsigned char buf[16];
+ int ret = 0;
+ unsigned char buf[3];
- i=0;
- buf[i++] = MAS_DATA_WRITE;
- buf[i++] = address << 8;
- buf[i++] = address & 0xff;
+ i2c_begin();
+
+ buf[0] = MAS_DATA_WRITE;
+ buf[1] = address << 8;
+ buf[2] = address & 0xff;
/* send run command */
- if (i2c_write(MAS_DEV_WRITE,buf,i))
+ if (i2c_write(MAS_DEV_WRITE,buf,3))
{
- return -1;
+ ret = -1;
}
- return 0;
+ i2c_end();
+ return ret;
}
/* note: 'len' is number of 32-bit words, not number of bytes! */
int mas_readmem(int bank, int addr, unsigned long* dest, int len)
{
- int i;
- unsigned char buf[16];
+ int ret = 0;
+ unsigned char buf[7];
- i=0;
- buf[i++] = MAS_DATA_WRITE;
- buf[i++] = bank?MAS_CMD_READ_D1_MEM:MAS_CMD_READ_D0_MEM;
- buf[i++] = 0x00;
- buf[i++] = (len & 0xff00) >> 8;
- buf[i++] = len & 0xff;
- buf[i++] = (addr & 0xff00) >> 8;
- buf[i++] = addr & 0xff;
+ i2c_begin();
+
+ buf[0] = MAS_DATA_WRITE;
+ buf[1] = bank?MAS_CMD_READ_D1_MEM:MAS_CMD_READ_D0_MEM;
+ buf[2] = 0x00;
+ buf[3] = (len & 0xff00) >> 8;
+ buf[4] = len & 0xff;
+ buf[5] = (addr & 0xff00) >> 8;
+ buf[6] = addr & 0xff;
/* send read command */
- if (i2c_write(MAS_DEV_WRITE,buf,i))
+ if (i2c_write(MAS_DEV_WRITE,buf,7))
{
- return -1;
+ ret = -1;
}
- return mas_devread(dest, len);
+ ret = mas_devread(dest, len);
+
+ i2c_end();
+ return ret;
}
/* note: 'len' is number of 32-bit words, not number of bytes! */
int mas_writemem(int bank, int addr, unsigned long* src, int len)
{
+ int ret = 0;
int i, j;
unsigned char buf[60];
unsigned char* ptr = (unsigned char*)src;
+ i2c_begin();
+
i=0;
buf[i++] = MAS_DATA_WRITE;
buf[i++] = bank?MAS_CMD_WRITE_D1_MEM:MAS_CMD_WRITE_D0_MEM;
@@ -128,62 +142,74 @@ int mas_writemem(int bank, int addr, unsigned long* src, int len)
/* send write command */
if (i2c_write(MAS_DEV_WRITE,buf,i))
{
- return -1;
+ ret = -1;
}
- return 0;
+ i2c_end();
+ return ret;
}
int mas_readreg(int reg)
{
- int i;
+ int ret = 0;
unsigned char buf[16];
unsigned long value;
- i=0;
- buf[i++] = MAS_DATA_WRITE;
- buf[i++] = MAS_CMD_READ_REG | (reg >> 4);
- buf[i++] = (reg & 0x0f) << 4;
+ i2c_begin();
+
+ buf[0] = MAS_DATA_WRITE;
+ buf[1] = MAS_CMD_READ_REG | (reg >> 4);
+ buf[2] = (reg & 0x0f) << 4;
/* send read command */
- if (i2c_write(MAS_DEV_WRITE,buf,i))
+ if (i2c_write(MAS_DEV_WRITE,buf,3))
{
- return -1;
+ ret = -1;
}
-
- if(mas_devread(&value, 1))
+ else
{
- return -2;
+ if(mas_devread(&value, 1))
+ {
+ ret = -2;
+ }
+ else
+ {
+ ret = value;
+ }
}
- return value;
+ i2c_end();
+ return ret;
}
int mas_writereg(int reg, unsigned int val)
{
- int i;
- unsigned char buf[16];
+ int ret = 0;
+ unsigned char buf[5];
- i=0;
- buf[i++] = MAS_DATA_WRITE;
- buf[i++] = MAS_CMD_WRITE_REG | (reg >> 4);
- buf[i++] = ((reg & 0x0f) << 4) | (val & 0x0f);
- buf[i++] = (val >> 12) & 0xff;
- buf[i++] = (val >> 4) & 0xff;
+ i2c_begin();
+
+ buf[0] = MAS_DATA_WRITE;
+ buf[1] = MAS_CMD_WRITE_REG | (reg >> 4);
+ buf[2] = ((reg & 0x0f) << 4) | (val & 0x0f);
+ buf[3] = (val >> 12) & 0xff;
+ buf[4] = (val >> 4) & 0xff;
/* send write command */
- if (i2c_write(MAS_DEV_WRITE,buf,i))
+ if (i2c_write(MAS_DEV_WRITE,buf,5))
{
- return -1;
+ ret = -1;
}
- return 0;
+
+ i2c_end();
+ return ret;
}
/* note: 'len' is number of 32-bit words, not number of bytes! */
-int mas_devread(unsigned long *dest, int len)
+static int mas_devread(unsigned long *dest, int len)
{
- unsigned char* ptr = (unsigned char*)dest;
int ret = 0;
+ unsigned char* ptr = (unsigned char*)dest;
int i;
/* handle read-back */
@@ -236,9 +262,11 @@ int mas_devread(unsigned long *dest, int len)
#ifdef ARCHOS_RECORDER
int mas_direct_config_read(unsigned char reg)
{
- unsigned char tmp[2];
int ret = 0;
+ unsigned char tmp[2];
+ i2c_begin();
+
i2c_start();
i2c_outb(MAS_DEV_WRITE);
if (i2c_getack()) {
@@ -262,13 +290,17 @@ int mas_direct_config_read(unsigned char reg)
i2c_stop();
+ i2c_end();
return ret;
}
int mas_direct_config_write(unsigned char reg, unsigned int val)
{
+ int ret = 0;
unsigned char buf[3];
+ i2c_begin();
+
buf[0] = reg;
buf[1] = (val >> 8) & 0xff;
buf[2] = val & 0xff;
@@ -276,45 +308,50 @@ int mas_direct_config_write(unsigned char reg, unsigned int val)
/* send write command */
if (i2c_write(MAS_DEV_WRITE,buf,3))
{
- return -1;
+ ret = -1;
}
+
+ i2c_end();
return 0;
}
int mas_codec_writereg(int reg, unsigned int val)
{
- int i;
- unsigned char buf[16];
+ int ret = 0;
+ unsigned char buf[5];
- i=0;
- buf[i++] = MAS_CODEC_WRITE;
- buf[i++] = (reg >> 8) & 0xff;
- buf[i++] = reg & 0xff;
- buf[i++] = (val >> 8) & 0xff;
- buf[i++] = val & 0xff;
+ i2c_begin();
+
+ buf[0] = MAS_CODEC_WRITE;
+ buf[1] = (reg >> 8) & 0xff;
+ buf[2] = reg & 0xff;
+ buf[3] = (val >> 8) & 0xff;
+ buf[4] = val & 0xff;
/* send write command */
- if (i2c_write(MAS_DEV_WRITE,buf,i))
+ if (i2c_write(MAS_DEV_WRITE,buf,5))
{
- return -1;
+ ret = -1;
}
- return 0;
+
+ i2c_end();
+ return ret;
}
int mas_codec_readreg(int reg)
{
- int i;
int ret = 0;
unsigned char buf[16];
unsigned char tmp[2];
- i=0;
- buf[i++] = MAS_CODEC_WRITE;
- buf[i++] = (reg >> 8) & 0xff;
- buf[i++] = reg & 0xff;
+ i2c_begin();
+
+ buf[0] = MAS_CODEC_WRITE;
+ buf[1] = (reg >> 8) & 0xff;
+ buf[2] = reg & 0xff;
/* send read command */
- if (i2c_write(MAS_DEV_WRITE,buf,i))
+ if (i2c_write(MAS_DEV_WRITE,buf,3))
{
return -1;
}
@@ -342,6 +379,7 @@ int mas_codec_readreg(int reg)
i2c_stop();
+ i2c_end();
return ret;
}
#endif