summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCaveh Jalali <caveh@chromium.org>2020-06-17 19:06:55 -0700
committerCommit Bot <commit-bot@chromium.org>2020-06-23 14:38:20 +0000
commit04c1d97690c0a58ae63de8c11776540419654627 (patch)
treea455ef2335a8c2b0b07edeb445a4b57ec83d72ba
parent98a373b76fafde1c2b96d9c3fb61376662d557ff (diff)
downloadchrome-ec-04c1d97690c0a58ae63de8c11776540419654627.tar.gz
tcpci: add 16-bit TCPC I2C accessors
this extends the TCPC I2C access API to provide 16-bit accessors for vendor specific pages of a TCPC. some TCPCs, like the ps8xxx series define registers in pages beyond the TCPCI definition for vendor specific functions. BRANCH=none BUG=b:158857815 TEST=buildall -j succeeds Change-Id: I115ab305317a0816e625718676b2bedfaa39e70d Signed-off-by: Caveh Jalali <caveh@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2254991 Reviewed-by: Keith Short <keithshort@chromium.org>
-rw-r--r--driver/tcpm/tcpci.c8
-rw-r--r--driver/tcpm/tcpm.h26
2 files changed, 21 insertions, 13 deletions
diff --git a/driver/tcpm/tcpci.c b/driver/tcpm/tcpci.c
index 1993c52a65..a3c4b6fe7c 100644
--- a/driver/tcpm/tcpci.c
+++ b/driver/tcpm/tcpci.c
@@ -112,10 +112,9 @@ int tcpc_addr_write(int port, int i2c_addr, int reg, int val)
return rv;
}
-int tcpc_write16(int port, int reg, int val)
+int tcpc_addr_write16(int port, int i2c_addr, int reg, int val)
{
int rv;
- const int i2c_addr = tcpc_config[port].i2c_info.addr_flags;
pd_wait_exit_low_power(port);
@@ -146,15 +145,14 @@ int tcpc_addr_read(int port, int i2c_addr, int reg, int *val)
return rv;
}
-int tcpc_read16(int port, int reg, int *val)
+int tcpc_addr_read16(int port, int i2c_addr, int reg, int *val)
{
int rv;
pd_wait_exit_low_power(port);
rv = i2c_read16(tcpc_config[port].i2c_info.port,
- tcpc_config[port].i2c_info.addr_flags,
- reg, val);
+ i2c_addr, reg, val);
pd_device_accessed(port);
return rv;
diff --git a/driver/tcpm/tcpm.h b/driver/tcpm/tcpm.h
index 14f44a9073..c8477217de 100644
--- a/driver/tcpm/tcpm.h
+++ b/driver/tcpm/tcpm.h
@@ -31,11 +31,10 @@ static inline int tcpc_addr_write(int port, int i2c_addr, int reg, int val)
i2c_addr, reg, val);
}
-static inline int tcpc_write16(int port, int reg, int val)
+static inline int tcpc_addr_write16(int port, int i2c_addr, int reg, int val)
{
return i2c_write16(tcpc_config[port].i2c_info.port,
- tcpc_config[port].i2c_info.addr_flags,
- reg, val);
+ i2c_addr, reg, val);
}
static inline int tcpc_addr_read(int port, int i2c_addr, int reg, int *val)
@@ -44,11 +43,10 @@ static inline int tcpc_addr_read(int port, int i2c_addr, int reg, int *val)
i2c_addr, reg, val);
}
-static inline int tcpc_read16(int port, int reg, int *val)
+static inline int tcpc_addr_read16(int port, int i2c_addr, int reg, int *val)
{
return i2c_read16(tcpc_config[port].i2c_info.port,
- tcpc_config[port].i2c_info.addr_flags,
- reg, val);
+ i2c_addr, reg, val);
}
static inline int tcpc_xfer(int port, const uint8_t *out, int out_size,
@@ -102,9 +100,9 @@ static inline int tcpc_update16(int port, int reg,
#else /* !CONFIG_USB_PD_TCPC_LOW_POWER */
int tcpc_addr_write(int port, int i2c_addr, int reg, int val);
-int tcpc_write16(int port, int reg, int val);
+int tcpc_addr_write16(int port, int i2c_addr, int reg, int val);
int tcpc_addr_read(int port, int i2c_addr, int reg, int *val);
-int tcpc_read16(int port, int reg, int *val);
+int tcpc_addr_read16(int port, int i2c_addr, int reg, int *val);
int tcpc_read_block(int port, int reg, uint8_t *in, int size);
int tcpc_write_block(int port, int reg, const uint8_t *out, int size);
int tcpc_xfer(int port, const uint8_t *out, int out_size,
@@ -125,12 +123,24 @@ static inline int tcpc_write(int port, int reg, int val)
tcpc_config[port].i2c_info.addr_flags, reg, val);
}
+static inline int tcpc_write16(int port, int reg, int val)
+{
+ return tcpc_addr_write16(port,
+ tcpc_config[port].i2c_info.addr_flags, reg, val);
+}
+
static inline int tcpc_read(int port, int reg, int *val)
{
return tcpc_addr_read(port,
tcpc_config[port].i2c_info.addr_flags, reg, val);
}
+static inline int tcpc_read16(int port, int reg, int *val)
+{
+ return tcpc_addr_read16(port,
+ tcpc_config[port].i2c_info.addr_flags, reg, val);
+}
+
static inline void tcpc_lock(int port, int lock)
{
i2c_lock(tcpc_config[port].i2c_info.port, lock);