diff options
author | YongBeum.Ha <ybha@samsung.corp-partner.google.com> | 2021-01-27 09:57:15 +0900 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2021-02-02 22:21:53 +0000 |
commit | 113e8ceff47b1abd93dd5895e57b60c521dda5fb (patch) | |
tree | 34142a84ace5514fa348a924f950723abee58a28 /driver | |
parent | 88438ce32109f651eb9e8424048edefd893a01c7 (diff) | |
download | chrome-ec-113e8ceff47b1abd93dd5895e57b60c521dda5fb.tar.gz |
nb7v904m : add function to tune eq and gain
add function to tune usb eq and gain
BUG=b:176862264
BRANCH=None
TEST=make -j BOARD=sasuke
Signed-off-by: YongBeum.Ha <ybha@samsung.corp-partner.google.com>
Change-Id: I50ff040643cd2635968c5cfb988998ad3a82a836
Signed-off-by: YongBeum.Ha <ybha@samsung.corp-partner.google.com>
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2649894
Reviewed-by: Diana Z <dzigterman@chromium.org>
Diffstat (limited to 'driver')
-rw-r--r-- | driver/retimer/nb7v904m.c | 42 | ||||
-rw-r--r-- | driver/retimer/nb7v904m.h | 52 |
2 files changed, 86 insertions, 8 deletions
diff --git a/driver/retimer/nb7v904m.c b/driver/retimer/nb7v904m.c index 2b9a580e80..4999f1d9c3 100644 --- a/driver/retimer/nb7v904m.c +++ b/driver/retimer/nb7v904m.c @@ -58,14 +58,44 @@ static int nb7v904m_enter_low_power_mode(const struct usb_mux *me) return rv; } -/* Tune USB Eq : This must be called on board_init context */ -int nb7v904m_tune_usb_eq_rx(const struct usb_mux *me, uint8_t eq_a, - uint8_t eq_d) +/* Tune USB Eq All: This must be called on board_init context */ +int nb7v904m_tune_usb_set_eq(const struct usb_mux *me, uint8_t eq_a, + uint8_t eq_b, uint8_t eq_c, uint8_t eq_d) { - int rv; + int rv = EC_SUCCESS; + + if (eq_a != NB7V904M_CH_ALL_SKIP_EQ) + rv = nb7v904m_write(me, NB7V904M_REG_CH_A_EQ_SETTINGS, eq_a); + + if (eq_b != NB7V904M_CH_ALL_SKIP_EQ) + rv |= nb7v904m_write(me, NB7V904M_REG_CH_B_EQ_SETTINGS, eq_b); + + if (eq_c != NB7V904M_CH_ALL_SKIP_EQ) + rv |= nb7v904m_write(me, NB7V904M_REG_CH_C_EQ_SETTINGS, eq_c); + + if (eq_d != NB7V904M_CH_ALL_SKIP_EQ) + rv |= nb7v904m_write(me, NB7V904M_REG_CH_D_EQ_SETTINGS, eq_d); + + return rv; +} + +/* Tune USB Flat Gain: This must be called on board_init context */ +int nb7v904m_tune_usb_flat_gain(const struct usb_mux *me, uint8_t gain_a, + uint8_t gain_b, uint8_t gain_c, uint8_t gain_d) +{ + int rv = EC_SUCCESS; + + if (gain_a != NB7V904M_CH_ALL_SKIP_GAIN) + rv = nb7v904m_write(me, NB7V904M_REG_CH_A_FLAT_GAIN, gain_a); + + if (gain_b != NB7V904M_CH_ALL_SKIP_GAIN) + rv |= nb7v904m_write(me, NB7V904M_REG_CH_B_FLAT_GAIN, gain_b); + + if (gain_c != NB7V904M_CH_ALL_SKIP_GAIN) + rv |= nb7v904m_write(me, NB7V904M_REG_CH_C_FLAT_GAIN, gain_c); - rv = nb7v904m_write(me, NB7V904M_REG_CH_A_EQ_SETTINGS, eq_a); - rv |= nb7v904m_write(me, NB7V904M_REG_CH_D_EQ_SETTINGS, eq_d); + if (gain_d != NB7V904M_CH_ALL_SKIP_GAIN) + rv |= nb7v904m_write(me, NB7V904M_REG_CH_D_FLAT_GAIN, gain_d); return rv; } diff --git a/driver/retimer/nb7v904m.h b/driver/retimer/nb7v904m.h index 9d029942f8..7e88281f31 100644 --- a/driver/retimer/nb7v904m.h +++ b/driver/retimer/nb7v904m.h @@ -18,8 +18,14 @@ /* Registers */ #define NB7V904M_REG_GEN_DEV_SETTINGS 0x00 #define NB7V904M_REG_CH_A_EQ_SETTINGS 0x01 +#define NB7V904M_REG_CH_B_EQ_SETTINGS 0x03 +#define NB7V904M_REG_CH_C_EQ_SETTINGS 0x05 #define NB7V904M_REG_CH_D_EQ_SETTINGS 0x07 #define NB7V904M_REG_AUX_CH_CTRL 0x09 +#define NB7V904M_REG_CH_A_FLAT_GAIN 0x18 +#define NB7V904M_REG_CH_B_FLAT_GAIN 0x1a +#define NB7V904M_REG_CH_C_FLAT_GAIN 0x1c +#define NB7V904M_REG_CH_D_FLAT_GAIN 0x1e /* 0x00 - General Device Settings */ #define NB7V904M_CHIP_EN BIT(0) @@ -42,6 +48,22 @@ #define NB7V904M_CH_A_EQ_8_DB 0x02 #define NB7V904M_CH_A_EQ_10_DB 0x00 +/* 0x03 - Channel B Equalization Settings */ +#define NB7V904M_CH_B_EQ_0_DB 0x0e +#define NB7V904M_CH_B_EQ_2_DB 0x0c +#define NB7V904M_CH_B_EQ_4_DB 0x0a +#define NB7V904M_CH_B_EQ_6_DB 0x08 +#define NB7V904M_CH_B_EQ_8_DB 0x06 +#define NB7V904M_CH_B_EQ_10_DB 0x00 + +/* 0x05 - Channel C Equalization Settings */ +#define NB7V904M_CH_C_EQ_0_DB 0x0e +#define NB7V904M_CH_C_EQ_2_DB 0x0c +#define NB7V904M_CH_C_EQ_4_DB 0x0a +#define NB7V904M_CH_C_EQ_6_DB 0x08 +#define NB7V904M_CH_C_EQ_8_DB 0x06 +#define NB7V904M_CH_C_EQ_10_DB 0x00 + /* 0x07 - Channel D Equalization Settings */ #define NB7V904M_CH_D_EQ_0_DB 0x0a #define NB7V904M_CH_D_EQ_2_DB 0x08 @@ -55,8 +77,34 @@ #define NB7V904M_AUX_CH_FLIPPED BIT(0) #define NB7V904M_AUX_CH_HI_Z BIT(1) +/* 0x18 - Channel A Flag Gain */ +#define NB7V904M_CH_A_GAIN_0_DB 0x00 +#define NB7V904M_CH_A_GAIN_1P5_DB 0x02 +#define NB7V904M_CH_A_GAIN_3P5_DB 0x03 + +/* 0x1a - Channel B Flag Gain */ +#define NB7V904M_CH_B_GAIN_0_DB 0x03 +#define NB7V904M_CH_B_GAIN_1P5_DB 0x01 +#define NB7V904M_CH_B_GAIN_3P5_DB 0x00 + +/* 0x1c - Channel C Flag Gain */ +#define NB7V904M_CH_C_GAIN_0_DB 0x03 +#define NB7V904M_CH_C_GAIN_1P5_DB 0x01 +#define NB7V904M_CH_C_GAIN_3P5_DB 0x00 + +/* 0x1e - Channel D Flag Gain */ +#define NB7V904M_CH_D_GAIN_0_DB 0x00 +#define NB7V904M_CH_D_GAIN_1P5_DB 0x02 +#define NB7V904M_CH_D_GAIN_3P5_DB 0x03 + extern const struct usb_mux_driver nb7v904m_usb_redriver_drv; -int nb7v904m_tune_usb_eq_rx(const struct usb_mux *me, uint8_t eq_a, - uint8_t eq_d); +/* Use this value if tuning eq wants to be skipped */ +#define NB7V904M_CH_ALL_SKIP_EQ 0xff +int nb7v904m_tune_usb_set_eq(const struct usb_mux *me, uint8_t eq_a, + uint8_t eq_b, uint8_t eq_c, uint8_t eq_d); +/* Use this value if tuning gain wants to be skipped */ +#define NB7V904M_CH_ALL_SKIP_GAIN 0xff +int nb7v904m_tune_usb_flat_gain(const struct usb_mux *me, uint8_t gain_a, + uint8_t gain_b, uint8_t gain_c, uint8_t gain_d); #endif /* __CROS_EC_USB_REDRIVER_NB7V904M_H */ |