1 #include "../../board.h"
3 #if BOARD == BOARD_EA4357
5 #include "lpc43xx_i2c.h"
6 #include "lpc43xx_scu.h"
10 #define UDA1380_I2C LPC_I2C0
20 int32_t Uda1380_Init(uint32_t i2cClockFreq, uint32_t i2sClockFreq)
29 I2C_Init(UDA1380_I2C, i2cClockFreq);
32 I2C_Cmd(UDA1380_I2C, ENABLE);
35 ret = Uda1380_WriteData(UDA1380_REG_L3, 0 );
36 if(ret != UDA1380_FUNC_OK)
40 ret = Uda1380_WriteData(UDA1380_REG_I2S,0 );
41 if(ret != UDA1380_FUNC_OK)
44 ret = Uda1380_WriteData(UDA1380_REG_MSTRMUTE,0);
45 if(ret != UDA1380_FUNC_OK)
48 ret = Uda1380_WriteData(UDA1380_REG_MIXSDO,0);
49 if(ret != UDA1380_FUNC_OK)
52 #if UDA1380_SYSCLK_USED //Use SYSCLK
53 ret = Uda1380_WriteData(UDA1380_REG_EVALCLK,
54 EVALCLK_DEC_EN | EVALCLK_DAC_EN | EVALCLK_INT_EN | EVALCLK_DAC_SEL_SYSCLK );
55 if(ret != UDA1380_FUNC_OK)
58 ret = Uda1380_WriteData(UDA1380_REG_PWRCTRL,
59 PWR_PON_HP_EN | PWR_PON_DAC_EN | PWR_PON_BIAS_EN);
60 if(ret != UDA1380_FUNC_OK)
64 if(i2sClockFreq >= 6250 && i2sClockFreq < 12500)
65 clk = EVALCLK_WSPLL_SEL6_12K;
66 else if(i2sClockFreq >= 12501 && i2sClockFreq < 25000)
67 clk = EVALCLK_WSPLL_SEL12_25K;
68 else if(i2sClockFreq >= 25001 && i2sClockFreq < 50000)
69 clk = EVALCLK_WSPLL_SEL25_50K;
70 else if(i2sClockFreq >= 50001 && i2sClockFreq < 100000)
71 clk = EVALCLK_WSPLL_SEL50_100K;
75 ret = Uda1380_WriteData(UDA1380_REG_EVALCLK,
76 EVALCLK_DEC_EN | EVALCLK_DAC_EN | EVALCLK_INT_EN | EVALCLK_DAC_SEL_WSPLL | clk);
77 if(ret != UDA1380_FUNC_OK)
80 ret = Uda1380_WriteData(UDA1380_REG_PWRCTRL,
81 PWR_PON_PLL_EN | PWR_PON_HP_EN | PWR_PON_DAC_EN | PWR_PON_BIAS_EN);
82 if(ret != UDA1380_FUNC_OK)
85 return UDA1380_FUNC_OK;
94 int32_t Uda1380_WriteData(uint8_t reg, uint16_t data)
96 I2C_M_SETUP_Type i2cData;
97 uint8_t i2cBuf[UDA1380_CMD_BUFF_SIZE];
100 i2cBuf[1] = (data >> 8) & 0xFF;
101 i2cBuf[2] = data & 0xFF;
103 i2cData.sl_addr7bit = UDA1380_SLAVE_ADDR;
104 i2cData.tx_length = UDA1380_CMD_BUFF_SIZE;
105 i2cData.tx_data = i2cBuf;
106 i2cData.rx_data = NULL;
107 i2cData.rx_length = 0;
108 i2cData.retransmissions_max = 3;
110 if (I2C_MasterTransferData(UDA1380_I2C, &i2cData, I2C_TRANSFER_POLLING) == SUCCESS)
113 if(Uda1380_ReadData(reg, &dataTmp) != UDA1380_FUNC_OK) {
114 return UDA1380_FUNC_ERR;
117 return UDA1380_FUNC_ERR;
119 return UDA1380_FUNC_OK;
122 return UDA1380_FUNC_ERR;
132 int32_t Uda1380_ReadData(uint8_t reg, uint16_t *data)
134 I2C_M_SETUP_Type i2cData;
135 uint8_t i2cBuf[UDA1380_CMD_BUFF_SIZE];
138 return UDA1380_FUNC_ERR;
142 i2cData.sl_addr7bit = UDA1380_SLAVE_ADDR;
143 i2cData.tx_length = 1;
144 i2cData.tx_data = i2cBuf;
145 i2cData.rx_data = &i2cBuf[1];
146 i2cData.rx_length = UDA1380_CMD_BUFF_SIZE - 1;
147 i2cData.retransmissions_max = 3;
149 if (I2C_MasterTransferData(UDA1380_I2C, &i2cData, I2C_TRANSFER_POLLING) == SUCCESS)
151 *data = i2cBuf[1] << 8 | i2cBuf[2];
152 return UDA1380_FUNC_OK;
155 return UDA1380_FUNC_ERR;