diff options
Diffstat (limited to 'drivers/phy/qualcomm/phy-qcom-edp.c')
| -rw-r--r-- | drivers/phy/qualcomm/phy-qcom-edp.c | 373 | 
1 files changed, 321 insertions, 52 deletions
diff --git a/drivers/phy/qualcomm/phy-qcom-edp.c b/drivers/phy/qualcomm/phy-qcom-edp.c index 9818d994c68b..da2b32fb5b45 100644 --- a/drivers/phy/qualcomm/phy-qcom-edp.c +++ b/drivers/phy/qualcomm/phy-qcom-edp.c @@ -14,6 +14,7 @@  #include <linux/module.h>  #include <linux/of.h>  #include <linux/phy/phy.h> +#include <linux/phy/phy-dp.h>  #include <linux/platform_device.h>  #include <linux/regulator/consumer.h>  #include <linux/reset.h> @@ -23,6 +24,7 @@  #include "phy-qcom-qmp-dp-phy.h"  #include "phy-qcom-qmp-qserdes-com-v4.h" +#include "phy-qcom-qmp-qserdes-com-v6.h"  /* EDP_PHY registers */  #define DP_PHY_CFG                              0x0010 @@ -69,19 +71,32 @@  #define TXn_TRAN_DRVR_EMP_EN                    0x0078 -struct qcom_edp_cfg { -	bool is_dp; - -	/* DP PHY swing and pre_emphasis tables */ +struct qcom_edp_swing_pre_emph_cfg {  	const u8 (*swing_hbr_rbr)[4][4];  	const u8 (*swing_hbr3_hbr2)[4][4];  	const u8 (*pre_emphasis_hbr_rbr)[4][4];  	const u8 (*pre_emphasis_hbr3_hbr2)[4][4];  }; +struct qcom_edp; + +struct phy_ver_ops { +	int (*com_power_on)(const struct qcom_edp *edp); +	int (*com_resetsm_cntrl)(const struct qcom_edp *edp); +	int (*com_bias_en_clkbuflr)(const struct qcom_edp *edp); +	int (*com_configure_pll)(const struct qcom_edp *edp); +	int (*com_configure_ssc)(const struct qcom_edp *edp); +}; + +struct qcom_edp_phy_cfg { +	bool is_edp; +	const struct qcom_edp_swing_pre_emph_cfg *swing_pre_emph_cfg; +	const struct phy_ver_ops *ver_ops; +}; +  struct qcom_edp {  	struct device *dev; -	const struct qcom_edp_cfg *cfg; +	const struct qcom_edp_phy_cfg *cfg;  	struct phy *phy; @@ -97,6 +112,8 @@ struct qcom_edp {  	struct clk_bulk_data clks[2];  	struct regulator_bulk_data supplies[2]; + +	bool is_edp;  };  static const u8 dp_swing_hbr_rbr[4][4] = { @@ -127,8 +144,7 @@ static const u8 dp_pre_emp_hbr2_hbr3[4][4] = {  	{ 0x04, 0xff, 0xff, 0xff }  }; -static const struct qcom_edp_cfg dp_phy_cfg = { -	.is_dp = true, +static const struct qcom_edp_swing_pre_emph_cfg dp_phy_swing_pre_emph_cfg = {  	.swing_hbr_rbr = &dp_swing_hbr_rbr,  	.swing_hbr3_hbr2 = &dp_swing_hbr2_hbr3,  	.pre_emphasis_hbr_rbr = &dp_pre_emp_hbr_rbr, @@ -163,8 +179,7 @@ static const u8 edp_pre_emp_hbr2_hbr3[4][4] = {  	{ 0x00, 0xff, 0xff, 0xff }  }; -static const struct qcom_edp_cfg edp_phy_cfg = { -	.is_dp = false, +static const struct qcom_edp_swing_pre_emph_cfg edp_phy_swing_pre_emph_cfg = {  	.swing_hbr_rbr = &edp_swing_hbr_rbr,  	.swing_hbr3_hbr2 = &edp_swing_hbr2_hbr3,  	.pre_emphasis_hbr_rbr = &edp_pre_emp_hbr_rbr, @@ -174,7 +189,6 @@ static const struct qcom_edp_cfg edp_phy_cfg = {  static int qcom_edp_phy_init(struct phy *phy)  {  	struct qcom_edp *edp = phy_get_drvdata(phy); -	const struct qcom_edp_cfg *cfg = edp->cfg;  	int ret;  	u8 cfg8; @@ -190,8 +204,9 @@ static int qcom_edp_phy_init(struct phy *phy)  	       DP_PHY_PD_CTL_PLL_PWRDN | DP_PHY_PD_CTL_DP_CLAMP_EN,  	       edp->edp + DP_PHY_PD_CTL); -	/* Turn on BIAS current for PHY/PLL */ -	writel(0x17, edp->pll + QSERDES_V4_COM_BIAS_EN_CLKBUFLR_EN); +	ret = edp->cfg->ver_ops->com_bias_en_clkbuflr(edp); +	if (ret) +		return ret;  	writel(DP_PHY_PD_CTL_PSR_PWRDN, edp->edp + DP_PHY_PD_CTL);  	msleep(20); @@ -201,7 +216,12 @@ static int qcom_edp_phy_init(struct phy *phy)  	       DP_PHY_PD_CTL_PLL_PWRDN | DP_PHY_PD_CTL_DP_CLAMP_EN,  	       edp->edp + DP_PHY_PD_CTL); -	if (cfg && cfg->is_dp) +	/* +	 * TODO: Re-work the conditions around setting the cfg8 value +	 * when more information becomes available about why this is +	 * even needed. +	 */ +	if (edp->cfg->swing_pre_emph_cfg && !edp->is_edp)  		cfg8 = 0xb7;  	else  		cfg8 = 0x37; @@ -235,7 +255,7 @@ out_disable_supplies:  static int qcom_edp_set_voltages(struct qcom_edp *edp, const struct phy_configure_opts_dp *dp_opts)  { -	const struct qcom_edp_cfg *cfg = edp->cfg; +	const struct qcom_edp_swing_pre_emph_cfg *cfg = edp->cfg->swing_pre_emph_cfg;  	unsigned int v_level = 0;  	unsigned int p_level = 0;  	u8 ldo_config; @@ -246,6 +266,9 @@ static int qcom_edp_set_voltages(struct qcom_edp *edp, const struct phy_configur  	if (!cfg)  		return 0; +	if (edp->is_edp) +		cfg = &edp_phy_swing_pre_emph_cfg; +  	for (i = 0; i < dp_opts->lanes; i++) {  		v_level = max(v_level, dp_opts->voltage[i]);  		p_level = max(p_level, dp_opts->pre[i]); @@ -262,7 +285,7 @@ static int qcom_edp_set_voltages(struct qcom_edp *edp, const struct phy_configur  	if (swing == 0xff || emph == 0xff)  		return -EINVAL; -	ldo_config = (cfg && cfg->is_dp) ? 0x1 : 0x0; +	ldo_config = edp->is_edp ? 0x0 : 0x1;  	writel(ldo_config, edp->tx0 + TXn_LDO_CONFIG);  	writel(swing, edp->tx0 + TXn_TX_DRV_LVL); @@ -291,6 +314,84 @@ static int qcom_edp_phy_configure(struct phy *phy, union phy_configure_opts *opt  static int qcom_edp_configure_ssc(const struct qcom_edp *edp)  { +	return edp->cfg->ver_ops->com_configure_ssc(edp); +} + +static int qcom_edp_configure_pll(const struct qcom_edp *edp) +{ +	return edp->cfg->ver_ops->com_configure_pll(edp); +} + +static int qcom_edp_set_vco_div(const struct qcom_edp *edp, unsigned long *pixel_freq) +{ +	const struct phy_configure_opts_dp *dp_opts = &edp->dp_opts; +	u32 vco_div; + +	switch (dp_opts->link_rate) { +	case 1620: +		vco_div = 0x1; +		*pixel_freq = 1620000000UL / 2; +		break; + +	case 2700: +		vco_div = 0x1; +		*pixel_freq = 2700000000UL / 2; +		break; + +	case 5400: +		vco_div = 0x2; +		*pixel_freq = 5400000000UL / 4; +		break; + +	case 8100: +		vco_div = 0x0; +		*pixel_freq = 8100000000UL / 6; +		break; + +	default: +		/* Other link rates aren't supported */ +		return -EINVAL; +	} + +	writel(vco_div, edp->edp + DP_PHY_VCO_DIV); + +	return 0; +} + +static int qcom_edp_phy_power_on_v4(const struct qcom_edp *edp) +{ +	u32 val; + +	writel(DP_PHY_PD_CTL_PWRDN | DP_PHY_PD_CTL_AUX_PWRDN | +	       DP_PHY_PD_CTL_LANE_0_1_PWRDN | DP_PHY_PD_CTL_LANE_2_3_PWRDN | +	       DP_PHY_PD_CTL_PLL_PWRDN | DP_PHY_PD_CTL_DP_CLAMP_EN, +	       edp->edp + DP_PHY_PD_CTL); +	writel(0xfc, edp->edp + DP_PHY_MODE); + +	return readl_poll_timeout(edp->pll + QSERDES_V4_COM_CMN_STATUS, +				     val, val & BIT(7), 5, 200); +} + +static int qcom_edp_phy_com_resetsm_cntrl_v4(const struct qcom_edp *edp) +{ +	u32 val; + +	writel(0x20, edp->pll + QSERDES_V4_COM_RESETSM_CNTRL); + +	return readl_poll_timeout(edp->pll + QSERDES_V4_COM_C_READY_STATUS, +				     val, val & BIT(0), 500, 10000); +} + +static int qcom_edp_com_bias_en_clkbuflr_v4(const struct qcom_edp *edp) +{ +	/* Turn on BIAS current for PHY/PLL */ +	writel(0x17, edp->pll + QSERDES_V4_COM_BIAS_EN_CLKBUFLR_EN); + +	return 0; +} + +static int qcom_edp_com_configure_ssc_v4(const struct qcom_edp *edp) +{  	const struct phy_configure_opts_dp *dp_opts = &edp->dp_opts;  	u32 step1;  	u32 step2; @@ -323,7 +424,7 @@ static int qcom_edp_configure_ssc(const struct qcom_edp *edp)  	return 0;  } -static int qcom_edp_configure_pll(const struct qcom_edp *edp) +static int qcom_edp_com_configure_pll_v4(const struct qcom_edp *edp)  {  	const struct phy_configure_opts_dp *dp_opts = &edp->dp_opts;  	u32 div_frac_start2_mode0; @@ -409,30 +510,150 @@ static int qcom_edp_configure_pll(const struct qcom_edp *edp)  	return 0;  } -static int qcom_edp_set_vco_div(const struct qcom_edp *edp, unsigned long *pixel_freq) +static const struct phy_ver_ops qcom_edp_phy_ops_v4 = { +	.com_power_on		= qcom_edp_phy_power_on_v4, +	.com_resetsm_cntrl	= qcom_edp_phy_com_resetsm_cntrl_v4, +	.com_bias_en_clkbuflr	= qcom_edp_com_bias_en_clkbuflr_v4, +	.com_configure_pll	= qcom_edp_com_configure_pll_v4, +	.com_configure_ssc	= qcom_edp_com_configure_ssc_v4, +}; + +static const struct qcom_edp_phy_cfg sc7280_dp_phy_cfg = { +	.ver_ops = &qcom_edp_phy_ops_v4, +}; + +static const struct qcom_edp_phy_cfg sc8280xp_dp_phy_cfg = { +	.swing_pre_emph_cfg = &dp_phy_swing_pre_emph_cfg, +	.ver_ops = &qcom_edp_phy_ops_v4, +}; + +static const struct qcom_edp_phy_cfg sc8280xp_edp_phy_cfg = { +	.is_edp = true, +	.swing_pre_emph_cfg = &edp_phy_swing_pre_emph_cfg, +	.ver_ops = &qcom_edp_phy_ops_v4, +}; + +static int qcom_edp_phy_power_on_v6(const struct qcom_edp *edp) +{ +	u32 val; + +	writel(DP_PHY_PD_CTL_PWRDN | DP_PHY_PD_CTL_AUX_PWRDN | +	       DP_PHY_PD_CTL_LANE_0_1_PWRDN | DP_PHY_PD_CTL_LANE_2_3_PWRDN | +	       DP_PHY_PD_CTL_PLL_PWRDN | DP_PHY_PD_CTL_DP_CLAMP_EN, +	       edp->edp + DP_PHY_PD_CTL); +	writel(0xfc, edp->edp + DP_PHY_MODE); + +	return readl_poll_timeout(edp->pll + QSERDES_V6_COM_CMN_STATUS, +				     val, val & BIT(7), 5, 200); +} + +static int qcom_edp_phy_com_resetsm_cntrl_v6(const struct qcom_edp *edp) +{ +	u32 val; + +	writel(0x20, edp->pll + QSERDES_V6_COM_RESETSM_CNTRL); + +	return readl_poll_timeout(edp->pll + QSERDES_V6_COM_C_READY_STATUS, +				     val, val & BIT(0), 500, 10000); +} + +static int qcom_edp_com_bias_en_clkbuflr_v6(const struct qcom_edp *edp) +{ +	/* Turn on BIAS current for PHY/PLL */ +	writel(0x1f, edp->pll + QSERDES_V6_COM_PLL_BIAS_EN_CLK_BUFLR_EN); + +	return 0; +} + +static int qcom_edp_com_configure_ssc_v6(const struct qcom_edp *edp)  {  	const struct phy_configure_opts_dp *dp_opts = &edp->dp_opts; -	u32 vco_div; +	u32 step1; +	u32 step2;  	switch (dp_opts->link_rate) {  	case 1620: -		vco_div = 0x1; -		*pixel_freq = 1620000000UL / 2; +	case 2700: +	case 8100: +		step1 = 0x92; +		step2 = 0x01; +		break; + +	case 5400: +		step1 = 0x18; +		step2 = 0x02; +		break; + +	default: +		/* Other link rates aren't supported */ +		return -EINVAL; +	} + +	writel(0x01, edp->pll + QSERDES_V6_COM_SSC_EN_CENTER); +	writel(0x00, edp->pll + QSERDES_V6_COM_SSC_ADJ_PER1); +	writel(0x36, edp->pll + QSERDES_V6_COM_SSC_PER1); +	writel(0x01, edp->pll + QSERDES_V6_COM_SSC_PER2); +	writel(step1, edp->pll + QSERDES_V6_COM_SSC_STEP_SIZE1_MODE0); +	writel(step2, edp->pll + QSERDES_V6_COM_SSC_STEP_SIZE2_MODE0); + +	return 0; +} + +static int qcom_edp_com_configure_pll_v6(const struct qcom_edp *edp) +{ +	const struct phy_configure_opts_dp *dp_opts = &edp->dp_opts; +	u32 div_frac_start2_mode0; +	u32 div_frac_start3_mode0; +	u32 dec_start_mode0; +	u32 lock_cmp1_mode0; +	u32 lock_cmp2_mode0; +	u32 code1_mode0; +	u32 code2_mode0; +	u32 hsclk_sel; + +	switch (dp_opts->link_rate) { +	case 1620: +		hsclk_sel = 0x5; +		dec_start_mode0 = 0x34; +		div_frac_start2_mode0 = 0xc0; +		div_frac_start3_mode0 = 0x0b; +		lock_cmp1_mode0 = 0x37; +		lock_cmp2_mode0 = 0x04; +		code1_mode0 = 0x71; +		code2_mode0 = 0x0c;  		break;  	case 2700: -		vco_div = 0x1; -		*pixel_freq = 2700000000UL / 2; +		hsclk_sel = 0x3; +		dec_start_mode0 = 0x34; +		div_frac_start2_mode0 = 0xc0; +		div_frac_start3_mode0 = 0x0b; +		lock_cmp1_mode0 = 0x07; +		lock_cmp2_mode0 = 0x07; +		code1_mode0 = 0x71; +		code2_mode0 = 0x0c;  		break;  	case 5400: -		vco_div = 0x2; -		*pixel_freq = 5400000000UL / 4; +		hsclk_sel = 0x1; +		dec_start_mode0 = 0x46; +		div_frac_start2_mode0 = 0x00; +		div_frac_start3_mode0 = 0x05; +		lock_cmp1_mode0 = 0x0f; +		lock_cmp2_mode0 = 0x0e; +		code1_mode0 = 0x97; +		code2_mode0 = 0x10;  		break;  	case 8100: -		vco_div = 0x0; -		*pixel_freq = 8100000000UL / 6; +		hsclk_sel = 0x0; +		dec_start_mode0 = 0x34; +		div_frac_start2_mode0 = 0xc0; +		div_frac_start3_mode0 = 0x0b; +		lock_cmp1_mode0 = 0x17; +		lock_cmp2_mode0 = 0x15; +		code1_mode0 = 0x71; +		code2_mode0 = 0x0c;  		break;  	default: @@ -440,36 +661,72 @@ static int qcom_edp_set_vco_div(const struct qcom_edp *edp, unsigned long *pixel  		return -EINVAL;  	} -	writel(vco_div, edp->edp + DP_PHY_VCO_DIV); +	writel(0x01, edp->pll + QSERDES_V6_COM_SVS_MODE_CLK_SEL); +	writel(0x0b, edp->pll + QSERDES_V6_COM_SYSCLK_EN_SEL); +	writel(0x02, edp->pll + QSERDES_V6_COM_SYS_CLK_CTRL); +	writel(0x0c, edp->pll + QSERDES_V6_COM_CLK_ENABLE1); +	writel(0x06, edp->pll + QSERDES_V6_COM_SYSCLK_BUF_ENABLE); +	writel(0x30, edp->pll + QSERDES_V6_COM_CLK_SELECT); +	writel(hsclk_sel, edp->pll + QSERDES_V6_COM_HSCLK_SEL_1); +	writel(0x07, edp->pll + QSERDES_V6_COM_PLL_IVCO); +	writel(0x08, edp->pll + QSERDES_V6_COM_LOCK_CMP_EN); +	writel(0x36, edp->pll + QSERDES_V6_COM_PLL_CCTRL_MODE0); +	writel(0x16, edp->pll + QSERDES_V6_COM_PLL_RCTRL_MODE0); +	writel(0x06, edp->pll + QSERDES_V6_COM_CP_CTRL_MODE0); +	writel(dec_start_mode0, edp->pll + QSERDES_V6_COM_DEC_START_MODE0); +	writel(0x00, edp->pll + QSERDES_V6_COM_DIV_FRAC_START1_MODE0); +	writel(div_frac_start2_mode0, edp->pll + QSERDES_V6_COM_DIV_FRAC_START2_MODE0); +	writel(div_frac_start3_mode0, edp->pll + QSERDES_V6_COM_DIV_FRAC_START3_MODE0); +	writel(0x12, edp->pll + QSERDES_V6_COM_CMN_CONFIG_1); +	writel(0x3f, edp->pll + QSERDES_V6_COM_INTEGLOOP_GAIN0_MODE0); +	writel(0x00, edp->pll + QSERDES_V6_COM_INTEGLOOP_GAIN1_MODE0); +	writel(0x00, edp->pll + QSERDES_V6_COM_VCO_TUNE_MAP); +	writel(lock_cmp1_mode0, edp->pll + QSERDES_V6_COM_LOCK_CMP1_MODE0); +	writel(lock_cmp2_mode0, edp->pll + QSERDES_V6_COM_LOCK_CMP2_MODE0); + +	writel(0x0a, edp->pll + QSERDES_V6_COM_BG_TIMER); +	writel(0x14, edp->pll + QSERDES_V6_COM_PLL_CORE_CLK_DIV_MODE0); +	writel(0x00, edp->pll + QSERDES_V6_COM_VCO_TUNE_CTRL); +	writel(0x1f, edp->pll + QSERDES_V6_COM_PLL_BIAS_EN_CLK_BUFLR_EN); +	writel(0x0f, edp->pll + QSERDES_V6_COM_CORE_CLK_EN); +	writel(0xa0, edp->pll + QSERDES_V6_COM_VCO_TUNE1_MODE0); +	writel(0x03, edp->pll + QSERDES_V6_COM_VCO_TUNE2_MODE0); + +	writel(code1_mode0, edp->pll + QSERDES_V6_COM_BIN_VCOCAL_CMP_CODE1_MODE0); +	writel(code2_mode0, edp->pll + QSERDES_V6_COM_BIN_VCOCAL_CMP_CODE2_MODE0);  	return 0;  } +static const struct phy_ver_ops qcom_edp_phy_ops_v6 = { +	.com_power_on		= qcom_edp_phy_power_on_v6, +	.com_resetsm_cntrl	= qcom_edp_phy_com_resetsm_cntrl_v6, +	.com_bias_en_clkbuflr	= qcom_edp_com_bias_en_clkbuflr_v6, +	.com_configure_pll	= qcom_edp_com_configure_pll_v6, +	.com_configure_ssc	= qcom_edp_com_configure_ssc_v6, +}; + +static struct qcom_edp_phy_cfg x1e80100_phy_cfg = { +	.swing_pre_emph_cfg = &dp_phy_swing_pre_emph_cfg, +	.ver_ops = &qcom_edp_phy_ops_v6, +}; +  static int qcom_edp_phy_power_on(struct phy *phy)  {  	const struct qcom_edp *edp = phy_get_drvdata(phy); -	const struct qcom_edp_cfg *cfg = edp->cfg;  	u32 bias0_en, drvr0_en, bias1_en, drvr1_en;  	unsigned long pixel_freq; -	u8 ldo_config; -	int timeout; +	u8 ldo_config = 0x0;  	int ret;  	u32 val;  	u8 cfg1; -	writel(DP_PHY_PD_CTL_PWRDN | DP_PHY_PD_CTL_AUX_PWRDN | -	       DP_PHY_PD_CTL_LANE_0_1_PWRDN | DP_PHY_PD_CTL_LANE_2_3_PWRDN | -	       DP_PHY_PD_CTL_PLL_PWRDN | DP_PHY_PD_CTL_DP_CLAMP_EN, -	       edp->edp + DP_PHY_PD_CTL); -	writel(0xfc, edp->edp + DP_PHY_MODE); - -	timeout = readl_poll_timeout(edp->pll + QSERDES_V4_COM_CMN_STATUS, -				     val, val & BIT(7), 5, 200); -	if (timeout) -		return timeout; - +	ret = edp->cfg->ver_ops->com_power_on(edp); +	if (ret) +		return ret; -	ldo_config = (cfg && cfg->is_dp) ? 0x1 : 0x0; +	if (edp->cfg->swing_pre_emph_cfg && !edp->is_edp) +		ldo_config = 0x1;  	writel(ldo_config, edp->tx0 + TXn_LDO_CONFIG);  	writel(ldo_config, edp->tx1 + TXn_LDO_CONFIG); @@ -513,12 +770,9 @@ static int qcom_edp_phy_power_on(struct phy *phy)  	writel(0x01, edp->edp + DP_PHY_CFG);  	writel(0x09, edp->edp + DP_PHY_CFG); -	writel(0x20, edp->pll + QSERDES_V4_COM_RESETSM_CNTRL); - -	timeout = readl_poll_timeout(edp->pll + QSERDES_V4_COM_C_READY_STATUS, -				     val, val & BIT(0), 500, 10000); -	if (timeout) -		return timeout; +	ret = edp->cfg->ver_ops->com_resetsm_cntrl(edp); +	if (ret) +		return ret;  	writel(0x19, edp->edp + DP_PHY_CFG);  	writel(0x1f, edp->tx0 + TXn_HIGHZ_DRVR_EN); @@ -590,6 +844,18 @@ static int qcom_edp_phy_power_off(struct phy *phy)  	return 0;  } +static int qcom_edp_phy_set_mode(struct phy *phy, enum phy_mode mode, int submode) +{ +	struct qcom_edp *edp = phy_get_drvdata(phy); + +	if (mode != PHY_MODE_DP) +		return -EINVAL; + +	edp->is_edp = submode == PHY_SUBMODE_EDP; + +	return 0; +} +  static int qcom_edp_phy_exit(struct phy *phy)  {  	struct qcom_edp *edp = phy_get_drvdata(phy); @@ -605,6 +871,7 @@ static const struct phy_ops qcom_edp_ops = {  	.configure	= qcom_edp_phy_configure,  	.power_on	= qcom_edp_phy_power_on,  	.power_off	= qcom_edp_phy_power_off, +	.set_mode	= qcom_edp_phy_set_mode,  	.exit		= qcom_edp_phy_exit,  	.owner		= THIS_MODULE,  }; @@ -782,6 +1049,7 @@ static int qcom_edp_phy_probe(struct platform_device *pdev)  	edp->dev = dev;  	edp->cfg = of_device_get_match_data(&pdev->dev); +	edp->is_edp = edp->cfg->is_edp;  	edp->edp = devm_platform_ioremap_resource(pdev, 0);  	if (IS_ERR(edp->edp)) @@ -840,10 +1108,11 @@ static int qcom_edp_phy_probe(struct platform_device *pdev)  }  static const struct of_device_id qcom_edp_phy_match_table[] = { -	{ .compatible = "qcom,sc7280-edp-phy" }, -	{ .compatible = "qcom,sc8180x-edp-phy" }, -	{ .compatible = "qcom,sc8280xp-dp-phy", .data = &dp_phy_cfg }, -	{ .compatible = "qcom,sc8280xp-edp-phy", .data = &edp_phy_cfg }, +	{ .compatible = "qcom,sc7280-edp-phy", .data = &sc7280_dp_phy_cfg, }, +	{ .compatible = "qcom,sc8180x-edp-phy", .data = &sc7280_dp_phy_cfg, }, +	{ .compatible = "qcom,sc8280xp-dp-phy", .data = &sc8280xp_dp_phy_cfg, }, +	{ .compatible = "qcom,sc8280xp-edp-phy", .data = &sc8280xp_edp_phy_cfg, }, +	{ .compatible = "qcom,x1e80100-dp-phy", .data = &x1e80100_phy_cfg, },  	{ }  };  MODULE_DEVICE_TABLE(of, qcom_edp_phy_match_table);  |