diff options
Diffstat (limited to 'chip')
-rw-r--r-- | chip/g/i2cm.c | 23 | ||||
-rw-r--r-- | chip/host/i2c.c | 23 | ||||
-rw-r--r-- | chip/ish/i2c.c | 18 | ||||
-rw-r--r-- | chip/it83xx/i2c.c | 25 | ||||
-rw-r--r-- | chip/lm4/i2c.c | 15 | ||||
-rw-r--r-- | chip/mchp/i2c.c | 15 | ||||
-rw-r--r-- | chip/mec1322/i2c.c | 14 | ||||
-rw-r--r-- | chip/npcx/i2c.c | 25 | ||||
-rw-r--r-- | chip/nrf51/i2c.c | 22 | ||||
-rw-r--r-- | chip/stm32/i2c-stm32f0.c | 26 | ||||
-rw-r--r-- | chip/stm32/i2c-stm32f4.c | 73 | ||||
-rw-r--r-- | chip/stm32/i2c-stm32l.c | 13 | ||||
-rw-r--r-- | chip/stm32/i2c-stm32l4.c | 17 | ||||
-rw-r--r-- | chip/stm32/usb_power.c | 78 | ||||
-rw-r--r-- | chip/stm32/usb_power.h | 4 |
15 files changed, 220 insertions, 171 deletions
diff --git a/chip/g/i2cm.c b/chip/g/i2cm.c index b1a3135723..a7b8f9ad7e 100644 --- a/chip/g/i2cm.c +++ b/chip/g/i2cm.c @@ -247,7 +247,7 @@ static int i2cm_poll_for_complete(int port) return EC_ERROR_TIMEOUT; } -static uint32_t i2cm_create_inst(int slave_addr, int is_write, +static uint32_t i2cm_create_inst__7bf(int slave_addr__7bf, int is_write, size_t size, uint32_t flags) { uint32_t inst = 0; @@ -258,12 +258,7 @@ static uint32_t i2cm_create_inst(int slave_addr, int is_write, * to be included. */ inst |= INST_START; - - /* - * Calls to chip_i2c_xfer assume an 8 bit slave address. Need - * to shift right by 1 bit. - */ - inst |= INST_DEVADDRVAL(slave_addr >> 1); + inst |= INST_DEVADDRVAL(I2C_GET_ADDR__7b(slave_addr__7bf)); inst |= INST_RWDEVADDR; } @@ -281,8 +276,9 @@ static uint32_t i2cm_create_inst(int slave_addr, int is_write, return inst; } -static int i2cm_execute_sequence(int port, int slave_addr, const uint8_t *out, - int out_size, uint8_t *in, int in_size, +static int i2cm_execute_sequence__7bf(int port, int slave_addr__7bf, + const uint8_t *out, int out_size, + uint8_t *in, int in_size, int flags) { int rv; @@ -313,7 +309,7 @@ static int i2cm_execute_sequence(int port, int slave_addr, const uint8_t *out, seq_flags &= ~I2C_XFER_STOP; /* Build sequence instruction */ - inst = i2cm_create_inst(slave_addr, is_write, + inst = i2cm_create_inst__7bf(slave_addr__7bf, is_write, batch_size, seq_flags); /* If this is a write - copy data into the FIFO. */ @@ -357,7 +353,8 @@ static int i2cm_execute_sequence(int port, int slave_addr, const uint8_t *out, /* Perform an i2c transaction. */ -int chip_i2c_xfer(int port, int slave_addr, const uint8_t *out, int out_size, +int chip_i2c_xfer__7bf(const int port, const uint16_t slave_addr__7bf, + const uint8_t *out, int out_size, uint8_t *in, int in_size, int flags) { int rv; @@ -379,14 +376,14 @@ int chip_i2c_xfer(int port, int slave_addr, const uint8_t *out, int out_size, if (out_size) { /* Process write before read. */ - rv = i2cm_execute_sequence(port, slave_addr, out, + rv = i2cm_execute_sequence__7bf(port, slave_addr__7bf, out, out_size, NULL, 0, flags); if (rv != EC_SUCCESS) return rv; } if (in_size) - rv = i2cm_execute_sequence(port, slave_addr, + rv = i2cm_execute_sequence__7bf(port, slave_addr__7bf, NULL, 0, in, in_size, flags); return rv; diff --git a/chip/host/i2c.c b/chip/host/i2c.c index 72960c789d..af80926223 100644 --- a/chip/host/i2c.c +++ b/chip/host/i2c.c @@ -14,7 +14,7 @@ struct i2c_dev { int port; - int slave_addr; + uint16_t slave_addr__7bf; int valid; }; @@ -28,7 +28,7 @@ static void detach_init(void) } DECLARE_HOOK(HOOK_INIT, detach_init, HOOK_PRIO_FIRST); -int test_detach_i2c(int port, int slave_addr) +int test_detach_i2c__7bf(const int port, const uint16_t slave_addr__7bf) { int i; @@ -40,20 +40,20 @@ int test_detach_i2c(int port, int slave_addr) return EC_ERROR_OVERFLOW; detached_devs[i].port = port; - detached_devs[i].slave_addr = slave_addr; + detached_devs[i].slave_addr__7bf = slave_addr__7bf; detached_devs[i].valid = 1; return EC_SUCCESS; } -int test_attach_i2c(int port, int slave_addr) +int test_attach_i2c__7bf(const int port, const uint16_t slave_addr__7bf) { int i; for (i = 0; i < MAX_DETACHED_DEV_COUNT; ++i) if (detached_devs[i].valid && detached_devs[i].port == port && - detached_devs[i].slave_addr == slave_addr) + detached_devs[i].slave_addr__7bf == slave_addr__7bf) break; if (i == MAX_DETACHED_DEV_COUNT) @@ -63,28 +63,31 @@ int test_attach_i2c(int port, int slave_addr) return EC_SUCCESS; } -static int test_check_detached(int port, int slave_addr) +static int test_check_detached__7bf(const int port, + const uint16_t slave_addr__7bf) { int i; for (i = 0; i < MAX_DETACHED_DEV_COUNT; ++i) if (detached_devs[i].valid && detached_devs[i].port == port && - detached_devs[i].slave_addr == slave_addr) + detached_devs[i].slave_addr__7bf == slave_addr__7bf) return 1; return 0; } -int chip_i2c_xfer(int port, int slave_addr, const uint8_t *out, int out_size, +int chip_i2c_xfer__7bf(const int port, const uint16_t slave_addr__7bf, + const uint8_t *out, int out_size, uint8_t *in, int in_size, int flags) { const struct test_i2c_xfer *p; int rv; - if (test_check_detached(port, slave_addr)) + if (test_check_detached__7bf(port, slave_addr__7bf)) return EC_ERROR_UNKNOWN; for (p = __test_i2c_xfer; p < __test_i2c_xfer_end; ++p) { - rv = p->routine(port, slave_addr, out, out_size, + rv = p->routine__7bf(port, slave_addr__7bf, + out, out_size, in, in_size, flags); if (rv != EC_ERROR_INVAL) return rv; diff --git a/chip/ish/i2c.c b/chip/ish/i2c.c index 07da8638d2..fa3aca627a 100644 --- a/chip/ish/i2c.c +++ b/chip/ish/i2c.c @@ -150,22 +150,19 @@ static void i2c_intr_switch(uint32_t *base, int mode) } } -static void i2c_init_transaction(struct i2c_context *ctx, - uint8_t slave_addr, uint8_t flags) +static void i2c_init_transaction__7b(struct i2c_context *ctx, + uint16_t slave_addr__7b, uint8_t flags) { uint32_t con_value; uint32_t *base = ctx->base; struct i2c_bus_info *bus_info = &board_config[ctx->bus]; uint32_t clk_in_val = clk_in[bus_freq[ctx->bus]]; - /* Convert 8-bit slave addrees to 7-bit for driver expectation*/ - slave_addr >>= 1; - /* disable interrupts */ i2c_intr_switch(base, DISABLE_INT); i2c_mmio_write(base, IC_ENABLE, IC_ENABLE_DISABLE); - i2c_mmio_write(base, IC_TAR, (slave_addr << IC_TAR_OFFSET) | + i2c_mmio_write(base, IC_TAR, (slave_addr__7b << IC_TAR_OFFSET) | TAR_SPECIAL_VAL | IC_10BITADDR_MASTER_VAL); /* set Clock SCL Count */ @@ -289,7 +286,8 @@ static void i2c_write_read_commands(uint32_t *base, uint8_t len, int more_data, } } -int chip_i2c_xfer(int port, int slave_addr, const uint8_t *out, int out_size, +int chip_i2c_xfer__7bf(const int port, const uint16_t slave_addr__7bf, + const uint8_t *out, int out_size, uint8_t *in, int in_size, int flags) { int i; @@ -297,7 +295,7 @@ int chip_i2c_xfer(int port, int slave_addr, const uint8_t *out, int out_size, uint64_t expire_ts; struct i2c_context *ctx; ssize_t curr_index = 0; - + uint16_t addr__7b = I2C_GET_ADDR__7b(slave_addr__7bf); int begin_indx; uint8_t repeat_start = 0; @@ -311,7 +309,7 @@ int chip_i2c_xfer(int port, int slave_addr, const uint8_t *out, int out_size, * Address cannot be any of the reserved address locations: * 0x00 to 0x07 or 0x78 to 0x7f. */ - if (slave_addr <= 0x0F || (slave_addr >= 0xF0 && slave_addr <= 0xFF)) + if (addr__7b <= 0x07 || (addr__7b >= 0x78 && addr__7b <= 0x7F)) return EC_ERROR_INVAL; /* assume that if both out_size and in_size are not zero, @@ -325,7 +323,7 @@ int chip_i2c_xfer(int port, int slave_addr, const uint8_t *out, int out_size, total_len = in_size + out_size; - i2c_init_transaction(ctx, slave_addr, repeat_start); + i2c_init_transaction__7b(ctx, addr__7b, repeat_start); /* Write W data */ if (out_size) diff --git a/chip/it83xx/i2c.c b/chip/it83xx/i2c.c index 48d13d5fdd..6383b773d2 100644 --- a/chip/it83xx/i2c.c +++ b/chip/it83xx/i2c.c @@ -194,7 +194,7 @@ struct i2c_port_data { int widx; /* Index into output data */ int ridx; /* Index into input data */ int err; /* Error code, if any */ - uint8_t addr; /* address of device */ + uint8_t addr__8b; /* address of device */ uint32_t timeout_us; /* Transaction timeout, or 0 to use default */ uint8_t freq; /* Frequency setting */ @@ -274,7 +274,7 @@ static void i2c_w2r_change_direction(int p) } static void i2c_pio_trans_data(int p, enum enhanced_i2c_transfer_direct direct, - uint8_t data, int first_byte) + uint8_t data, int first_byte) { struct i2c_port_data *pd = pdata + p; int p_ch; @@ -319,7 +319,7 @@ static int i2c_tran_write(int p) * bit0, Direction of the host transfer. * bit[1:7}, Address of the targeted slave. */ - IT83XX_SMB_TRASLA(p) = pd->addr; + IT83XX_SMB_TRASLA(p) = pd->addr__8b; /* Send first byte */ IT83XX_SMB_HOBDB(p) = *(pd->out++); pd->widx++; @@ -379,7 +379,7 @@ static int i2c_tran_read(int p) * bit0, Direction of the host transfer. * bit[1:7}, Address of the targeted slave. */ - IT83XX_SMB_TRASLA(p) = pd->addr | 0x01; + IT83XX_SMB_TRASLA(p) = pd->addr__8b | 0x01; /* clear start flag */ pd->flags &= ~I2C_XFER_START; /* @@ -468,7 +468,7 @@ static int enhanced_i2c_tran_write(int p) pd->flags &= ~I2C_XFER_START; enhanced_i2c_start(p); /* Send ID */ - i2c_pio_trans_data(p, TX_DIRECT, pd->addr, 1); + i2c_pio_trans_data(p, TX_DIRECT, pd->addr__8b, 1); } else { /* Host has completed the transmission of a byte */ if (pd->widx < pd->out_size) { @@ -488,7 +488,8 @@ static int enhanced_i2c_tran_write(int p) /* Write to read protocol */ pd->i2ccs = I2C_CH_REPEAT_START; /* Repeat Start */ - i2c_pio_trans_data(p, RX_DIRECT, pd->addr, 1); + i2c_pio_trans_data(p, RX_DIRECT, + pd->addr__8b, 1); } else { if (pd->flags & I2C_XFER_STOP) { IT83XX_I2C_CTR(p_ch) = E_FINISH; @@ -520,7 +521,7 @@ static int enhanced_i2c_tran_read(int p) /* Direct read */ pd->i2ccs = I2C_CH_WAIT_READ; /* Send ID */ - i2c_pio_trans_data(p, RX_DIRECT, pd->addr, 1); + i2c_pio_trans_data(p, RX_DIRECT, pd->addr__8b, 1); } else { if (pd->i2ccs) { if (pd->i2ccs == I2C_CH_REPEAT_START) { @@ -537,7 +538,8 @@ static int enhanced_i2c_tran_read(int p) /* Write to read */ pd->i2ccs = I2C_CH_WAIT_READ; /* Send ID */ - i2c_pio_trans_data(p, RX_DIRECT, pd->addr, 1); + i2c_pio_trans_data(p, RX_DIRECT, + pd->addr__8b, 1); task_enable_irq(i2c_ctrl_regs[p].irq); } } else { @@ -639,8 +641,9 @@ int i2c_is_busy(int port) return (IT83XX_I2C_STR(p_ch) & E_HOSTA_BB); } -int chip_i2c_xfer(int port, int slave_addr, const uint8_t *out, int out_size, - uint8_t *in, int in_size, int flags) +int chip_i2c_xfer__7bf(int port, uint16_t slave_addr__7bf, + const uint8_t *out, int out_size, + uint8_t *in, int in_size, int flags) { struct i2c_port_data *pd = pdata + port; uint32_t events = 0; @@ -662,7 +665,7 @@ int chip_i2c_xfer(int port, int slave_addr, const uint8_t *out, int out_size, pd->widx = 0; pd->ridx = 0; pd->err = 0; - pd->addr = slave_addr; + pd->addr__8b = I2C_GET_ADDR__7b(slave_addr__7bf) << 1; /* Make sure we're in a good state to start */ if ((flags & I2C_XFER_START) && (i2c_is_busy(port) diff --git a/chip/lm4/i2c.c b/chip/lm4/i2c.c index 6e88d9ee5b..f831997e68 100644 --- a/chip/lm4/i2c.c +++ b/chip/lm4/i2c.c @@ -165,7 +165,8 @@ int i2c_do_work(int port) return 0; } -int chip_i2c_xfer(int port, int slave_addr, const uint8_t *out, int out_size, +int chip_i2c_xfer__7bf(const int port, const uint16_t slave_addr__7bf, + const uint8_t *out, int out_size, uint8_t *in, int in_size, int flags) { struct i2c_port_data *pd = pdata + port; @@ -191,11 +192,11 @@ int chip_i2c_xfer(int port, int slave_addr, const uint8_t *out, int out_size, uint32_t tpr = LM4_I2C_MTPR(port); CPRINTS("I2C%d Addr:%02X bad status 0x%02x, SCL=%d, SDA=%d", - port, - slave_addr, - reg_mcs, - i2c_get_line_levels(port) & I2C_LINE_SCL_HIGH, - i2c_get_line_levels(port) & I2C_LINE_SDA_HIGH); + port, + I2C_GET_ADDR__7b(slave_addr__7bf), + reg_mcs, + i2c_get_line_levels(port) & I2C_LINE_SCL_HIGH, + i2c_get_line_levels(port) & I2C_LINE_SDA_HIGH); /* Attempt to unwedge the port. */ i2c_unwedge(port); @@ -218,7 +219,7 @@ int chip_i2c_xfer(int port, int slave_addr, const uint8_t *out, int out_size, } /* Set slave address for transmit */ - LM4_I2C_MSA(port) = slave_addr & 0xff; + LM4_I2C_MSA(port) = (I2C_GET_ADDR__7b(slave_addr__7bf) << 1) & 0xff; /* Enable interrupts */ pd->task_waiting = task_get_current(); diff --git a/chip/mchp/i2c.c b/chip/mchp/i2c.c index 489d374195..96a0914a4b 100644 --- a/chip/mchp/i2c.c +++ b/chip/mchp/i2c.c @@ -132,7 +132,7 @@ static struct { uint32_t i2c_complete; /* ISR write */ uint32_t flags; uint8_t port; - uint8_t slv_addr; + uint8_t slv_addr__8b; uint8_t ctrl; uint8_t hwsts; uint8_t hwsts2; @@ -545,7 +545,7 @@ static int i2c_mtx(int ctrl) cdata[ctrl].flags |= (1ul << 1); if (cdata[ctrl].xflags & I2C_XFER_START) { cdata[ctrl].flags |= (1ul << 2); - MCHP_I2C_DATA(ctrl) = cdata[ctrl].slv_addr; + MCHP_I2C_DATA(ctrl) = cdata[ctrl].slv_addr__8b; /* Clock out the slave address, sending START bit */ MCHP_I2C_CTRL(ctrl) = CTRL_PIN | CTRL_ESO | CTRL_ENI | CTRL_ACK | CTRL_STA; @@ -629,7 +629,7 @@ static int i2c_mrx_start(int ctrl) /* Repeated-START then address */ MCHP_I2C_CTRL(ctrl) = u8; } - MCHP_I2C_DATA(ctrl) = cdata[ctrl].slv_addr | 0x01; + MCHP_I2C_DATA(ctrl) = cdata[ctrl].slv_addr__8b | 0x01; if (cdata[ctrl].transaction_state == I2C_TRANSACTION_STOPPED) { cdata[ctrl].flags |= (1ul << 6); /* address then START */ @@ -716,8 +716,9 @@ static int i2c_mrx_data(int ctrl) /* * Called from common/i2c_master */ -int chip_i2c_xfer(int port, int slave_addr, const uint8_t *out, - int out_size, uint8_t *in, int in_size, int flags) +int chip_i2c_xfer__7bf(int port, uint16_t slave_addr__7bf, + const uint8_t *out, int out_size, + uint8_t *in, int in_size, int flags) { int ctrl; int ret_done; @@ -739,8 +740,8 @@ int chip_i2c_xfer(int port, int slave_addr, const uint8_t *out, cdata[ctrl].hwsts2 = 0; cdata[ctrl].hwsts3 = 0; cdata[ctrl].hwsts4 = 0; - cdata[ctrl].port = (uint8_t)(port & 0xff); - cdata[ctrl].slv_addr = (uint8_t)(slave_addr & 0xff); + cdata[ctrl].port = port & 0xff; + cdata[ctrl].slv_addr__8b = I2C_GET_ADDR__7b(slave_addr__7bf) << 1; cdata[ctrl].out_size = out_size; cdata[ctrl].outp = out; cdata[ctrl].in_size = in_size; diff --git a/chip/mec1322/i2c.c b/chip/mec1322/i2c.c index d5c3692b3f..4920070432 100644 --- a/chip/mec1322/i2c.c +++ b/chip/mec1322/i2c.c @@ -236,7 +236,9 @@ static inline void push_in_buf(uint8_t **in, uint8_t val, int skip) } } -int chip_i2c_xfer(int port, int slave_addr, const uint8_t *out, int out_size, +int chip_i2c_xfer__7bf(const int port, + const uint16_t slave_addr__7bf, + const uint8_t *out, int out_size, uint8_t *in, int in_size, int flags) { int i; @@ -284,7 +286,9 @@ int chip_i2c_xfer(int port, int slave_addr, const uint8_t *out, int out_size, if (out_size) { if (send_start) { - MEC1322_I2C_DATA(controller) = (uint8_t)slave_addr; + MEC1322_I2C_DATA(controller) = + (uint8_t)(I2C_GET_ADDR__7b(slave_addr__7bf) + << 1); /* Clock out the slave address, sending START bit */ MEC1322_I2C_CTRL(controller) = CTRL_PIN | CTRL_ESO | @@ -327,8 +331,10 @@ int chip_i2c_xfer(int port, int slave_addr, const uint8_t *out, int out_size, CTRL_ACK | CTRL_ENI; - MEC1322_I2C_DATA(controller) = (uint8_t)slave_addr - | 0x01; + MEC1322_I2C_DATA(controller) = + (uint8_t)(I2C_GET_ADDR__7b(slave_addr__7bf) + << 1) + | 0x01; /* New transaction case, clock out slave address. */ if (cdata[controller].transaction_state == diff --git a/chip/npcx/i2c.c b/chip/npcx/i2c.c index 0b99f24270..23023abf1d 100644 --- a/chip/npcx/i2c.c +++ b/chip/npcx/i2c.c @@ -84,7 +84,7 @@ struct i2c_status { uint16_t sz_txbuf; /* Size of Tx buffer in bytes */ uint16_t sz_rxbuf; /* Size of rx buffer in bytes */ uint16_t idx_buf; /* Current index of Tx/Rx buffer */ - uint8_t slave_addr;/* Target slave address */ + uint8_t slave_addr__7bf;/* Target slave address */ enum smb_oper_state_t oper_state;/* Smbus operation state */ enum smb_error err_code; /* Error code */ int task_waiting; /* Task waiting on controller */ @@ -344,10 +344,10 @@ void i2c_done(int controller) static void i2c_handle_sda_irq(int controller) { volatile struct i2c_status *p_status = i2c_stsobjs + controller; + uint8_t addr__8b = I2C_GET_ADDR__7b(p_status->slave_addr__7bf) << 1; /* 1 Issue Start is successful ie. write address byte */ if (p_status->oper_state == SMB_MASTER_START || p_status->oper_state == SMB_REPEAT_START) { - uint8_t addr = p_status->slave_addr; /* Prepare address byte */ if (p_status->sz_txbuf == 0) {/* Receive mode */ p_status->oper_state = SMB_READ_OPER; @@ -360,12 +360,12 @@ static void i2c_handle_sda_irq(int controller) I2C_STALL(controller); /* Write the address to the bus R bit*/ - I2C_WRITE_BYTE(controller, (addr | 0x1)); + I2C_WRITE_BYTE(controller, (addr__8b | 0x1)); CPRINTS("-ARR-0x%02x", addr); } else {/* Transmit mode */ p_status->oper_state = SMB_WRITE_OPER; /* Write the address to the bus W bit*/ - I2C_WRITE_BYTE(controller, addr); + I2C_WRITE_BYTE(controller, addr__8b); CPRINTS("-ARW-0x%02x", addr); } /* Completed handling START condition */ @@ -380,7 +380,6 @@ static void i2c_handle_sda_irq(int controller) i2c_done(controller); /* need to restart & send slave address immediately */ else { - uint8_t addr_byte = p_status->slave_addr; /* * Prepare address byte * and start to receive bytes @@ -405,7 +404,8 @@ static void i2c_handle_sda_irq(int controller) CPUTS("-GNA"); } /* Write the address to the bus R bit*/ - I2C_WRITE_BYTE(controller, (addr_byte | 0x1)); + I2C_WRITE_BYTE(controller, + (addr__8b | 0x1)); CPUTS("-ARR"); } } @@ -609,7 +609,9 @@ void i2c_set_timeout(int port, uint32_t timeout) timeout ? timeout : I2C_TIMEOUT_DEFAULT_US; } -int chip_i2c_xfer(int port, int slave_addr, const uint8_t *out, int out_size, +int chip_i2c_xfer__7bf(const int port, + const uint16_t slave_addr__7bf, + const uint8_t *out, int out_size, uint8_t *in, int in_size, int flags) { volatile struct i2c_status *p_status; @@ -637,13 +639,8 @@ int chip_i2c_xfer(int port, int slave_addr, const uint8_t *out, int out_size, p_status->sz_txbuf = out_size; p_status->rx_buf = in; p_status->sz_rxbuf = in_size; -#if I2C_7BITS_ADDR - /* Set slave address from 7-bits to 8-bits */ - p_status->slave_addr = (slave_addr<<1); -#else - /* Set slave address (8-bits) */ - p_status->slave_addr = slave_addr; -#endif + p_status->slave_addr__7bf = slave_addr__7bf; + /* Reset index & error */ p_status->idx_buf = 0; p_status->err_code = SMB_OK; diff --git a/chip/nrf51/i2c.c b/chip/nrf51/i2c.c index 440506511b..7f4903ee1b 100644 --- a/chip/nrf51/i2c.c +++ b/chip/nrf51/i2c.c @@ -141,13 +141,13 @@ static void handle_i2c_error(int port, int rv) i2c_recover(port); } -static int i2c_master_write(int port, int slave_addr, const uint8_t *data, - int size, int stop) +static int i2c_master_write__7bf(const int port, const uint16_t slave_addr__7bf, + const uint8_t *data, int size, int stop) { int bytes_sent; int timeout = I2C_TIMEOUT; - NRF51_TWI_ADDRESS(port) = slave_addr >> 1; + NRF51_TWI_ADDRESS__7b(port) = I2C_GET_ADDR__7b(slave_addr__7bf); /* Clear the sent bit */ NRF51_TWI_TXDSENT(port) = 0; @@ -187,12 +187,13 @@ static int i2c_master_write(int port, int slave_addr, const uint8_t *data, return EC_SUCCESS; } -static int i2c_master_read(int port, int slave_addr, uint8_t *data, int size) +static int i2c_master_read__7bf(const int port, const uint16_t slave__addr__7bf, + uint8_t *data, int size) { int curr_byte; int timeout = I2C_TIMEOUT; - NRF51_TWI_ADDRESS(port) = slave_addr >> 1; + NRF51_TWI_ADDRESS__7b(port) = I2C_GET_ADDR__7b(slave_addr__7bf); if (size == 1) /* Last byte: stop after this one. */ NRF51_PPI_TEP(i2c_ppi_chan[port]) = @@ -252,7 +253,8 @@ static int i2c_master_read(int port, int slave_addr, uint8_t *data, int size) return EC_SUCCESS; } -int chip_i2c_xfer(int port, int slave_addr, const uint8_t *out, int out_bytes, +int chip_i2c_xfer__7bf(const int port, const uint16_t slave_addr__7bf, + const uint8_t *out, int out_bytes, uint8_t *in, int in_bytes, int flags) { int rv = EC_SUCCESS; @@ -261,10 +263,12 @@ int chip_i2c_xfer(int port, int slave_addr, const uint8_t *out, int out_bytes, ASSERT(in || !in_bytes); if (out_bytes) - rv = i2c_master_write(port, slave_addr, out, out_bytes, - in_bytes ? 0 : 1); + rv = i2c_master_write__7bf(port, slave_addr__7bf, + out, out_bytes, + in_bytes ? 0 : 1); if (rv == EC_SUCCESS && in_bytes) - rv = i2c_master_read(port, slave_addr, in, in_bytes); + rv = i2c_master_read__7bf(port, slave_addr__7bf, + in, in_bytes); handle_i2c_error(port, rv); diff --git a/chip/stm32/i2c-stm32f0.c b/chip/stm32/i2c-stm32f0.c index 9a63fbaf5b..e2aa3f8af9 100644 --- a/chip/stm32/i2c-stm32f0.c +++ b/chip/stm32/i2c-stm32f0.c @@ -27,7 +27,7 @@ /* Transmit timeout in microseconds */ #define I2C_TX_TIMEOUT_MASTER (10 * MSEC) -#ifdef CONFIG_HOSTCMD_I2C_SLAVE_ADDR +#ifdef CONFIG_HOSTCMD_I2C_SLAVE_ADDR__7BF #if (I2C_PORT_EC == STM32_I2C1_PORT) #define IRQ_SLAVE STM32_IRQ_I2C1 #else @@ -146,7 +146,7 @@ static void i2c_init_port(const struct i2c_port_t *p) STM32_RCC_APB1ENR |= 1 << (21 + port); if (port == STM32_I2C1_PORT) { -#if defined(CONFIG_HOSTCMD_I2C_SLAVE_ADDR) && \ +#if defined(CONFIG_HOSTCMD_I2C_SLAVE_ADDR__7BF) && \ defined(CONFIG_LOW_POWER_IDLE) && \ (I2C_PORT_EC == STM32_I2C1_PORT) /* @@ -189,7 +189,7 @@ defined(CONFIG_LOW_POWER_IDLE) && \ } /*****************************************************************************/ -#ifdef CONFIG_HOSTCMD_I2C_SLAVE_ADDR +#ifdef CONFIG_HOSTCMD_I2C_SLAVE_ADDR__7BF /* Host command slave */ /* * Buffer for received host command packets (including prefix byte on request, @@ -426,9 +426,11 @@ DECLARE_IRQ(IRQ_SLAVE, i2c2_event_interrupt, 2); /*****************************************************************************/ /* Interface */ -int chip_i2c_xfer(int port, int slave_addr, const uint8_t *out, int out_bytes, +int chip_i2c_xfer__7bf(const int port, const uint16_t slave_addr__7bf, + const uint8_t *out, int out_bytes, uint8_t *in, int in_bytes, int flags) { + int addr__8b = I2C_GET_ADDR__7b(slave_addr__7bf) << 1; int rv = EC_SUCCESS; int i; int xfer_start = flags & I2C_XFER_START; @@ -436,7 +438,7 @@ int chip_i2c_xfer(int port, int slave_addr, const uint8_t *out, int out_bytes, #if defined(CONFIG_I2C_SCL_GATE_ADDR) && defined(CONFIG_I2C_SCL_GATE_PORT) if (port == CONFIG_I2C_SCL_GATE_PORT && - slave_addr == CONFIG_I2C_SCL_GATE_ADDR) + slave_addr__7bf == CONFIG_I2C_SCL_GATE_ADDR__7BF) gpio_set_level(CONFIG_I2C_SCL_GATE_GPIO, 1); #endif @@ -457,7 +459,7 @@ int chip_i2c_xfer(int port, int slave_addr, const uint8_t *out, int out_bytes, * NBYTES again. if we are starting, then set START bit. */ STM32_I2C_CR2(port) = ((out_bytes & 0xFF) << 16) - | slave_addr + | addr__8b | ((in_bytes == 0 && xfer_stop) ? STM32_I2C_CR2_AUTOEND : 0) | ((in_bytes == 0 && !xfer_stop) ? @@ -486,7 +488,7 @@ int chip_i2c_xfer(int port, int slave_addr, const uint8_t *out, int out_bytes, * set START bit to send (re)start and begin read transaction. */ STM32_I2C_CR2(port) = ((in_bytes & 0xFF) << 16) - | STM32_I2C_CR2_RD_WRN | slave_addr + | STM32_I2C_CR2_RD_WRN | addr__8b | (xfer_stop ? STM32_I2C_CR2_AUTOEND : 0) | (!xfer_stop ? STM32_I2C_CR2_RELOAD : 0) | (out_bytes || xfer_start ? STM32_I2C_CR2_START : 0); @@ -543,7 +545,7 @@ xfer_exit: #ifdef CONFIG_I2C_SCL_GATE_ADDR if (port == CONFIG_I2C_SCL_GATE_PORT && - slave_addr == CONFIG_I2C_SCL_GATE_ADDR) + slave_addr__7bf == CONFIG_I2C_SCL_GATE_ADDR__7BF) gpio_set_level(CONFIG_I2C_SCL_GATE_GPIO, 0); #endif @@ -586,7 +588,7 @@ static void i2c_init(void) for (i = 0; i < i2c_ports_used; i++, p++) i2c_init_port(p); -#ifdef CONFIG_HOSTCMD_I2C_SLAVE_ADDR +#ifdef CONFIG_HOSTCMD_I2C_SLAVE_ADDR__7BF STM32_I2C_CR1(I2C_PORT_EC) |= STM32_I2C_CR1_RXIE | STM32_I2C_CR1_ERRIE | STM32_I2C_CR1_ADDRIE | STM32_I2C_CR1_STOPIE | STM32_I2C_CR1_NACKIE; @@ -598,13 +600,15 @@ static void i2c_init(void) */ STM32_I2C_CR1(I2C_PORT_EC) |= STM32_I2C_CR1_WUPEN; #endif - STM32_I2C_OAR1(I2C_PORT_EC) = 0x8000 | CONFIG_HOSTCMD_I2C_SLAVE_ADDR; + STM32_I2C_OAR1(I2C_PORT_EC) = 0x8000 + | (I2C_GET_ADDR__7b(CONFIG_HOSTCMD_I2C_SLAVE_ADDR__7BF) << 1); #ifdef TCPCI_I2C_SLAVE /* * Configure TCPC address with OA2[1] masked so that we respond * to CONFIG_TCPC_I2C_BASE_ADDR and CONFIG_TCPC_I2C_BASE_ADDR + 2. */ - STM32_I2C_OAR2(I2C_PORT_EC) = 0x8100 | CONFIG_TCPC_I2C_BASE_ADDR; + STM32_I2C_OAR2(I2C_PORT_EC) = 0x8100 + | (I2C_GET_ADDR__7b(CONFIG_TCPC_I2C_BASE_ADDR__7BF) << 1); #endif task_enable_irq(IRQ_SLAVE); #endif diff --git a/chip/stm32/i2c-stm32f4.c b/chip/stm32/i2c-stm32f4.c index ee6460936c..6b774e829b 100644 --- a/chip/stm32/i2c-stm32f4.c +++ b/chip/stm32/i2c-stm32f4.c @@ -25,7 +25,7 @@ /* Transmit timeout in microseconds */ #define I2C_TX_TIMEOUT_MASTER (10 * MSEC) -#ifdef CONFIG_HOSTCMD_I2C_SLAVE_ADDR +#ifdef CONFIG_HOSTCMD_I2C_SLAVE_ADDR__7BF #if (I2C_PORT_EC == STM32_I2C1_PORT) #define IRQ_SLAVE_EV STM32_IRQ_I2C1_EV #define IRQ_SLAVE_ER STM32_IRQ_I2C1_ER @@ -171,7 +171,7 @@ static int wait_sr1(int port, int mask) * * @return Non-zero if error. */ -static int send_start(int port, int slave_addr) +static int send_start__8b(const int port, const uint16_t slave_addr__8b) { int rv; @@ -182,7 +182,7 @@ static int send_start(int port, int slave_addr) return I2C_ERROR_FAILED_START; /* Write slave address */ - STM32_I2C_DR(port) = slave_addr & 0xff; + STM32_I2C_DR(port) = slave_addr__8b; rv = wait_sr1_poll(port, STM32_I2C_SR1_ADDR, SET, 1); if (rv) return rv; @@ -263,7 +263,8 @@ static int wait_fmpi2c_isr(int port, int mask) * * @return Non-zero if error. */ -static int send_fmpi2c_start(int port, int slave_addr, int size, int is_read) +static int send_fmpi2c_start__8b(const int port, const uint16_t slave_addr__8b, + int size, int is_read) { uint32_t reg; @@ -273,7 +274,7 @@ static int send_fmpi2c_start(int port, int slave_addr, int size, int is_read) FMPI2C_CR2_RELOAD | FMPI2C_CR2_AUTOEND | FMPI2C_CR2_RD_WRN | FMPI2C_CR2_START | FMPI2C_CR2_STOP); reg |= FMPI2C_CR2_START | FMPI2C_CR2_AUTOEND | - FMPI2C_CR2_SADD(slave_addr) | FMPI2C_CR2_SIZE(size) | + slave_addr__8b | FMPI2C_CR2_SIZE(size) | (is_read ? FMPI2C_CR2_RD_WRN : 0); STM32_FMPI2C_CR2(port) = reg; @@ -400,8 +401,9 @@ static void fmpi2c_clear_regs(int port) * * @return EC_SUCCESS on success. */ -static int chip_fmpi2c_xfer(int port, int slave_addr, const uint8_t *out, - int out_bytes, uint8_t *in, int in_bytes, int flags) +static int chip_fmpi2c_xfer__8b(const int port, const uint16_t slave_addr__8b, + const uint8_t *out, int out_bytes, + uint8_t *in, int in_bytes, int flags) { int started = (flags & I2C_XFER_START) ? 0 : 1; int rv = EC_SUCCESS; @@ -420,8 +422,8 @@ static int chip_fmpi2c_xfer(int port, int slave_addr, const uint8_t *out, /* No out bytes and no in bytes means just check for active */ if (out_bytes || !in_bytes) { - rv = send_fmpi2c_start( - port, slave_addr, out_bytes, FMPI2C_WRITE); + rv = send_fmpi2c_start__8b( + port, slave_addr__8b, out_bytes, FMPI2C_WRITE); if (rv) goto xfer_exit; @@ -446,8 +448,8 @@ static int chip_fmpi2c_xfer(int port, int slave_addr, const uint8_t *out, dma_start_rx(dma, in_bytes, in); i2c_dma_enable_tc_interrupt(dma->channel, port); - rv_start = send_fmpi2c_start( - port, slave_addr, in_bytes, FMPI2C_READ); + rv_start = send_fmpi2c_start__8b( + port, slave_addr__8b, in_bytes, FMPI2C_READ); if (rv_start) goto xfer_exit; @@ -551,9 +553,11 @@ static void i2c_clear_regs(int port) */ /* Perform an i2c transaction. */ -int chip_i2c_xfer(int port, int slave_addr, const uint8_t *out, int out_bytes, +int chip_i2c_xfer__7bf(const int port, const uint16_t slave_addr__7bf, + const uint8_t *out, int out_bytes, uint8_t *in, int in_bytes, int flags) { + int addr__8b = I2C_GET_ADDR__7b(slave_addr__7bf) << 1; int started = (flags & I2C_XFER_START) ? 0 : 1; int rv = EC_SUCCESS; int i; @@ -564,15 +568,16 @@ int chip_i2c_xfer(int port, int slave_addr, const uint8_t *out, int out_bytes, ASSERT(!started); if (p->port == STM32F4_FMPI2C_PORT) { - return chip_fmpi2c_xfer(port, slave_addr, out, out_bytes, - in, in_bytes, flags); + return chip_fmpi2c_xfer__8b(port, addr__8b, + out, out_bytes, + in, in_bytes, flags); } i2c_clear_regs(port); /* No out bytes and no in bytes means just check for active */ if (out_bytes || !in_bytes) { - rv = send_start(port, slave_addr); + rv = send_start__8b(port, addr__8b); if (rv) goto xfer_exit; @@ -611,7 +616,7 @@ int chip_i2c_xfer(int port, int slave_addr, const uint8_t *out, int out_bytes, STM32_I2C_CR2(port) |= STM32_I2C_CR2_LAST; STM32_I2C_CR2(port) |= STM32_I2C_CR2_DMAEN; - rv_start = send_start(port, slave_addr | 0x01); + rv_start = send_start__8b(port, addr__8b | 0x01); if ((in_bytes == 1) && (flags & I2C_XFER_STOP)) STM32_I2C_CR1(port) |= STM32_I2C_CR1_STOP; @@ -755,7 +760,7 @@ DECLARE_HOOK(HOOK_FREQ_CHANGE, i2c_freq_change_hook, HOOK_PRIO_DEFAULT); /*****************************************************************************/ /* Slave */ -#ifdef CONFIG_HOSTCMD_I2C_SLAVE_ADDR +#ifdef CONFIG_HOSTCMD_I2C_SLAVE_ADDR__7BF /* Host command slave */ /* * Buffer for received host command packets (including prefix byte on request, @@ -834,7 +839,7 @@ static void i2c_process_command(void) host_packet_receive(&i2c_packet); } -#ifdef CONFIG_BOARD_I2C_SLAVE_ADDR +#ifdef CONFIG_BOARD_I2C_SLAVE_ADDR__7BF static void i2c_send_board_response(int len) { /* host_buffer data range, beyond this length, will return 0xec */ @@ -858,7 +863,7 @@ static void i2c_event_handler(int port) volatile uint32_t i2c_sr2; volatile uint32_t i2c_sr1; static int rx_pending, buf_idx; - static uint16_t addr; + static uint16_t addr__8b; volatile uint32_t dummy __attribute__((unused)); @@ -883,15 +888,15 @@ static void i2c_event_handler(int port) /* Transfer matched our slave address */ if (i2c_sr1 & STM32_I2C_SR1_ADDR) { - addr = ((i2c_sr2 & STM32_I2C_SR2_DUALF) ? + addr__8b = ((i2c_sr2 & STM32_I2C_SR2_DUALF) ? STM32_I2C_OAR2(port) : STM32_I2C_OAR1(port)) & 0xfe; if (i2c_sr2 & STM32_I2C_SR2_TRA) { /* Transmitter slave */ i2c_sr1 |= STM32_I2C_SR1_TXE; -#ifdef CONFIG_BOARD_I2C_SLAVE_ADDR +#ifdef CONFIG_BOARD_I2C_SLAVE_ADDR__7BF if (!rx_pending && !tx_pending) { tx_pending = 1; - i2c_process_board_command(1, addr, 0); + i2c_process_board_command(1, addr__8b, 0); } #endif } else { @@ -926,9 +931,11 @@ static void i2c_event_handler(int port) host_i2c_resp_port = port; /* Disable buffer interrupt */ STM32_I2C_CR2(port) &= ~STM32_I2C_CR2_ITBUFEN; -#ifdef CONFIG_BOARD_I2C_SLAVE_ADDR - if (addr == CONFIG_BOARD_I2C_SLAVE_ADDR) - i2c_process_board_command(1, addr, +#ifdef CONFIG_BOARD_I2C_SLAVE_ADDR__7BF + if ((addr__8b >> 1) == + I2C_GET_ADDR__7b( + CONFIG_BOARD_I2C_SLAVE_ADDR__7BF)) + i2c_process_board_command(1, addr__8b, buf_idx); else #endif @@ -950,9 +957,11 @@ static void i2c_event_handler(int port) /* Disable buffer interrupt */ STM32_I2C_CR2(port) &= ~STM32_I2C_CR2_ITBUFEN; -#ifdef CONFIG_BOARD_I2C_SLAVE_ADDR - if (rx_pending && addr == CONFIG_BOARD_I2C_SLAVE_ADDR) - i2c_process_board_command(0, addr, buf_idx); +#ifdef CONFIG_BOARD_I2C_SLAVE_ADDR__7BF + if (rx_pending && + (addr__8b >> 1) == + I2C_GET_ADDR__7b(CONFIG_BOARD_I2C_SLAVE_ADDR__7BF)) + i2c_process_board_command(0, addr__8b, buf_idx); #endif rx_pending = 0; tx_pending = 0; @@ -987,7 +996,7 @@ static void i2c_init(void) i2c_init_port(p); -#ifdef CONFIG_HOSTCMD_I2C_SLAVE_ADDR +#ifdef CONFIG_HOSTCMD_I2C_SLAVE_ADDR__7BF /* Enable ACK */ STM32_I2C_CR1(I2C_PORT_EC) |= STM32_I2C_CR1_ACK; /* Enable interrupts */ @@ -995,10 +1004,10 @@ static void i2c_init(void) | STM32_I2C_CR2_ITERREN; /* Setup host command slave */ STM32_I2C_OAR1(I2C_PORT_EC) = STM32_I2C_OAR1_B14 - | CONFIG_HOSTCMD_I2C_SLAVE_ADDR; -#ifdef CONFIG_BOARD_I2C_SLAVE_ADDR + | (I2C_GET_ADDR__7b(CONFIG_HOSTCMD_I2C_SLAVE_ADDR__7BF) << 1); +#ifdef CONFIG_BOARD_I2C_SLAVE_ADDR__7BF STM32_I2C_OAR2(I2C_PORT_EC) = STM32_I2C_OAR2_ENDUAL - | CONFIG_BOARD_I2C_SLAVE_ADDR; + | (I2C_GET_ADDR__7b(CONFIG_BOARD_I2C_SLAVE_ADDR__7BF) << 1); #endif task_enable_irq(IRQ_SLAVE_EV); task_enable_irq(IRQ_SLAVE_ER); diff --git a/chip/stm32/i2c-stm32l.c b/chip/stm32/i2c-stm32l.c index 42fe3513a9..d56d78d8eb 100644 --- a/chip/stm32/i2c-stm32l.c +++ b/chip/stm32/i2c-stm32l.c @@ -98,7 +98,7 @@ static int wait_sr1(int port, int mask) * * @return Non-zero if error. */ -static int send_start(int port, int slave_addr) +static int send_start__8b(int port, uint16_t slave_addr__8b) { int rv; @@ -110,7 +110,7 @@ static int send_start(int port, int slave_addr) return I2C_ERROR_FAILED_START; /* Write slave address */ - STM32_I2C_DR(port) = slave_addr & 0xff; + STM32_I2C_DR(port) = slave_addr__8b & 0xff; rv = wait_sr1(port, STM32_I2C_SR1_ADDR); if (rv) return rv; @@ -164,9 +164,12 @@ static void i2c_init_port(const struct i2c_port_t *p) /*****************************************************************************/ /* Interface */ -int chip_i2c_xfer(int port, int slave_addr, const uint8_t *out, int out_bytes, +int chip_i2c_xfer__7bf(const int port, + const uint16_t slave_addr__7bf, + const uint8_t *out, int out_bytes, uint8_t *in, int in_bytes, int flags) { + int addr__8b == I2C_GET_ADDR__7b(slave_addr__7bf) << 1; int started = (flags & I2C_XFER_START) ? 0 : 1; int rv = EC_SUCCESS; int i; @@ -193,7 +196,7 @@ int chip_i2c_xfer(int port, int slave_addr, const uint8_t *out, int out_bytes, /* No out bytes and no in bytes means just check for active */ if (out_bytes || !in_bytes) { if (!started) { - rv = send_start(port, slave_addr); + rv = send_start__8b(port, addr__8b); if (rv) goto xfer_exit; } @@ -225,7 +228,7 @@ int chip_i2c_xfer(int port, int slave_addr, const uint8_t *out, int out_bytes, STM32_I2C_CR1(port) |= STM32_I2C_CR1_ACK; if (!started) { - rv = send_start(port, slave_addr | 0x01); + rv = send_start__8b(port, addr__8b | 0x01); if (rv) goto xfer_exit; } diff --git a/chip/stm32/i2c-stm32l4.c b/chip/stm32/i2c-stm32l4.c index 06836dd547..e263394880 100644 --- a/chip/stm32/i2c-stm32l4.c +++ b/chip/stm32/i2c-stm32l4.c @@ -26,7 +26,7 @@ /* Transmit timeout in microseconds */ #define I2C_TX_TIMEOUT_MASTER (10 * MSEC) -#ifdef CONFIG_HOSTCMD_I2C_SLAVE_ADDR +#ifdef CONFIG_HOSTCMD_I2C_SLAVE_ADDR__7BF #define I2C_SLAVE_ERROR_CODE 0xec #if (I2C_PORT_EC == STM32_I2C1_PORT) #define IRQ_SLAVE STM32_IRQ_I2C1 @@ -177,7 +177,7 @@ static void i2c_init_port(const struct i2c_port_t *p) /*****************************************************************************/ -#ifdef CONFIG_HOSTCMD_I2C_SLAVE_ADDR +#ifdef CONFIG_HOSTCMD_I2C_SLAVE_ADDR__7BF static void i2c_event_handler(int port) { @@ -303,9 +303,11 @@ DECLARE_IRQ(IRQ_SLAVE, i2c_event_interrupt, 2); /*****************************************************************************/ /* Interface */ -int chip_i2c_xfer(int port, int slave_addr, const uint8_t *out, int out_bytes, +int chip_i2c_xfer__7bf(const int port, const uint16_t slave_addr__7bf, + const uint8_t *out, int out_bytes, uint8_t *in, int in_bytes, int flags) { + int addr__8b = I2C_GET_ADDR__7b(slave_addr__7bf) << 1; int rv = EC_SUCCESS; int i; int xfer_start = flags & I2C_XFER_START; @@ -328,7 +330,7 @@ int chip_i2c_xfer(int port, int slave_addr, const uint8_t *out, int out_bytes, * NBYTES again. if we are starting, then set START bit. */ STM32_I2C_CR2(port) = ((out_bytes & 0xFF) << 16) - | slave_addr + | addr__8b | ((in_bytes == 0 && xfer_stop) ? STM32_I2C_CR2_AUTOEND : 0) | ((in_bytes == 0 && !xfer_stop) ? @@ -357,7 +359,7 @@ int chip_i2c_xfer(int port, int slave_addr, const uint8_t *out, int out_bytes, * set START bit to send (re)start and begin read transaction. */ STM32_I2C_CR2(port) = ((in_bytes & 0xFF) << 16) - | STM32_I2C_CR2_RD_WRN | slave_addr + | STM32_I2C_CR2_RD_WRN | addr__8b | (xfer_stop ? STM32_I2C_CR2_AUTOEND : 0) | (!xfer_stop ? STM32_I2C_CR2_RELOAD : 0) | (out_bytes || xfer_start ? STM32_I2C_CR2_START : 0); @@ -451,11 +453,12 @@ static void i2c_init(void) for (i = 0; i < i2c_ports_used; i++, p++) i2c_init_port(p); -#ifdef CONFIG_HOSTCMD_I2C_SLAVE_ADDR +#ifdef CONFIG_HOSTCMD_I2C_SLAVE_ADDR__7BF STM32_I2C_CR1(I2C_PORT_EC) |= STM32_I2C_CR1_RXIE | STM32_I2C_CR1_ERRIE | STM32_I2C_CR1_ADDRIE | STM32_I2C_CR1_STOPIE | STM32_I2C_CR1_NACKIE; - STM32_I2C_OAR1(I2C_PORT_EC) = 0x8000 | CONFIG_HOSTCMD_I2C_SLAVE_ADDR; + STM32_I2C_OAR1(I2C_PORT_EC) = 0x8000 + | (I2C_GET_ADDR__7b(CONFIG_HOSTCMD_I2C_SLAVE_ADDR__7BF) << 1); task_enable_irq(IRQ_SLAVE); #endif } diff --git a/chip/stm32/usb_power.c b/chip/stm32/usb_power.c index 7e4206e83b..4cf8bac99e 100644 --- a/chip/stm32/usb_power.c +++ b/chip/stm32/usb_power.c @@ -249,7 +249,7 @@ static int usb_power_state_addina(struct usb_power_config const *config, ina = state->ina_cfg + state->ina_count; ina->port = cmd->addina.port; - ina->addr = (cmd->addina.addr) << 1; /* 7 to 8 bit addr. */ + ina->addr__7bf = cmd->addina.addr__7bf; ina->rs = cmd->addina.rs; ina->type = cmd->addina.type; @@ -270,7 +270,7 @@ static int usb_power_state_addina(struct usb_power_config const *config, struct usb_power_ina_cfg *tmp = state->ina_cfg + i; if ((tmp->port == ina->port) && - (tmp->addr == ina->addr)) { + (tmp->addr__7bf == ina->addr__7bf)) { ina->shared = 1; tmp->shared = 1; } @@ -406,42 +406,46 @@ int reg_type_mapping(enum usb_power_ina_type ina_type) } } -uint16_t ina2xx_readagain(uint8_t port, uint8_t addr) +uint16_t ina2xx_readagain__7bf(uint8_t port, uint16_t slave_addr__7bf) { int res; uint16_t val; - res = i2c_xfer(port, addr, NULL, 0, (uint8_t *)&val, sizeof(uint16_t)); + res = i2c_xfer__7bf(port, slave_addr__7bf, + NULL, 0, (uint8_t *)&val, sizeof(uint16_t)); if (res) { CPRINTS("INA2XX I2C readagain failed p:%d a:%02x", - (int)port, (int)addr); + (int)port, (int)I2C_GET_ADDR__7b(slave_addr__7bf)); return 0x0bad; } return (val >> 8) | ((val & 0xff) << 8); } -uint16_t ina2xx_read(uint8_t port, uint8_t addr, uint8_t reg) +uint16_t ina2xx_read__7bf(uint8_t port, uint16_t slave_addr__7bf, + uint8_t reg) { int res; int val; - res = i2c_read16(port, addr, reg, &val); + res = i2c_read16__7bf(port, slave_addr__7bf, reg, &val); if (res) { CPRINTS("INA2XX I2C read failed p:%d a:%02x, r:%02x", - (int)port, (int)addr, (int)reg); + (int)port, (int)I2C_GET_ADDR__7b(slave_addr__7bf), + (int)reg); return 0x0bad; } return (val >> 8) | ((val & 0xff) << 8); } -int ina2xx_write(uint8_t port, uint8_t addr, uint8_t reg, uint16_t val) +int ina2xx_write__7bf(uint8_t port, uint16_t slave_addr__7bf, + uint8_t reg, uint16_t val) { int res; uint16_t be_val = (val >> 8) | ((val & 0xff) << 8); - res = i2c_write16(port, addr, reg, be_val); + res = i2c_write16__7bf(port, slave_addr__7bf, reg, be_val); if (res) CPRINTS("INA2XX I2C write failed"); return res; @@ -505,10 +509,13 @@ static int usb_power_init_inas(struct usb_power_config const *config) { int conf, cal; - conf = ina2xx_read(ina->port, ina->addr, INA231_REG_CONF); - cal = ina2xx_read(ina->port, ina->addr, INA231_REG_CAL); + conf = ina2xx_read__7bf(ina->port, ina->addr__7bf, + INA231_REG_CONF); + cal = ina2xx_read__7bf(ina->port, ina->addr__7bf, + INA231_REG_CAL); CPRINTS("[CAP] %d (%d,0x%02x): conf:%x, cal:%x", - i, ina->port, ina->addr, conf, cal); + i, ina->port, I2C_GET_ADDR__7b(ina->addr__7bf), + conf, cal); } #endif /* @@ -529,7 +536,8 @@ static int usb_power_init_inas(struct usb_power_config const *config) if (ina->scale == 0) return -1; value = (5120000 * 100) / (ina->scale * ina->rs); - ret = ina2xx_write(ina->port, ina->addr, INA231_REG_CAL, value); + ret = ina2xx_write__7bf(ina->port, ina->addr__7bf, + INA231_REG_CAL, value); if (ret != EC_SUCCESS) { CPRINTS("[CAP] usb_power_init_inas CAL FAIL: %d", ret); return ret; @@ -538,7 +546,8 @@ static int usb_power_init_inas(struct usb_power_config const *config) { int actual; - actual = ina2xx_read(ina->port, ina->addr, INA231_REG_CAL); + actual = ina2xx_read__7bf(ina->port, ina->addr__7bf, + INA231_REG_CAL); CPRINTS("[CAP] scale: %d uA/div, %d uW/div, cal:%x act:%x", ina->scale / 100, ina->scale*25/100, value, actual); } @@ -548,8 +557,8 @@ static int usb_power_init_inas(struct usb_power_config const *config) INA231_CONF_SHUNT_TIME(shunt_time) | INA231_CONF_BUS_TIME(shunt_time) | INA231_CONF_AVG(avg); - ret = ina2xx_write( - ina->port, ina->addr, INA231_REG_CONF, value); + ret = ina2xx_write__7bf(ina->port, ina->addr__7bf, + INA231_REG_CONF, value); if (ret != EC_SUCCESS) { CPRINTS("[CAP] usb_power_init_inas CONF FAIL: %d", ret); return ret; @@ -558,26 +567,31 @@ static int usb_power_init_inas(struct usb_power_config const *config) { int actual; - actual = ina2xx_read(ina->port, ina->addr, INA231_REG_CONF); + actual = ina2xx_read__7bf(ina->port, ina->addr__7bf, + INA231_REG_CONF); CPRINTS("[CAP] %d (%d,0x%02x): conf:%x, act:%x", - i, ina->port, ina->addr, value, actual); + i, ina->port, I2C_GET_ADDR__7b(ina->addr__7bf), + value, actual); } #endif #ifdef USB_POWER_VERBOSE { int busv_mv = - (ina2xx_read(ina->port, ina->addr, INA231_REG_BUSV) + (ina2xx_read__7bf(ina->port, ina->addr__7bf, + INA231_REG_BUSV) * 125) / 100; CPRINTS("[CAP] %d (%d,0x%02x): busv:%dmv", - i, ina->port, ina->addr, busv_mv); + i, ina->port, I2C_GET_ADDR__7b(ina->addr__7bf), + busv_mv); } #endif /* Initialize read from power register. This register address * will be cached and all ina2xx_readagain() calls will read * from the same address. */ - ina2xx_read(ina->port, ina->addr, reg_type_mapping(ina->type)); + ina2xx_read__7bf(ina->port, ina->addr__7bf, + reg_type_mapping(ina->type)); #ifdef USB_POWER_VERBOSE CPRINTS("[CAP] %d (%d,0x%02x): type:%d", (int)(ina->type)); #endif @@ -635,10 +649,11 @@ static int usb_power_get_samples(struct usb_power_config const *config) * transaction. */ if (ina->shared) - regval = ina2xx_read(ina->port, ina->addr, + regval = ina2xx_read__7bf(ina->port, ina->addr__7bf, reg_type_mapping(ina->type)); else - regval = ina2xx_readagain(ina->port, ina->addr); + regval = ina2xx_readagain__7bf(ina->port, + ina->addr__7bf); r->power[i] = regval; #ifdef USB_POWER_VERBOSE { @@ -647,10 +662,14 @@ static int usb_power_get_samples(struct usb_power_config const *config) int voltage; int bvoltage; - voltage = ina2xx_read(ina->port, ina->addr, INA231_REG_RSHV); - bvoltage = ina2xx_read(ina->port, ina->addr, INA231_REG_BUSV); - current = ina2xx_read(ina->port, ina->addr, INA231_REG_CURR); - power = ina2xx_read(ina->port, ina->addr, INA231_REG_PWR); + voltage = ina2xx_read__7bf(ina->port, ina->addr__7bf, + INA231_REG_RSHV); + bvoltage = ina2xx_read__7bf(ina->port, ina->addr__7bf, + INA231_REG_BUSV); + current = ina2xx_read__7bf(ina->port, ina->addr__7bf, + INA231_REG_CURR); + power = ina2xx_read__7bf(ina->port, ina->addr__7bf, + INA231_REG_PWR); { int uV = ((int)voltage * 25) / 10; int mV = ((int)bvoltage * 125) / 100; @@ -659,7 +678,8 @@ static int usb_power_get_samples(struct usb_power_config const *config) int uW = (((int)power * ina->scale*25)/100); CPRINTS("[CAP] %d (%d,0x%02x): %dmV / %dmO = %dmA", - i, ina->port, ina->addr, uV/1000, ina->rs, uA/1000); + i, ina->port, I2C_GET_ADDR__7b(ina->addr__7bf), + uV/1000, ina->rs, uA/1000); CPRINTS("[CAP] %duV %dmV %duA %dCuA " "%duW v:%04x, b:%04x, p:%04x", uV, mV, uA, CuA, uW, voltage, bvoltage, power); diff --git a/chip/stm32/usb_power.h b/chip/stm32/usb_power.h index ff76603e63..f2f1426691 100644 --- a/chip/stm32/usb_power.h +++ b/chip/stm32/usb_power.h @@ -138,7 +138,7 @@ struct usb_power_ina_cfg { /* i2c bus. TODO(nsanders): specify what kind of index. */ int port; /* 7-bit i2c addr */ - int addr; + uint16_t addr__7bf; /* Base voltage. mV */ int mv; @@ -243,7 +243,7 @@ struct __attribute__ ((__packed__)) usb_power_command_addina { uint16_t command; uint8_t port; uint8_t type; - uint8_t addr; + uint16_t addr__7bf; uint8_t extra; uint32_t rs; }; |