From: Ritesh Kumar <[email protected]>

Nord requires different TX voltage-swing and pre-emphasis levels for
both eDP and DP modes.  Add four pairs of 4x4 tables covering
RBR/HBR and HBR2/HBR3 for each mode, sourced from HPG Tables 2-2,
2-4, 2-6-a and 2-6-b, and wrap them in qcom_edp_swing_pre_emph_cfg
descriptors.  The eDP RBR/HBR swing table reuses the existing
edp_swing_hbr_rbr directly; all other tables are new.

Assisted-by: LLM
Signed-off-by: Ritesh Kumar <[email protected]>
Signed-off-by: Nabige Aala <[email protected]>
---
 drivers/phy/qualcomm/phy-qcom-edp.c | 64 +++++++++++++++++++++++++++++++++++++
 1 file changed, 64 insertions(+)

diff --git a/drivers/phy/qualcomm/phy-qcom-edp.c 
b/drivers/phy/qualcomm/phy-qcom-edp.c
index c5df1086607f..c63f721702b1 100644
--- a/drivers/phy/qualcomm/phy-qcom-edp.c
+++ b/drivers/phy/qualcomm/phy-qcom-edp.c
@@ -1538,6 +1538,70 @@ static int qcom_edp_phy_probe(struct platform_device 
*pdev)
        return PTR_ERR_OR_ZERO(phy_provider);
 }
 
+static const u8 nord_edp_pre_emp_hbr_rbr[4][4] = {
+       { 0x05, 0x11, 0x17, 0x1d },
+       { 0x05, 0x11, 0x18, 0xff },
+       { 0x06, 0x11, 0xff, 0xff },
+       { 0x00, 0xff, 0xff, 0xff },
+};
+
+static const u8 nord_edp_swing_hbr2_hbr3[4][4] = {
+       { 0x0b, 0x11, 0x17, 0x1c },
+       { 0x10, 0x19, 0x1f, 0xff },
+       { 0x19, 0x1f, 0xff, 0xff },
+       { 0x1f, 0xff, 0xff, 0xff },
+};
+
+static const u8 nord_edp_pre_emp_hbr2_hbr3[4][4] = {
+       { 0x0c, 0x15, 0x19, 0x1e },
+       { 0x0b, 0x15, 0x19, 0xff },
+       { 0x0e, 0x14, 0xff, 0xff },
+       { 0x0d, 0xff, 0xff, 0xff },
+};
+
+static const struct qcom_edp_swing_pre_emph_cfg nord_edp_swing_pre_emph_cfg = {
+       .swing_hbr_rbr          = &edp_swing_hbr_rbr,
+       .swing_hbr3_hbr2        = &nord_edp_swing_hbr2_hbr3,
+       .pre_emphasis_hbr_rbr   = &nord_edp_pre_emp_hbr_rbr,
+       .pre_emphasis_hbr3_hbr2 = &nord_edp_pre_emp_hbr2_hbr3,
+};
+
+static const u8 nord_dp_swing_hbr2_hbr3[4][4] = {
+       { 0x02, 0x12, 0x16, 0x1a },
+       { 0x09, 0x19, 0x1f, 0xff },
+       { 0x10, 0x1f, 0xff, 0xff },
+       { 0x1f, 0xff, 0xff, 0xff },
+};
+
+static const u8 nord_dp_pre_emp_hbr2_hbr3[4][4] = {
+       { 0x00, 0x0c, 0x15, 0x1b },
+       { 0x02, 0x0e, 0x16, 0xff },
+       { 0x02, 0x11, 0xff, 0xff },
+       { 0x04, 0xff, 0xff, 0xff },
+};
+
+static const u8 nord_dp_swing_hbr_rbr[4][4] = {
+       { 0x07, 0x0f, 0x16, 0x1f },
+       { 0x11, 0x1e, 0x1f, 0xff },
+       { 0x16, 0x1f, 0xff, 0xff },
+       { 0x1f, 0xff, 0xff, 0xff },
+};
+
+static const u8 nord_dp_pre_emp_hbr_rbr[4][4] = {
+       { 0x00, 0x0e, 0x15, 0x1a },
+       { 0x00, 0x0e, 0x15, 0xff },
+       { 0x00, 0x0e, 0xff, 0xff },
+       { 0x02, 0xff, 0xff, 0xff },
+};
+
+static const struct qcom_edp_swing_pre_emph_cfg nord_dp_swing_pre_emph_cfg = {
+       .swing_hbr_rbr          = &nord_dp_swing_hbr_rbr,
+       .swing_hbr3_hbr2        = &nord_dp_swing_hbr2_hbr3,
+       .pre_emphasis_hbr_rbr   = &nord_dp_pre_emp_hbr_rbr,
+       .pre_emphasis_hbr3_hbr2 = &nord_dp_pre_emp_hbr2_hbr3,
+};
+
+
 static const struct of_device_id qcom_edp_phy_match_table[] = {
        { .compatible = "qcom,glymur-dp-phy", .data = &glymur_phy_cfg, },
        { .compatible = "qcom,sa8775p-edp-phy", .data = &sa8775p_dp_phy_cfg, },

-- 
2.34.1

Reply via email to