diff options
Diffstat (limited to 'driver/retimer/bb_retimer.c')
-rw-r--r-- | driver/retimer/bb_retimer.c | 35 |
1 files changed, 25 insertions, 10 deletions
diff --git a/driver/retimer/bb_retimer.c b/driver/retimer/bb_retimer.c index a6e7f87150..9a0caf5c4e 100644 --- a/driver/retimer/bb_retimer.c +++ b/driver/retimer/bb_retimer.c @@ -11,7 +11,6 @@ #include "i2c.h" #include "timer.h" #include "usb_pd.h" -#include "usb_retimer.h" #include "util.h" #define BB_RETIMER_REG_SIZE 4 @@ -21,6 +20,9 @@ #define CPRINTS(format, args...) cprints(CC_USBCHARGE, format, ## args) #define CPRINTF(format, args...) cprintf(CC_USBCHARGE, format, ## args) +/** + * Utility functions + */ static int bb_retimer_read(int port, const uint8_t offset, uint32_t *data) { int rv; @@ -33,8 +35,9 @@ static int bb_retimer_read(int port, const uint8_t offset, uint32_t *data) * byte[1:4] : Data [LSB -> MSB] * Stop */ - rv = i2c_xfer(bb_retimers[port].i2c_port, bb_retimers[port].i2c_addr, - &offset, 1, buf, BB_RETIMER_READ_SIZE); + rv = i2c_xfer(usb_retimers[port].i2c_port, + usb_retimers[port].i2c_addr_flags, + &offset, 1, buf, BB_RETIMER_READ_SIZE); if (rv) return rv; if (buf[0] != BB_RETIMER_REG_SIZE) @@ -64,16 +67,16 @@ static int bb_retimer_write(int port, const uint8_t offset, uint32_t data) buf[4] = (data >> 16) & 0xFF; buf[5] = (data >> 24) & 0xFF; - return i2c_xfer(bb_retimers[port].i2c_port, bb_retimers[port].i2c_addr, + return i2c_xfer(usb_retimers[port].i2c_port, + usb_retimers[port].i2c_addr_flags, buf, BB_RETIMER_WRITE_SIZE, NULL, 0); } static void bb_retimer_power_handle(int port, int on_off) { - struct bb_retimer *retimer; + const struct usb_retimer * const retimer = &usb_retimers[port]; /* handle retimer's power domain */ - retimer = &bb_retimers[port]; if (on_off) { gpio_set_level(retimer->usb_ls_en_gpio, 1); @@ -87,7 +90,10 @@ static void bb_retimer_power_handle(int port, int on_off) * time for both retimers to be initialized. Else allow 20ms * to initialize. */ - if (retimer->shared_nvm) + if ((USB_PORT0_BB_RETIMER_SHARED_NVM && + (port == TYPE_C_PORT_0)) || + (USB_PORT1_BB_RETIMER_SHARED_NVM && + (port == TYPE_C_PORT_1))) msleep(40); else msleep(20); @@ -100,7 +106,10 @@ static void bb_retimer_power_handle(int port, int on_off) } } -int retimer_set_state(int port, mux_state_t mux_state) +/** + * Driver interface functions + */ +static int retimer_set_state(int port, mux_state_t mux_state) { uint32_t set_retimer_con = 0; uint8_t dp_pin_mode; @@ -195,13 +204,13 @@ int retimer_set_state(int port, mux_state_t mux_state) set_retimer_con); } -int retimer_low_power_mode(int port) +static int retimer_low_power_mode(int port) { bb_retimer_power_handle(port, 0); return EC_SUCCESS; } -int retimer_init(int port) +static int retimer_init(int port) { int rv; uint32_t data; @@ -224,6 +233,12 @@ int retimer_init(int port) return EC_SUCCESS; } +const struct usb_retimer_driver bb_usb_retimer = { + .init = retimer_init, + .set = retimer_set_state, + .enter_low_power_mode = retimer_low_power_mode, +}; + #ifdef CONFIG_CMD_RETIMER static int console_command_bb_retimer(int argc, char **argv) { |