From fd4bed35c14b5602f86bbc5365f22f4b5dfe5597 Mon Sep 17 00:00:00 2001 From: jethead71 Date: Tue, 18 Nov 2008 02:19:50 +0000 Subject: [PATCH] MC13783 cleanup. Remove functions proving themselves not so useful and add mc13783_write_masked which is pretty useful. Add an error code definition for invalid data. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@19132 a1c6a512-1295-4272-9138-f99709370657 --- firmware/export/mc13783.h | 4 +- .../target/arm/imx31/gigabeat-s/mc13783-imx31.c | 62 +++++++--------------- 2 files changed, 20 insertions(+), 46 deletions(-) diff --git a/firmware/export/mc13783.h b/firmware/export/mc13783.h index eede1cd30..32b788544 100644 --- a/firmware/export/mc13783.h +++ b/firmware/export/mc13783.h @@ -1281,12 +1281,12 @@ uint32_t mc13783_set(unsigned address, uint32_t bits); uint32_t mc13783_clear(unsigned address, uint32_t bits); int mc13783_write(unsigned address, uint32_t data); uint32_t mc13783_write_masked(unsigned address, uint32_t data, uint32_t mask); -int mc13783_write_multiple(unsigned start, const uint32_t *buffer, int count); int mc13783_write_regset(const unsigned char *regs, const uint32_t *data, int count); uint32_t mc13783_read(unsigned address); -int mc13783_read_multiple(unsigned start, uint32_t *buffer, int count); int mc13783_read_regset(const unsigned char *regs, uint32_t *buffer, int count); +#define MC13783_DATA_ERROR UINT32_MAX + /* Statically-registered event enable/disable */ enum mc13783_event_sets { diff --git a/firmware/target/arm/imx31/gigabeat-s/mc13783-imx31.c b/firmware/target/arm/imx31/gigabeat-s/mc13783-imx31.c index 8cd2ea87f..c185994bf 100644 --- a/firmware/target/arm/imx31/gigabeat-s/mc13783-imx31.c +++ b/firmware/target/arm/imx31/gigabeat-s/mc13783-imx31.c @@ -210,7 +210,7 @@ uint32_t mc13783_set(unsigned address, uint32_t bits) uint32_t data = mc13783_read(address); - if (data != (uint32_t)-1) + if (data != MC13783_DATA_ERROR) mc13783_write(address, data | bits); spi_unlock(&mc13783_spi); @@ -224,7 +224,7 @@ uint32_t mc13783_clear(unsigned address, uint32_t bits) uint32_t data = mc13783_read(address); - if (data != (uint32_t)-1) + if (data != MC13783_DATA_ERROR) mc13783_write(address, data & ~bits); spi_unlock(&mc13783_spi); @@ -251,29 +251,25 @@ int mc13783_write(unsigned address, uint32_t data) return 1 - xfer.count; } -int mc13783_write_multiple(unsigned start, const uint32_t *data, int count) +uint32_t mc13783_write_masked(unsigned address, uint32_t data, uint32_t mask) { - int i; - struct spi_transfer xfer; - uint32_t packets[MC13783_NUM_REGS]; + uint32_t old; - if (start + count > MC13783_NUM_REGS) - return -1; + spi_lock(&mc13783_spi); + + old = mc13783_read(address); - /* Prepare payload */ - for (i = 0; i < count; i++, start++) + if (old != MC13783_DATA_ERROR) { - packets[i] = (1 << 31) | (start << 25) | (data[i] & 0xffffff); + data = (old & ~mask) | (data & mask); + + if (mc13783_write(address, data) != 1) + old = MC13783_DATA_ERROR; } - xfer.txbuf = packets; - xfer.rxbuf = packets; - xfer.count = count; - - if (!spi_transfer(&mc13783_spi, &xfer)) - return -1; + spi_unlock(&mc13783_spi); - return count - xfer.count; + return old; } int mc13783_write_regset(const unsigned char *regs, const uint32_t *data, @@ -283,7 +279,7 @@ int mc13783_write_regset(const unsigned char *regs, const uint32_t *data, struct spi_transfer xfer; uint32_t packets[MC13783_NUM_REGS]; - if (count > MC13783_NUM_REGS) + if ((unsigned)count > MC13783_NUM_REGS) return -1; for (i = 0; i < count; i++) @@ -312,7 +308,7 @@ uint32_t mc13783_read(unsigned address) struct spi_transfer xfer; if (address >= MC13783_NUM_REGS) - return (uint32_t)-1; + return MC13783_DATA_ERROR; packet = address << 25; @@ -321,40 +317,18 @@ uint32_t mc13783_read(unsigned address) xfer.count = 1; if (!spi_transfer(&mc13783_spi, &xfer)) - return (uint32_t)-1; + return MC13783_DATA_ERROR; return packet; } -int mc13783_read_multiple(unsigned start, uint32_t *buffer, int count) -{ - int i; - struct spi_transfer xfer; - - if (start + count > MC13783_NUM_REGS) - return -1; - - xfer.txbuf = buffer; - xfer.rxbuf = buffer; - xfer.count = count; - - /* Prepare TX payload */ - for (i = 0; i < count; i++, start++) - buffer[i] = start << 25; - - if (!spi_transfer(&mc13783_spi, &xfer)) - return -1; - - return count - xfer.count; -} - int mc13783_read_regset(const unsigned char *regs, uint32_t *buffer, int count) { int i; struct spi_transfer xfer; - if (count > MC13783_NUM_REGS) + if ((unsigned)count > MC13783_NUM_REGS) return -1; for (i = 0; i < count; i++) -- 2.11.4.GIT