static int ufs_qcom_phy_qmp_28nm_calibrate(struct ufs_qcom_phy *ufs_qcom_phy) { struct ufs_qcom_phy_calibration *tbl_A = NULL, *tbl_B = NULL; int tbl_size_A = 0, tbl_size_B = 0; int rate = UFS_QCOM_LIMIT_HS_RATE; 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; int err; if ((major == 0x1) && (minor == 0x001) && (step == 0x0000)) { tbl_size_A = ARRAY_SIZE(phy_cal_table_ctrl_1_1_0_rate_A); tbl_A = phy_cal_table_ctrl_1_1_0_rate_A; } else if ((major == 0x1) && (minor == 0x001) && (step == 0x0001)) { tbl_size_A = ARRAY_SIZE(phy_cal_table_ctrl_1_1_1_rate_A); tbl_A = phy_cal_table_ctrl_1_1_1_rate_A; } tbl_B = phy_cal_table_rate_B; tbl_size_B = ARRAY_SIZE(phy_cal_table_rate_B); err = ufs_qcom_phy_calibrate(ufs_qcom_phy, tbl_A, tbl_size_A, tbl_B, tbl_size_B, rate); if (err) dev_err(ufs_qcom_phy->dev, "%s: ufs_qcom_phy_calibrate() failed %d\n", __func__, err); return err; }
static int ufs_qcom_phy_qmp_20nm_phy_calibrate(struct ufs_qcom_phy *ufs_qcom_phy, bool is_rate_B) { struct ufs_qcom_phy_calibration *tbl_A, *tbl_B; int tbl_size_A, tbl_size_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; int err; if ((major == 0x1) && (minor == 0x002) && (step == 0x0000)) { tbl_size_A = ARRAY_SIZE(phy_cal_table_rate_A_1_2_0); tbl_A = phy_cal_table_rate_A_1_2_0; } else if ((major == 0x1) && (minor == 0x003) && (step == 0x0000)) { tbl_size_A = ARRAY_SIZE(phy_cal_table_rate_A_1_3_0); tbl_A = phy_cal_table_rate_A_1_3_0; } else { dev_err(ufs_qcom_phy->dev, "%s: Unknown UFS-PHY version, no calibration values\n", __func__); err = -ENODEV; goto out; } tbl_size_B = ARRAY_SIZE(phy_cal_table_rate_B); tbl_B = phy_cal_table_rate_B; err = ufs_qcom_phy_calibrate(ufs_qcom_phy, tbl_A, tbl_size_A, tbl_B, tbl_size_B, is_rate_B); if (err) dev_err(ufs_qcom_phy->dev, "%s: ufs_qcom_phy_calibrate() failed %d\n", __func__, err); out: return err; }