summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--board/delbin/board.c29
-rw-r--r--board/trembyle/board.c4
-rw-r--r--board/woomax/board.c2
-rw-r--r--driver/retimer/ps8811.h11
4 files changed, 42 insertions, 4 deletions
diff --git a/board/delbin/board.c b/board/delbin/board.c
index 1c712724bc..cb58616607 100644
--- a/board/delbin/board.c
+++ b/board/delbin/board.c
@@ -12,6 +12,7 @@
#include "driver/accelgyro_bmi260.h"
#include "driver/bc12/pi3usb9201.h"
#include "driver/ppc/syv682x.h"
+#include "driver/retimer/ps8811.h"
#include "driver/tcpm/ps8xxx.h"
#include "driver/tcpm/tcpci.h"
#include "driver/tcpm/tusb422.h"
@@ -342,6 +343,34 @@ __override const struct ec_response_keybd_config
return &delbin_kb;
}
+static void ps8811_init(void)
+{
+ int rv;
+
+ /* Set Channel A output swing to Level1 */
+ rv = i2c_write8(I2C_PORT_USB_1_MIX,
+ PS8811_I2C_ADDR_FLAGS0 + PS8811_REG_PAGE1, 0x66, 0x10);
+ /* Set 50 ohm termination adjuct for B channel: -9%*/
+ rv |= i2c_write8(I2C_PORT_USB_1_MIX,
+ PS8811_I2C_ADDR_FLAGS0 + PS8811_REG_PAGE1, 0x73, 0x04);
+ /* Set Channel B output swing to Level3 */
+ rv |= i2c_write8(I2C_PORT_USB_1_MIX,
+ PS8811_I2C_ADDR_FLAGS0 + PS8811_REG_PAGE1, 0xA4, 0x03);
+ /* Set PS level for B channel */
+ rv |= i2c_write8(I2C_PORT_USB_1_MIX,
+ PS8811_I2C_ADDR_FLAGS0 + PS8811_REG_PAGE1, 0xA5, 0x84);
+ /* Set DE level for B channel */
+ rv |= i2c_write8(I2C_PORT_USB_1_MIX,
+ PS8811_I2C_ADDR_FLAGS0 + PS8811_REG_PAGE1, 0xA6, 0x16);
+}
+
+/* Called on AP S5 -> S0ix transition */
+static void board_chipset_startup(void)
+{
+ ps8811_init();
+}
+DECLARE_HOOK(HOOK_CHIPSET_STARTUP, board_chipset_startup, HOOK_PRIO_DEFAULT);
+
/* Called on AP S0ix -> S0 transition */
static void board_chipset_resume(void)
{
diff --git a/board/trembyle/board.c b/board/trembyle/board.c
index 1384107732..31bac3b276 100644
--- a/board/trembyle/board.c
+++ b/board/trembyle/board.c
@@ -210,7 +210,7 @@ static void board_chipset_resume(void)
int val;
rv = i2c_read8(I2C_PORT_USBA0,
- PS8811_I2C_ADDR_FLAGS + PS8811_REG_PAGE1,
+ PS8811_I2C_ADDR_FLAGS3 + PS8811_REG_PAGE1,
PS8811_REG1_USB_BEQ_LEVEL, &val);
if (!rv)
break;
@@ -223,7 +223,7 @@ static void board_chipset_resume(void)
/* USB-A1 needs to increase gain to get over MB/DB connector */
for (retry = 0; retry < PS8811_ACCESS_RETRIES; ++retry) {
rv = i2c_write8(I2C_PORT_USBA1,
- PS8811_I2C_ADDR_FLAGS + PS8811_REG_PAGE1,
+ PS8811_I2C_ADDR_FLAGS3 + PS8811_REG_PAGE1,
PS8811_REG1_USB_BEQ_LEVEL,
PS8811_BEQ_I2C_LEVEL_UP_13DB |
PS8811_BEQ_PIN_LEVEL_UP_18DB);
diff --git a/board/woomax/board.c b/board/woomax/board.c
index bb212bface..1fd0dcd39b 100644
--- a/board/woomax/board.c
+++ b/board/woomax/board.c
@@ -224,7 +224,7 @@ static void board_chipset_resume(void)
int val;
rv = i2c_read8(I2C_PORT_USBA0,
- PS8811_I2C_ADDR_FLAGS + PS8811_REG_PAGE1,
+ PS8811_I2C_ADDR_FLAGS3 + PS8811_REG_PAGE1,
PS8811_REG1_USB_BEQ_LEVEL, &val);
if (!rv)
break;
diff --git a/driver/retimer/ps8811.h b/driver/retimer/ps8811.h
index 13a83c045d..03cf8f604e 100644
--- a/driver/retimer/ps8811.h
+++ b/driver/retimer/ps8811.h
@@ -9,10 +9,19 @@
#define __CROS_EC_USB_RETIMER_PS8811_H
/*
+ * PS8811 uses 7-bit I2C addresses 0x28 to 0x29 (ADDR=LL).
+ * Page 0 = 0x28, Page 1 = 0x29.
+ * PS8811 uses 7-bit I2C addresses 0x2A to 0x2B (ADDR=LH).
+ * Page 0 = 0x2A, Page 1 = 0x2B.
+ * PS8811 uses 7-bit I2C addresses 0x70 to 0x71 (ADDR=HL).
+ * Page 0 = 0x70, Page 1 = 0x71.
* PS8811 uses 7-bit I2C addresses 0x72 to 0x73 (ADDR=HH).
* Page 0 = 0x72, Page 1 = 0x73.
*/
-#define PS8811_I2C_ADDR_FLAGS 0x72
+#define PS8811_I2C_ADDR_FLAGS0 0x28
+#define PS8811_I2C_ADDR_FLAGS1 0x2A
+#define PS8811_I2C_ADDR_FLAGS2 0x70
+#define PS8811_I2C_ADDR_FLAGS3 0x72
/*
* PAGE 1 Register Definitions