summaryrefslogtreecommitdiff
path: root/chip/it83xx/i2c_slave.c
diff options
context:
space:
mode:
Diffstat (limited to 'chip/it83xx/i2c_slave.c')
-rw-r--r--chip/it83xx/i2c_slave.c34
1 files changed, 29 insertions, 5 deletions
diff --git a/chip/it83xx/i2c_slave.c b/chip/it83xx/i2c_slave.c
index bce86d25b8..1902285959 100644
--- a/chip/it83xx/i2c_slave.c
+++ b/chip/it83xx/i2c_slave.c
@@ -230,6 +230,7 @@ void i2c_slave_enable(int port, uint8_t slv_addr)
/* Enhanced I2C slave channel D, E, F DMA mode */
else {
int ch, idx;
+ uint32_t in_data_addr, out_data_addr;
/* Get enhanced i2c channel */
ch = i2c_slv_ctrl[port].offset / I2C_ENHANCED_CH_INTERVAL;
@@ -280,13 +281,36 @@ void i2c_slave_enable(int port, uint8_t slv_addr)
memset(in_data[idx], 0, I2C_MAX_BUFFER_SIZE);
memset(out_data[idx], 0, I2C_MAX_BUFFER_SIZE);
+ if (IS_ENABLED(CHIP_ILM_DLM_ORDER)) {
+ in_data_addr = (uint32_t)in_data[idx] & 0xffffff;
+ out_data_addr = (uint32_t)out_data[idx] & 0xffffff;
+ } else {
+ in_data_addr = (uint32_t)in_data[idx] & 0xfff;
+ out_data_addr = (uint32_t)out_data[idx] & 0xfff;
+ }
+
/* DMA write target address register */
- IT83XX_I2C_RAMHA(ch) = ((uint32_t)in_data[idx] >> 8) & 0x0F;
- IT83XX_I2C_RAMLA(ch) = (uint32_t)in_data[idx] & 0xFF;
+ IT83XX_I2C_RAMHA(ch) = in_data_addr >> 8;
+ IT83XX_I2C_RAMLA(ch) = in_data_addr;
- /* DMA read target address register */
- IT83XX_I2C_RAMHA2(ch) = ((uint32_t)out_data[idx] >> 8) & 0x0F;
- IT83XX_I2C_RAMLA2(ch) = (uint32_t)out_data[idx] & 0xFF;
+ if (IS_ENABLED(CHIP_ILM_DLM_ORDER)) {
+ /*
+ * DMA write target address register
+ * for high order byte
+ */
+ IT83XX_I2C_RAMH2A(ch) = in_data_addr >> 16;
+ /*
+ * DMA read target address register
+ * for high order byte
+ */
+ IT83XX_I2C_CMD_ADDH2(ch) = out_data_addr >> 16;
+ IT83XX_I2C_CMD_ADDH(ch) = out_data_addr >> 8;
+ IT83XX_I2C_CMD_ADDL(ch) = out_data_addr;
+ } else {
+ /* DMA read target address register */
+ IT83XX_I2C_RAMHA2(ch) = out_data_addr >> 8;
+ IT83XX_I2C_RAMLA2(ch) = out_data_addr;
+ }
/* I2C module enable and command queue mode */
IT83XX_I2C_CTR1(ch) = IT83XX_I2C_COMQ_EN |