summaryrefslogtreecommitdiff
path: root/chip
diff options
context:
space:
mode:
authorDenis Brockus <dbrockus@chromium.org>2019-06-25 12:44:16 -0600
committerCommit Bot <commit-bot@chromium.org>2019-07-19 21:11:02 +0000
commitd1a18f82ed831d4e640336ff5571f5fa64bc7b36 (patch)
treec46aeb6136de1c27c66e3d5f662e9620161bef7b /chip
parent1f14229fa7e499dfcee07d17add187598ff0a46c (diff)
downloadchrome-ec-d1a18f82ed831d4e640336ff5571f5fa64bc7b36.tar.gz
Use 7bit I2C/SPI slave addresses in EC
Opt for 7bit slave addresses in EC code. If 8bit is expected by a driver, make it local and show this in the naming. Use __7b, __7bf and __8b as name extensions for i2c/spi addresses used in the EC codebase. __7b indicates a 7bit address by itself. __7bf indicates a 7bit address with optional flags attached. __8b indicates a 8bit address by itself. Allow space for 10bit addresses, even though this is not currently being used by any of our attached devices. These extensions are for verification purposes only and will be removed in the last pass of this ticket. I want to make sure the variable names reflect the type to help eliminate future 7/8/7-flags confusion. BUG=chromium:971296 BRANCH=none TEST=make buildall -j Change-Id: I2fc3d1b52ce76184492b2aaff3060f486ca45f45 Signed-off-by: Denis Brockus <dbrockus@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/1699893 Reviewed-by: Jack Rosenthal <jrosenth@chromium.org>
Diffstat (limited to 'chip')
-rw-r--r--chip/g/i2cm.c23
-rw-r--r--chip/host/i2c.c23
-rw-r--r--chip/ish/i2c.c18
-rw-r--r--chip/it83xx/i2c.c25
-rw-r--r--chip/lm4/i2c.c15
-rw-r--r--chip/mchp/i2c.c15
-rw-r--r--chip/mec1322/i2c.c14
-rw-r--r--chip/npcx/i2c.c25
-rw-r--r--chip/nrf51/i2c.c22
-rw-r--r--chip/stm32/i2c-stm32f0.c26
-rw-r--r--chip/stm32/i2c-stm32f4.c73
-rw-r--r--chip/stm32/i2c-stm32l.c13
-rw-r--r--chip/stm32/i2c-stm32l4.c17
-rw-r--r--chip/stm32/usb_power.c78
-rw-r--r--chip/stm32/usb_power.h4
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;
};