diff options
-rw-r--r-- | board/delbin/board.c | 29 | ||||
-rw-r--r-- | board/trembyle/board.c | 4 | ||||
-rw-r--r-- | board/woomax/board.c | 2 | ||||
-rw-r--r-- | driver/retimer/ps8811.h | 11 |
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 |