summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Chen <ben.chen2@quanta.corp-partner.google.com>2020-11-13 15:21:45 +0800
committerCommit Bot <commit-bot@chromium.org>2020-11-20 03:20:15 +0000
commite2cbd8277107164b0ed2c5180ddfd4418d62cb5c (patch)
tree4ddf49c0a754511dfcb4c21df9a4374b2e7158b1
parent49f18a1879e452630b89304c14156c7fd22a3605 (diff)
downloadchrome-ec-e2cbd8277107164b0ed2c5180ddfd4418d62cb5c.tar.gz
driver: add custom PS8802 I2C slave address
Add custom PS8802 slave address, page offset define, and switch PS8802 slave address change function. Be sure the slave device was not conflicted. BUG=b:168761485, b:168761483 BRANCH=none TEST=make buildall. Change-Id: I4c02b574de7dc932cacfffae0cb695cecf8f1a22 Signed-off-by: Ben Chen <ben.chen2@quanta.corp-partner.google.com> Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2537517 Reviewed-by: Diana Z <dzigterman@chromium.org> Reviewed-by: Aseda Aboagye <aaboagye@chromium.org>
-rw-r--r--driver/retimer/ps8802.c15
-rw-r--r--driver/retimer/ps8802.h10
2 files changed, 25 insertions, 0 deletions
diff --git a/driver/retimer/ps8802.c b/driver/retimer/ps8802.c
index cb81b84f4e..190bed8873 100644
--- a/driver/retimer/ps8802.c
+++ b/driver/retimer/ps8802.c
@@ -273,3 +273,18 @@ const struct usb_mux_driver ps8802_usb_mux_driver = {
.set = ps8802_set_mux,
.get = ps8802_get_mux,
};
+
+/*
+ * If PS8802 I2c slave address was conflicted, change
+ * the I2c slave address in page 0x0A, offset 0xB0
+ * switch to 0x50 slave address
+ */
+int ps8802_chg_i2c_addr(int i2c_port)
+{
+ int rv;
+
+ rv = i2c_write8(i2c_port,
+ PS8802_P1_ADDR, PS8802_ADDR_CFG, PS8802_I2C_SLAV_ADDR);
+
+ return rv;
+}
diff --git a/driver/retimer/ps8802.h b/driver/retimer/ps8802.h
index bdcf44dea8..4429db92ad 100644
--- a/driver/retimer/ps8802.h
+++ b/driver/retimer/ps8802.h
@@ -16,6 +16,12 @@
#define PS8802_I2C_ADDR_FLAGS 0x08
/*
+ * PS8802 uses 7-bit I2C addresses 0x28 to 0x37.
+ * Page 0 = 0x028, Page 1 = 0x29, Page 2 = 0x2A.
+ */
+#define PS8802_I2C_ADDR_FLAGS_CUSTOM 0x28
+
+/*
* PAGE 0 Register Definitions
*/
#define PS8802_REG_PAGE0 0x00
@@ -64,6 +70,9 @@
#define PS8802_DPEQ_LEVEL_UP_21DB 0x08
#define PS8802_DPEQ_LEVEL_UP_MASK 0x0F
+#define PS8802_P1_ADDR 0x0A
+#define PS8802_ADDR_CFG 0xB0
+#define PS8802_I2C_SLAV_ADDR 0x50
extern const struct usb_mux_driver ps8802_usb_mux_driver;
@@ -76,5 +85,6 @@ int ps8802_i2c_field_update8(const struct usb_mux *me, int page, int offset,
uint8_t field_mask, uint8_t set_value);
int ps8802_i2c_field_update16(const struct usb_mux *me, int page, int offset,
uint16_t field_mask, uint16_t set_value);
+int ps8802_chg_i2c_addr(int i2c_port);
#endif /* __CROS_EC_USB_RETIMER_PS8802_H */