|
@@ -1,7 +1,7 @@
|
|
// SPDX-License-Identifier: GPL-2.0-only
|
|
// SPDX-License-Identifier: GPL-2.0-only
|
|
/*
|
|
/*
|
|
* Copyright (c) 2017-2021, The Linux Foundation. All rights reserved.
|
|
* Copyright (c) 2017-2021, The Linux Foundation. All rights reserved.
|
|
- * Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
|
|
|
|
|
|
+ * Copyright (c) 2022-2023, Qualcomm Innovation Center, Inc. All rights reserved.
|
|
*/
|
|
*/
|
|
|
|
|
|
|
|
|
|
@@ -45,41 +45,6 @@ static u8 const vm_voltage_swing[MAX_VOLTAGE_LEVELS][MAX_PRE_EMP_LEVELS] = {
|
|
{0xFF, 0xFF, 0xFF, 0xFF} /* sw1, 1.2 v, optional */
|
|
{0xFF, 0xFF, 0xFF, 0xFF} /* sw1, 1.2 v, optional */
|
|
};
|
|
};
|
|
|
|
|
|
-static u8 const dp_pre_emp_hbr2_hbr3[MAX_VOLTAGE_LEVELS][MAX_PRE_EMP_LEVELS] = {
|
|
|
|
- {0x00, 0x0C, 0x15, 0x1B}, /* pe0, 0 db */
|
|
|
|
- {0x02, 0x0E, 0x16, 0xFF}, /* pe1, 3.5 db */
|
|
|
|
- {0x02, 0x11, 0xFF, 0xFF}, /* pe2, 6.0 db */
|
|
|
|
- {0x04, 0xFF, 0xFF, 0xFF} /* pe3, 9.5 db */
|
|
|
|
-};
|
|
|
|
-
|
|
|
|
-static u8 const dp_swing_hbr2_hbr3[MAX_VOLTAGE_LEVELS][MAX_PRE_EMP_LEVELS] = {
|
|
|
|
- {0x02, 0x12, 0x16, 0x1A}, /* sw0, 0.4v */
|
|
|
|
- {0x09, 0x19, 0x1F, 0xFF}, /* sw1, 0.6v */
|
|
|
|
- {0x10, 0x1F, 0xFF, 0xFF}, /* sw1, 0.8v */
|
|
|
|
- {0x1F, 0xFF, 0xFF, 0xFF} /* sw1, 1.2v */
|
|
|
|
-};
|
|
|
|
-
|
|
|
|
-static u8 const dp_pre_emp_hbr_rbr[MAX_VOLTAGE_LEVELS][MAX_PRE_EMP_LEVELS] = {
|
|
|
|
- {0x00, 0x0D, 0x14, 0x1A}, /* pe0, 0 db */
|
|
|
|
- {0x00, 0x0E, 0x15, 0xFF}, /* pe1, 3.5 db */
|
|
|
|
- {0x00, 0x0E, 0xFF, 0xFF}, /* pe2, 6.0 db */
|
|
|
|
- {0x03, 0xFF, 0xFF, 0xFF} /* pe3, 9.5 db */
|
|
|
|
-};
|
|
|
|
-
|
|
|
|
-static u8 const dp_swing_hbr_rbr[MAX_VOLTAGE_LEVELS][MAX_PRE_EMP_LEVELS] = {
|
|
|
|
- {0x08, 0x0F, 0x16, 0x1F}, /* sw0, 0.4v */
|
|
|
|
- {0x11, 0x1E, 0x1F, 0xFF}, /* sw1, 0.6v */
|
|
|
|
- {0x16, 0x1F, 0xFF, 0xFF}, /* sw1, 0.8v */
|
|
|
|
- {0x1F, 0xFF, 0xFF, 0xFF} /* sw1, 1.2v */
|
|
|
|
-};
|
|
|
|
-
|
|
|
|
-static const u8 dp_pre_emp_hbr_rbr_v600[MAX_VOLTAGE_LEVELS][MAX_PRE_EMP_LEVELS] = {
|
|
|
|
- {0x00, 0x0D, 0x14, 0x1A}, /* pe0, 0 db */
|
|
|
|
- {0x00, 0x0E, 0x15, 0xFF}, /* pe1, 3.5 db */
|
|
|
|
- {0x00, 0x0E, 0xFF, 0xFF}, /* pe2, 6.0 db */
|
|
|
|
- {0x02, 0xFF, 0xFF, 0xFF} /* pe3, 9.5 db */
|
|
|
|
-};
|
|
|
|
-
|
|
|
|
struct dp_catalog_private_v420 {
|
|
struct dp_catalog_private_v420 {
|
|
struct device *dev;
|
|
struct device *dev;
|
|
struct dp_catalog_sub sub;
|
|
struct dp_catalog_sub sub;
|
|
@@ -249,6 +214,7 @@ static void dp_catalog_ctrl_update_vx_px_v420(struct dp_catalog_ctrl *ctrl,
|
|
u8 value0, value1;
|
|
u8 value0, value1;
|
|
u32 version;
|
|
u32 version;
|
|
u32 phy_version;
|
|
u32 phy_version;
|
|
|
|
+ int idx;
|
|
|
|
|
|
if (!ctrl || !((v_level < MAX_VOLTAGE_LEVELS)
|
|
if (!ctrl || !((v_level < MAX_VOLTAGE_LEVELS)
|
|
&& (p_level < MAX_PRE_EMP_LEVELS))) {
|
|
&& (p_level < MAX_PRE_EMP_LEVELS))) {
|
|
@@ -268,16 +234,14 @@ static void dp_catalog_ctrl_update_vx_px_v420(struct dp_catalog_ctrl *ctrl,
|
|
/*
|
|
/*
|
|
* For DP controller versions >= 1.2.3
|
|
* For DP controller versions >= 1.2.3
|
|
*/
|
|
*/
|
|
- if (version >= 0x10020003) {
|
|
|
|
|
|
+ if (version >= 0x10020003 && ctrl->valid_lt_params) {
|
|
|
|
+ idx = v_level * MAX_VOLTAGE_LEVELS + p_level;
|
|
if (high) {
|
|
if (high) {
|
|
- value0 = dp_swing_hbr2_hbr3[v_level][p_level];
|
|
|
|
- value1 = dp_pre_emp_hbr2_hbr3[v_level][p_level];
|
|
|
|
|
|
+ value0 = ctrl->swing_hbr2_3[idx];
|
|
|
|
+ value1 = ctrl->pre_emp_hbr2_3[idx];
|
|
} else {
|
|
} else {
|
|
- value0 = dp_swing_hbr_rbr[v_level][p_level];
|
|
|
|
- if (phy_version >= 0x60000000)
|
|
|
|
- value1 = dp_pre_emp_hbr_rbr_v600[v_level][p_level];
|
|
|
|
- else
|
|
|
|
- value1 = dp_pre_emp_hbr_rbr[v_level][p_level];
|
|
|
|
|
|
+ value0 = ctrl->swing_hbr_rbr[idx];
|
|
|
|
+ value1 = ctrl->pre_emp_hbr_rbr[idx];
|
|
}
|
|
}
|
|
} else {
|
|
} else {
|
|
value0 = vm_voltage_swing[v_level][p_level];
|
|
value0 = vm_voltage_swing[v_level][p_level];
|