diff options
Diffstat (limited to 'driver/retimer')
-rw-r--r-- | driver/retimer/tusb544.c | 17 | ||||
-rw-r--r-- | driver/retimer/tusb544.h | 55 |
2 files changed, 67 insertions, 5 deletions
diff --git a/driver/retimer/tusb544.c b/driver/retimer/tusb544.c index c9e2642651..e76e5bd976 100644 --- a/driver/retimer/tusb544.c +++ b/driver/retimer/tusb544.c @@ -22,6 +22,20 @@ static int tusb544_read(const struct usb_mux *me, int offset, int *data) offset, data); } +int tusb544_i2c_field_update8(const struct usb_mux *me, int offset, + uint8_t field_mask, uint8_t set_value) +{ + int rv; + + rv = i2c_field_update8(me->i2c_port, + me->i2c_addr_flags, + offset, + field_mask, + set_value); + + return rv; +} + static int tusb544_enter_low_power_mode(const struct usb_mux *me) { int reg; @@ -63,6 +77,9 @@ static int tusb544_set_mux(const struct usb_mux *me, mux_state_t mux_state) reg &= ~TUSB544_GEN4_CTL_SEL; + if (IS_ENABLED(CONFIG_TUSB544_EQ_BY_REGISTER)) + reg |= TUSB544_GEN4_EQ_OVRD; + if ((mux_state & USB_PD_MUX_USB_ENABLED) && (mux_state & USB_PD_MUX_DP_ENABLED)) { reg |= TUSB544_CTL_SEL_DP_USB; diff --git a/driver/retimer/tusb544.h b/driver/retimer/tusb544.h index 2c63a159ca..252cd2e38a 100644 --- a/driver/retimer/tusb544.h +++ b/driver/retimer/tusb544.h @@ -4,18 +4,60 @@ * * TI TUSB544 USB Type-C Multi-Protocol Linear Redriver */ +#include "usb_mux.h" #ifndef __CROS_EC_USB_REDRIVER_TUSB544_H #define __CROS_EC_USB_REDRIVER_TUSB544_H + #define TUSB544_I2C_ADDR_FLAGS0 0x44 #define TUSB544_REG_GENERAL4 0x0A -#define TUSB544_GEN4_CTL_SEL GENMASK(1, 0) -#define TUSB544_GEN4_FLIP_SEL BIT(2) -#define TUSB544_GEN4_HPDIN BIT(3) -#define TUSB544_GEN4_EQ_OVRD BIT(4) -#define TUSB544_GEN4_SWAP_SEL BIT(5) +#define TUSB544_GEN4_CTL_SEL GENMASK(1, 0) +#define TUSB544_GEN4_FLIP_SEL BIT(2) +#define TUSB544_GEN4_HPDIN BIT(3) +#define TUSB544_GEN4_EQ_OVRD BIT(4) +#define TUSB544_GEN4_SWAP_SEL BIT(5) + +#define TUSB544_REG_DISPLAYPORT_1 0x10 +#define TUSB544_REG_DISPLAYPORT_2 0x11 +#define TUSB544_REG_USB3_1_1 0x20 +#define TUSB544_REG_USB3_1_2 0x21 +#define TUSB544_EQ_RX_DFP_MINUS14_UFP_MINUS33 (0) +#define TUSB544_EQ_RX_DFP_04_UFP_MINUS15 (1) +#define TUSB544_EQ_RX_DFP_17_UFP_0 (2) +#define TUSB544_EQ_RX_DFP_32_UFP_14 (3) +#define TUSB544_EQ_RX_DFP_41_UFP_24 (4) +#define TUSB544_EQ_RX_DFP_52_UFP_35 (5) +#define TUSB544_EQ_RX_DFP_61_UFP_43 (6) +#define TUSB544_EQ_RX_DFP_69_UFP_52 (7) +#define TUSB544_EQ_RX_DFP_77_UFP_60 (8) +#define TUSB544_EQ_RX_DFP_83_UFP_66 (9) +#define TUSB544_EQ_RX_DFP_88_UFP_72 (10) +#define TUSB544_EQ_RX_DFP_94_UFP_77 (11) +#define TUSB544_EQ_RX_DFP_98_UFP_81 (12) +#define TUSB544_EQ_RX_DFP_103_UFP_86 (13) +#define TUSB544_EQ_RX_DFP_106_UFP_90 (14) +#define TUSB544_EQ_RX_DFP_110_UFP_94 (15) +#define TUSB544_EQ_RX_MASK (0x0F) + +#define TUSB544_EQ_TX_DFP_MINUS14_UFP_MINUS33 (0 << 4) +#define TUSB544_EQ_TX_DFP_04_UFP_MINUS15 (1 << 4) +#define TUSB544_EQ_TX_DFP_17_UFP_0 (2 << 4) +#define TUSB544_EQ_TX_DFP_32_UFP_14 (3 << 4) +#define TUSB544_EQ_TX_DFP_41_UFP_24 (4 << 4) +#define TUSB544_EQ_TX_DFP_52_UFP_35 (5 << 4) +#define TUSB544_EQ_TX_DFP_61_UFP_43 (6 << 4) +#define TUSB544_EQ_TX_DFP_69_UFP_52 (7 << 4) +#define TUSB544_EQ_TX_DFP_77_UFP_60 (8 << 4) +#define TUSB544_EQ_TX_DFP_83_UFP_66 (9 << 4) +#define TUSB544_EQ_TX_DFP_88_UFP_72 (10 << 4) +#define TUSB544_EQ_TX_DFP_94_UFP_77 (11 << 4) +#define TUSB544_EQ_TX_DFP_98_UFP_81 (12 << 4) +#define TUSB544_EQ_TX_DFP_103_UFP_86 (13 << 4) +#define TUSB544_EQ_TX_DFP_106_UFP_90 (14 << 4) +#define TUSB544_EQ_TX_DFP_110_UFP_94 (15 << 4) +#define TUSB544_EQ_TX_MASK (0xF0) enum tusb544_ct_sel { TUSB544_CTL_SEL_DISABLED, @@ -48,4 +90,7 @@ enum tusb544_dir_sel { extern const struct usb_mux_driver tusb544_drv; +int tusb544_i2c_field_update8(const struct usb_mux *me, int offset, + uint8_t field_mask, uint8_t set_value); + #endif |