diff options
author | Barry Wardell <rockbox@barrywardell.net> | 2007-11-10 19:14:01 +0000 |
---|---|---|
committer | Barry Wardell <rockbox@barrywardell.net> | 2007-11-10 19:14:01 +0000 |
commit | 0d8111cb399cf9db7a25d4a5ddc867a22de1a5bc (patch) | |
tree | d0ba66a558f455a7015c65469521b02abc8b2a1a | |
parent | a677678e3196a1981d0ff60cd1f756b985abaaeb (diff) | |
download | rockbox-0d8111cb399cf9db7a25d4a5ddc867a22de1a5bc.tar.gz rockbox-0d8111cb399cf9db7a25d4a5ddc867a22de1a5bc.zip |
Split radio i2c drivers into target tree where they belong. No changes to binaries produced.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@15558 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r-- | firmware/SOURCES | 7 | ||||
-rw-r--r-- | firmware/target/coldfire/iaudio/x5/fmradio_i2c-x5.c | 37 | ||||
-rw-r--r-- | firmware/target/coldfire/iriver/fmradio_i2c-iriver.c (renamed from firmware/drivers/fmradio_i2c.c) | 195 | ||||
-rw-r--r-- | firmware/target/sh/archos/ondio/fmradio_i2c-ondio.c | 197 |
4 files changed, 242 insertions, 194 deletions
diff --git a/firmware/SOURCES b/firmware/SOURCES index 94b98979ce..24a6db9fa6 100644 --- a/firmware/SOURCES +++ b/firmware/SOURCES @@ -163,7 +163,6 @@ drivers/fmradio.c drivers/tuner/s1a0903x01.c #endif /* (CONFIG_TUNER & S1A0903X01) */ #if (CONFIG_TUNER & TEA5767) -drivers/fmradio_i2c.c drivers/tuner/tea5767.c #endif /* (CONFIG_TUNER & TEA5767) */ #endif /*SIMULATOR */ @@ -406,6 +405,9 @@ target/sh/archos/ondio/button-ondio.c target/sh/archos/ondio/power-ondio.c target/sh/archos/ondio/powermgmt-ondio.c target/sh/archos/ondio/usb-ondio.c +#if (CONFIG_TUNER & TEA5767) +target/sh/archos/ondio/fmradio_i2c-ondio.c +#endif #endif /* SIMULATOR */ #endif /* ARCHOS_ONDIOFM || ARCHOS_ONDIOFM */ @@ -459,6 +461,7 @@ target/coldfire/iaudio/usb-iaudio.c target/coldfire/iaudio/x5/backlight-x5.c target/coldfire/iaudio/x5/button-x5.c target/coldfire/iaudio/x5/ds2411-x5.c +target/coldfire/iaudio/x5/fmradio_i2c-x5.c target/coldfire/iaudio/x5/lcd-as-x5.S target/coldfire/iaudio/x5/lcd-x5.c target/coldfire/iaudio/x5/m5636-x5.c @@ -505,6 +508,7 @@ target/coldfire/pcf50606-coldfire.c target/coldfire/iriver/ata-iriver.c target/coldfire/iriver/lcd-remote-iriver.c target/coldfire/iriver/system-iriver.c +target/coldfire/iriver/fmradio_i2c-iriver.c target/coldfire/iriver/h300/sw_i2c-h300.c target/coldfire/iriver/h300/adc-h300.c target/coldfire/iriver/h300/backlight-h300.c @@ -527,6 +531,7 @@ target/coldfire/ata-as-coldfire.S target/coldfire/iriver/ata-iriver.c target/coldfire/iriver/lcd-remote-iriver.c target/coldfire/iriver/system-iriver.c +target/coldfire/iriver/fmradio_i2c-iriver.c target/coldfire/iriver/h100/sw_i2c-h100.c target/coldfire/iriver/h100/adc-h100.c target/coldfire/iriver/h100/backlight-h100.c diff --git a/firmware/target/coldfire/iaudio/x5/fmradio_i2c-x5.c b/firmware/target/coldfire/iaudio/x5/fmradio_i2c-x5.c new file mode 100644 index 0000000000..6ee670f9fe --- /dev/null +++ b/firmware/target/coldfire/iaudio/x5/fmradio_i2c-x5.c @@ -0,0 +1,37 @@ +/*************************************************************************** + * __________ __ ___. + * Open \______ \ ____ ____ | | _\_ |__ _______ ___ + * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / + * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < + * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ + * \/ \/ \/ \/ \/ + * $Id:$ + * Physical interface of the Philips TEA5767 in iAudio x5 + * + * Copyright (C) 2002 by Linus Nielsen Feltzing + * + * All files in this archive are subject to the GNU General Public License. + * See the file COPYING in the source tree root for full license agreement. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + ****************************************************************************/ +#include "config.h" + +#if (CONFIG_TUNER & TEA5767) + +#include "i2c-coldfire.h" + +int fmradio_i2c_write(unsigned char address, const unsigned char* buf, + int count) +{ + return i2c_write(I2C_IFACE_0, address, buf, count); +} + +int fmradio_i2c_read(unsigned char address, unsigned char* buf, int count) +{ + return i2c_read(I2C_IFACE_0, address, buf, count); +} + +#endif diff --git a/firmware/drivers/fmradio_i2c.c b/firmware/target/coldfire/iriver/fmradio_i2c-iriver.c index 9f890ca34a..7c431dae2b 100644 --- a/firmware/drivers/fmradio_i2c.c +++ b/firmware/target/coldfire/iriver/fmradio_i2c-iriver.c @@ -5,8 +5,8 @@ * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ * \/ \/ \/ \/ \/ - * $Id$ - * Physical interface of the Philips TEA5767 in Archos Ondio + * $Id:$ + * Physical interface of the Philips TEA5767 in iriver H100/H300 series * * Copyright (C) 2002 by Linus Nielsen Feltzing * @@ -19,29 +19,10 @@ ****************************************************************************/ #include "config.h" #include "cpu.h" -#include "kernel.h" -#include "thread.h" #include "logf.h" #include "system.h" -#include "string.h" #if (CONFIG_TUNER & TEA5767) -#if (CONFIG_I2C == I2C_COLDFIRE) - -#ifdef IAUDIO_X5 -#include "i2c-coldfire.h" - -int fmradio_i2c_write(unsigned char address, const unsigned char* buf, - int count) -{ - return i2c_write(I2C_IFACE_0, address, buf, count); -} - -int fmradio_i2c_read(unsigned char address, unsigned char* buf, int count) -{ - return i2c_read(I2C_IFACE_0, address, buf, count); -} -#else /* cute little functions, atomic read-modify-write */ /* SDA is GPIO1,23 */ @@ -257,177 +238,5 @@ int fmradio_i2c_read(int address, unsigned char* buf, int count) fmradio_i2c_stop(); return x; } -#endif /* ! IAUDIO_X5 */ -#else -/* cute little functions, atomic read-modify-write */ -/* SDA is PB4 */ -#define SDA_LO and_b(~0x10, &PBDRL) -#define SDA_HI or_b(0x10, &PBDRL) -#define SDA_INPUT and_b(~0x10, &PBIORL) -#define SDA_OUTPUT or_b(0x10, &PBIORL) -#define SDA (PBDR & 0x0010) - -/* SCL is PB1 */ -#define SCL_INPUT and_b(~0x02, &PBIORL) -#define SCL_OUTPUT or_b(0x02, &PBIORL) -#define SCL_LO and_b(~0x02, &PBDRL) -#define SCL_HI or_b(0x02, &PBDRL) -#define SCL (PBDR & 0x0002) - -/* arbitrary delay loop */ -#define DELAY do { int _x; for(_x=0;_x<20;_x++);} while (0) - -static void fmradio_i2c_start(void) -{ - SDA_OUTPUT; - SDA_HI; - SCL_HI; - SDA_LO; - DELAY; - SCL_LO; -} - -static void fmradio_i2c_stop(void) -{ - SDA_LO; - SCL_HI; - DELAY; - SDA_HI; -} - - -static void fmradio_i2c_ack(bool nack) -{ - /* Here's the deal. The slave is slow, and sometimes needs to wait - before it can receive the acknowledge. Therefore it forces the clock - low until it is ready. We need to poll the clock line until it goes - high before we release the ack. */ - - SCL_LO; /* Set the clock low */ - - if (nack) - SDA_HI; - else - SDA_LO; - - SCL_INPUT; /* Set the clock to input */ - while(!SCL) /* and wait for the slave to release it */ - sleep_thread(0); - - DELAY; - SCL_OUTPUT; - SCL_LO; -} -static int fmradio_i2c_getack(void) -{ - int ret = 1; - - /* Here's the deal. The slave is slow, and sometimes needs to wait - before it can send the acknowledge. Therefore it forces the clock - low until it is ready. We need to poll the clock line until it goes - high before we read the ack. */ - - SDA_INPUT; /* And set to input */ - SCL_INPUT; /* Set the clock to input */ - while(!SCL) /* and wait for the slave to release it */ - sleep_thread(0); - - if (SDA) - /* ack failed */ - ret = 0; - - SCL_OUTPUT; - SCL_LO; - SDA_HI; - SDA_OUTPUT; - return ret; -} - -static void fmradio_i2c_outb(unsigned char byte) -{ - int i; - - /* clock out each bit, MSB first */ - for ( i=0x80; i; i>>=1 ) { - if ( i & byte ) - { - SDA_HI; - } - else - { - SDA_LO; - } - SCL_HI; - SCL_LO; - } - - SDA_HI; -} - -static unsigned char fmradio_i2c_inb(void) -{ - int i; - unsigned char byte = 0; - - /* clock in each bit, MSB first */ - for ( i=0x80; i; i>>=1 ) { - SDA_INPUT; /* And set to input */ - SCL_HI; - if ( SDA ) - byte |= i; - SCL_LO; - SDA_OUTPUT; - } - - return byte; -} - -int fmradio_i2c_write(int address, const unsigned char* buf, int count) -{ - int i,x=0; - - fmradio_i2c_start(); - fmradio_i2c_outb(address & 0xfe); - if (fmradio_i2c_getack()) - { - for (i=0; i<count; i++) - { - fmradio_i2c_outb(buf[i]); - if (!fmradio_i2c_getack()) - { - x=-2; - break; - } - } - } - else - { - logf("fmradio_i2c_write() - no ack\n"); - x=-1; - } - fmradio_i2c_stop(); - return x; -} - -int fmradio_i2c_read(int address, unsigned char* buf, int count) -{ - int i,x=0; - - fmradio_i2c_start(); - fmradio_i2c_outb(address | 1); - if (fmradio_i2c_getack()) { - for (i=count; i>0; i--) - { - *buf++ = fmradio_i2c_inb(); - fmradio_i2c_ack(i == 1); - } - } - else - x=-1; - fmradio_i2c_stop(); - return x; -} - -#endif #endif diff --git a/firmware/target/sh/archos/ondio/fmradio_i2c-ondio.c b/firmware/target/sh/archos/ondio/fmradio_i2c-ondio.c new file mode 100644 index 0000000000..f62797480a --- /dev/null +++ b/firmware/target/sh/archos/ondio/fmradio_i2c-ondio.c @@ -0,0 +1,197 @@ +/*************************************************************************** + * __________ __ ___. + * Open \______ \ ____ ____ | | _\_ |__ _______ ___ + * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / + * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < + * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ + * \/ \/ \/ \/ \/ + * $Id:$ + * Physical interface of the Philips TEA5767 in Archos Ondio + * + * Copyright (C) 2002 by Linus Nielsen Feltzing + * + * All files in this archive are subject to the GNU General Public License. + * See the file COPYING in the source tree root for full license agreement. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + ****************************************************************************/ +#include "config.h" +#include "cpu.h" +#include "logf.h" +#include "system.h" + +#if (CONFIG_TUNER & TEA5767) + +/* cute little functions, atomic read-modify-write */ +/* SDA is PB4 */ +#define SDA_LO and_b(~0x10, &PBDRL) +#define SDA_HI or_b(0x10, &PBDRL) +#define SDA_INPUT and_b(~0x10, &PBIORL) +#define SDA_OUTPUT or_b(0x10, &PBIORL) +#define SDA (PBDR & 0x0010) + +/* SCL is PB1 */ +#define SCL_INPUT and_b(~0x02, &PBIORL) +#define SCL_OUTPUT or_b(0x02, &PBIORL) +#define SCL_LO and_b(~0x02, &PBDRL) +#define SCL_HI or_b(0x02, &PBDRL) +#define SCL (PBDR & 0x0002) + +/* arbitrary delay loop */ +#define DELAY do { int _x; for(_x=0;_x<20;_x++);} while (0) + +static void fmradio_i2c_start(void) +{ + SDA_OUTPUT; + SDA_HI; + SCL_HI; + SDA_LO; + DELAY; + SCL_LO; +} + +static void fmradio_i2c_stop(void) +{ + SDA_LO; + SCL_HI; + DELAY; + SDA_HI; +} + + +static void fmradio_i2c_ack(bool nack) +{ + /* Here's the deal. The slave is slow, and sometimes needs to wait + before it can receive the acknowledge. Therefore it forces the clock + low until it is ready. We need to poll the clock line until it goes + high before we release the ack. */ + + SCL_LO; /* Set the clock low */ + + if (nack) + SDA_HI; + else + SDA_LO; + + SCL_INPUT; /* Set the clock to input */ + while(!SCL) /* and wait for the slave to release it */ + sleep_thread(0); + + DELAY; + SCL_OUTPUT; + SCL_LO; +} + +static int fmradio_i2c_getack(void) +{ + int ret = 1; + + /* Here's the deal. The slave is slow, and sometimes needs to wait + before it can send the acknowledge. Therefore it forces the clock + low until it is ready. We need to poll the clock line until it goes + high before we read the ack. */ + + SDA_INPUT; /* And set to input */ + SCL_INPUT; /* Set the clock to input */ + while(!SCL) /* and wait for the slave to release it */ + sleep_thread(0); + + if (SDA) + /* ack failed */ + ret = 0; + + SCL_OUTPUT; + SCL_LO; + SDA_HI; + SDA_OUTPUT; + return ret; +} + +static void fmradio_i2c_outb(unsigned char byte) +{ + int i; + + /* clock out each bit, MSB first */ + for ( i=0x80; i; i>>=1 ) { + if ( i & byte ) + { + SDA_HI; + } + else + { + SDA_LO; + } + SCL_HI; + SCL_LO; + } + + SDA_HI; +} + +static unsigned char fmradio_i2c_inb(void) +{ + int i; + unsigned char byte = 0; + + /* clock in each bit, MSB first */ + for ( i=0x80; i; i>>=1 ) { + SDA_INPUT; /* And set to input */ + SCL_HI; + if ( SDA ) + byte |= i; + SCL_LO; + SDA_OUTPUT; + } + + return byte; +} + +int fmradio_i2c_write(int address, const unsigned char* buf, int count) +{ + int i,x=0; + + fmradio_i2c_start(); + fmradio_i2c_outb(address & 0xfe); + if (fmradio_i2c_getack()) + { + for (i=0; i<count; i++) + { + fmradio_i2c_outb(buf[i]); + if (!fmradio_i2c_getack()) + { + x=-2; + break; + } + } + } + else + { + logf("fmradio_i2c_write() - no ack\n"); + x=-1; + } + fmradio_i2c_stop(); + return x; +} + +int fmradio_i2c_read(int address, unsigned char* buf, int count) +{ + int i,x=0; + + fmradio_i2c_start(); + fmradio_i2c_outb(address | 1); + if (fmradio_i2c_getack()) { + for (i=count; i>0; i--) + { + *buf++ = fmradio_i2c_inb(); + fmradio_i2c_ack(i == 1); + } + } + else + x=-1; + fmradio_i2c_stop(); + return x; +} + +#endif |