summaryrefslogtreecommitdiff
path: root/drivers/phy/phy-qcom-ufs-qmp-v3.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/phy/phy-qcom-ufs-qmp-v3.c')
-rw-r--r--drivers/phy/phy-qcom-ufs-qmp-v3.c20
1 files changed, 18 insertions, 2 deletions
diff --git a/drivers/phy/phy-qcom-ufs-qmp-v3.c b/drivers/phy/phy-qcom-ufs-qmp-v3.c
index 6b8dbc29f6e8..57c23f70eb63 100644
--- a/drivers/phy/phy-qcom-ufs-qmp-v3.c
+++ b/drivers/phy/phy-qcom-ufs-qmp-v3.c
@@ -23,12 +23,26 @@ int ufs_qcom_phy_qmp_v3_phy_calibrate(struct ufs_qcom_phy *ufs_qcom_phy,
int err;
int tbl_size_A, tbl_size_B;
struct ufs_qcom_phy_calibration *tbl_A, *tbl_B;
+ u8 major = ufs_qcom_phy->host_ctrl_rev_major;
+ u16 minor = ufs_qcom_phy->host_ctrl_rev_minor;
+ u16 step = ufs_qcom_phy->host_ctrl_rev_step;
tbl_size_B = ARRAY_SIZE(phy_cal_table_rate_B);
tbl_B = phy_cal_table_rate_B;
- tbl_A = phy_cal_table_rate_A;
- tbl_size_A = ARRAY_SIZE(phy_cal_table_rate_A);
+ if ((major == 0x3) && (minor == 0x000) && (step == 0x0000)) {
+ tbl_A = phy_cal_table_rate_A_3_0_0;
+ tbl_size_A = ARRAY_SIZE(phy_cal_table_rate_A_3_0_0);
+ } else if ((major == 0x3) && (minor == 0x001) && (step == 0x0000)) {
+ tbl_A = phy_cal_table_rate_A_3_1_0;
+ tbl_size_A = ARRAY_SIZE(phy_cal_table_rate_A_3_1_0);
+ } else {
+ dev_err(ufs_qcom_phy->dev,
+ "%s: Unknown UFS-PHY version (major 0x%x minor 0x%x step 0x%x), no calibration values\n",
+ __func__, major, minor, step);
+ err = -ENODEV;
+ goto out;
+ }
err = ufs_qcom_phy_calibrate(ufs_qcom_phy,
tbl_A, tbl_size_A,
@@ -39,6 +53,8 @@ int ufs_qcom_phy_qmp_v3_phy_calibrate(struct ufs_qcom_phy *ufs_qcom_phy,
dev_err(ufs_qcom_phy->dev,
"%s: ufs_qcom_phy_calibrate() failed %d\n",
__func__, err);
+
+out:
return err;
}