diff options
-rw-r--r-- | firmware/target/arm/as3525/as3525-codec.c | 130 | ||||
-rw-r--r-- | firmware/target/arm/as3525/as3525-codec.h | 4 |
2 files changed, 67 insertions, 67 deletions
diff --git a/firmware/target/arm/as3525/as3525-codec.c b/firmware/target/arm/as3525/as3525-codec.c index 1de2f49e1a..0bd49464fa 100644 --- a/firmware/target/arm/as3525/as3525-codec.c +++ b/firmware/target/arm/as3525/as3525-codec.c @@ -5,7 +5,7 @@ * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ * \/ \/ \/ \/ \/ - * $Id: $ + * $Id$ * * Copyright (C) 2008 by Bertrik Sikken * @@ -40,93 +40,93 @@ #include "as3525-codec.h" #include "as3525.h" -#define AUDIO_I2C_ADDR 0x46
+#define AUDIO_I2C_ADDR 0x46 -#define I2C2_DATA *((volatile unsigned int *)(I2C_AUDIO_BASE + 0x00))
-#define I2C2_SLAD0 *((volatile unsigned int *)(I2C_AUDIO_BASE + 0x04))
-#define I2C2_CNTRL *((volatile unsigned int *)(I2C_AUDIO_BASE + 0x0C))
-#define I2C2_DACNT *((volatile unsigned int *)(I2C_AUDIO_BASE + 0x10))
-#define I2C2_CPSR0 *((volatile unsigned int *)(I2C_AUDIO_BASE + 0x1C))
-#define I2C2_CPSR1 *((volatile unsigned int *)(I2C_AUDIO_BASE + 0x20))
+#define I2C2_DATA *((volatile unsigned int *)(I2C_AUDIO_BASE + 0x00)) +#define I2C2_SLAD0 *((volatile unsigned int *)(I2C_AUDIO_BASE + 0x04)) +#define I2C2_CNTRL *((volatile unsigned int *)(I2C_AUDIO_BASE + 0x0C)) +#define I2C2_DACNT *((volatile unsigned int *)(I2C_AUDIO_BASE + 0x10)) +#define I2C2_CPSR0 *((volatile unsigned int *)(I2C_AUDIO_BASE + 0x1C)) +#define I2C2_CPSR1 *((volatile unsigned int *)(I2C_AUDIO_BASE + 0x20)) #define I2C2_IMR *((volatile unsigned int *)(I2C_AUDIO_BASE + 0x24)) -#define I2C2_RIS *((volatile unsigned int *)(I2C_AUDIO_BASE + 0x28))
-#define I2C2_MIS *((volatile unsigned int *)(I2C_AUDIO_BASE + 0x2C))
-#define I2C2_SR *((volatile unsigned int *)(I2C_AUDIO_BASE + 0x30))
-#define I2C2_INT_CLR *((volatile unsigned int *)(I2C_AUDIO_BASE + 0x40))
+#define I2C2_RIS *((volatile unsigned int *)(I2C_AUDIO_BASE + 0x28)) +#define I2C2_MIS *((volatile unsigned int *)(I2C_AUDIO_BASE + 0x2C)) +#define I2C2_SR *((volatile unsigned int *)(I2C_AUDIO_BASE + 0x30)) +#define I2C2_INT_CLR *((volatile unsigned int *)(I2C_AUDIO_BASE + 0x40)) #define I2C2_SADDR *((volatile unsigned int *)(I2C_AUDIO_BASE + 0x44)) -/* initialises the internal i2c bus and prepares for transfers to the codec */
-void as3525_codec_init(void)
-{
+/* initialises the internal i2c bus and prepares for transfers to the codec */ +void as3525_codec_init(void) +{ /* reset device */ CCU_SRC = CCU_SRC_I2C_AUDIO_EN; CCU_SRL = CCU_SRL_MAGIC_NUMBER; - CCU_SRL = 0;
-
+ CCU_SRL = 0; + /* enable clock */ - CGU_PERI |= CGU_I2C_AUDIO_MASTER_CLOCK_ENABLE;
+ CGU_PERI |= CGU_I2C_AUDIO_MASTER_CLOCK_ENABLE; /* prescaler for i2c clock */ I2C2_CPSR0 = 60; /* 24 MHz / 400 kHz */ I2C2_CPSR1 = 0; /* MSB */ /* set i2c slave address of codec part */ - I2C2_SLAD0 = AUDIO_I2C_ADDR << 1;
+ I2C2_SLAD0 = AUDIO_I2C_ADDR << 1; I2C2_CNTRL = 0x51; -}
-
- -/* returns != 0 when busy */
-static int i2c_busy(void)
-{
- return (I2C2_SR & 1);
-}
-
- -/* returns 0 on success, <0 otherwise */
-int as3525_codec_write(int index, int value)
-{
- if (index == 0x21) {
- /* prevent setting of the LREG_CP_not bit */
- value &= ~(1 << 5);
- }
-
- /* check if still busy */
+} + + +/* returns != 0 when busy */ +static int i2c_busy(void) +{ + return (I2C2_SR & 1); +} + + +/* returns 0 on success, <0 otherwise */ +int as3525_codec_write(int index, int value) +{ + if (index == 0x21) { + /* prevent setting of the LREG_CP_not bit */ + value &= ~(1 << 5); + } + + /* check if still busy */ if (i2c_busy()) { - return -1;
- }
-
- /* start transfer */
+ return -1; + } + + /* start transfer */ I2C2_SADDR = index; - I2C2_CNTRL &= ~(1 << 1);
- I2C2_DATA = value;
- I2C2_DACNT = 1;
-
- /* wait for transfer*/
- while (i2c_busy());
+ I2C2_CNTRL &= ~(1 << 1); + I2C2_DATA = value; + I2C2_DACNT = 1; + + /* wait for transfer*/ + while (i2c_busy()); + + return 0; +} - return 0;
-}
-
/* returns value read on success, <0 otherwise */ -int as3525_codec_read(int index)
+int as3525_codec_read(int index) { - /* check if still busy */
- if (i2c_busy()) {
- return -1;
- }
+ /* check if still busy */ + if (i2c_busy()) { + return -1; + } + + /* start transfer */ + I2C2_SADDR = index; + I2C2_CNTRL |= (1 << 1); + I2C2_DACNT = 1; - /* start transfer */
- I2C2_SADDR = index;
- I2C2_CNTRL |= (1 << 1);
- I2C2_DACNT = 1;
+ /* wait for transfer*/ + while (i2c_busy()); - /* wait for transfer*/
- while (i2c_busy());
-
- return I2C2_DATA;
-}
+ return I2C2_DATA; +} diff --git a/firmware/target/arm/as3525/as3525-codec.h b/firmware/target/arm/as3525/as3525-codec.h index 9d694554c6..ce6929e152 100644 --- a/firmware/target/arm/as3525/as3525-codec.h +++ b/firmware/target/arm/as3525/as3525-codec.h @@ -5,7 +5,7 @@ * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ * \/ \/ \/ \/ \/ - * $Id: $ + * $Id$ * * Copyright (C) 2008 by Bertrik Sikken * @@ -22,6 +22,6 @@ void as3525_codec_init(void); int as3525_codec_write(int index, int value); -int as3525_codec_read(int index);
+int as3525_codec_read(int index); |