summaryrefslogtreecommitdiff
path: root/driver
diff options
context:
space:
mode:
authorYongBeum.Ha <ybha@samsung.corp-partner.google.com>2021-01-27 09:57:15 +0900
committerCommit Bot <commit-bot@chromium.org>2021-02-02 22:21:53 +0000
commit113e8ceff47b1abd93dd5895e57b60c521dda5fb (patch)
tree34142a84ace5514fa348a924f950723abee58a28 /driver
parent88438ce32109f651eb9e8424048edefd893a01c7 (diff)
downloadchrome-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.c42
-rw-r--r--driver/retimer/nb7v904m.h52
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 */