@@ -81,6 +81,7 @@ struct phy_ver_ops {
8181 int (* com_clk_fwd_cfg )(const struct qcom_edp * edp );
8282 int (* com_configure_pll )(const struct qcom_edp * edp );
8383 int (* com_configure_ssc )(const struct qcom_edp * edp );
84+ int (* com_ldo_config )(const struct qcom_edp * edp );
8485};
8586
8687struct qcom_edp_phy_cfg {
@@ -352,7 +353,7 @@ static int qcom_edp_set_voltages(struct qcom_edp *edp, const struct phy_configur
352353 const struct qcom_edp_swing_pre_emph_cfg * cfg ;
353354 unsigned int v_level = 0 ;
354355 unsigned int p_level = 0 ;
355- u8 ldo_config ;
356+ int ret ;
356357 u8 swing ;
357358 u8 emph ;
358359 int i ;
@@ -378,13 +379,13 @@ static int qcom_edp_set_voltages(struct qcom_edp *edp, const struct phy_configur
378379 if (swing == 0xff || emph == 0xff )
379380 return - EINVAL ;
380381
381- ldo_config = edp -> is_edp ? 0x0 : 0x1 ;
382+ ret = edp -> cfg -> ver_ops -> com_ldo_config (edp );
383+ if (ret )
384+ return ret ;
382385
383- writel (ldo_config , edp -> tx0 + TXn_LDO_CONFIG );
384386 writel (swing , edp -> tx0 + TXn_TX_DRV_LVL );
385387 writel (emph , edp -> tx0 + TXn_TX_EMP_POST1_LVL );
386388
387- writel (ldo_config , edp -> tx1 + TXn_LDO_CONFIG );
388389 writel (swing , edp -> tx1 + TXn_TX_DRV_LVL );
389390 writel (emph , edp -> tx1 + TXn_TX_EMP_POST1_LVL );
390391
@@ -608,13 +609,60 @@ static int qcom_edp_com_configure_pll_v4(const struct qcom_edp *edp)
608609 return 0 ;
609610}
610611
612+ static int qcom_edp_ldo_config_v3 (const struct qcom_edp * edp )
613+ {
614+ const struct phy_configure_opts_dp * dp_opts = & edp -> dp_opts ;
615+ u32 ldo_config ;
616+
617+ if (!edp -> is_edp )
618+ ldo_config = 0x0 ;
619+ else if (dp_opts -> link_rate <= 2700 )
620+ ldo_config = 0x81 ;
621+ else
622+ ldo_config = 0x41 ;
623+
624+ writel (ldo_config , edp -> tx0 + TXn_LDO_CONFIG );
625+ writel (dp_opts -> lanes > 2 ? ldo_config : 0x00 , edp -> tx1 + TXn_LDO_CONFIG );
626+
627+ return 0 ;
628+ }
629+
630+ static int qcom_edp_ldo_config_v4 (const struct qcom_edp * edp )
631+ {
632+ const struct phy_configure_opts_dp * dp_opts = & edp -> dp_opts ;
633+ u32 ldo_config ;
634+
635+ if (!edp -> is_edp )
636+ ldo_config = 0x0 ;
637+ else if (dp_opts -> link_rate <= 2700 )
638+ ldo_config = 0xc1 ;
639+ else
640+ ldo_config = 0x81 ;
641+
642+ writel (ldo_config , edp -> tx0 + TXn_LDO_CONFIG );
643+ writel (dp_opts -> lanes > 2 ? ldo_config : 0x00 , edp -> tx1 + TXn_LDO_CONFIG );
644+
645+ return 0 ;
646+ }
647+
648+ static const struct phy_ver_ops qcom_edp_phy_ops_v3 = {
649+ .com_power_on = qcom_edp_phy_power_on_v4 ,
650+ .com_resetsm_cntrl = qcom_edp_phy_com_resetsm_cntrl_v4 ,
651+ .com_bias_en_clkbuflr = qcom_edp_com_bias_en_clkbuflr_v4 ,
652+ .com_clk_fwd_cfg = qcom_edp_com_clk_fwd_cfg_v4 ,
653+ .com_configure_pll = qcom_edp_com_configure_pll_v4 ,
654+ .com_configure_ssc = qcom_edp_com_configure_ssc_v4 ,
655+ .com_ldo_config = qcom_edp_ldo_config_v3 ,
656+ };
657+
611658static const struct phy_ver_ops qcom_edp_phy_ops_v4 = {
612659 .com_power_on = qcom_edp_phy_power_on_v4 ,
613660 .com_resetsm_cntrl = qcom_edp_phy_com_resetsm_cntrl_v4 ,
614661 .com_bias_en_clkbuflr = qcom_edp_com_bias_en_clkbuflr_v4 ,
615662 .com_clk_fwd_cfg = qcom_edp_com_clk_fwd_cfg_v4 ,
616663 .com_configure_pll = qcom_edp_com_configure_pll_v4 ,
617664 .com_configure_ssc = qcom_edp_com_configure_ssc_v4 ,
665+ .com_ldo_config = qcom_edp_ldo_config_v4 ,
618666};
619667
620668static const struct qcom_edp_phy_cfg sa8775p_dp_phy_cfg = {
@@ -631,15 +679,15 @@ static const struct qcom_edp_phy_cfg sc7280_dp_phy_cfg = {
631679 .vco_div_cfg = edp_phy_vco_div_cfg_v4 ,
632680 .dp_swing_pre_emph_cfg = & dp_phy_swing_pre_emph_cfg ,
633681 .edp_swing_pre_emph_cfg = & edp_phy_swing_pre_emph_cfg_v3 ,
634- .ver_ops = & qcom_edp_phy_ops_v4 ,
682+ .ver_ops = & qcom_edp_phy_ops_v3 ,
635683};
636684
637685static const struct qcom_edp_phy_cfg sc8180x_dp_phy_cfg = {
638686 .aux_cfg = edp_phy_aux_cfg_v4 ,
639687 .vco_div_cfg = edp_phy_vco_div_cfg_v4 ,
640688 .dp_swing_pre_emph_cfg = & dp_phy_swing_pre_emph_cfg_v2 ,
641689 .edp_swing_pre_emph_cfg = & edp_phy_swing_pre_emph_cfg_v2 ,
642- .ver_ops = & qcom_edp_phy_ops_v4 ,
690+ .ver_ops = & qcom_edp_phy_ops_v3 ,
643691};
644692
645693static const struct qcom_edp_phy_cfg sc8280xp_dp_phy_cfg = {
@@ -824,13 +872,32 @@ static int qcom_edp_com_configure_pll_v6(const struct qcom_edp *edp)
824872 return 0 ;
825873}
826874
875+ static int qcom_edp_ldo_config_v6 (const struct qcom_edp * edp )
876+ {
877+ const struct phy_configure_opts_dp * dp_opts = & edp -> dp_opts ;
878+ u32 ldo_config ;
879+
880+ if (!edp -> is_edp )
881+ ldo_config = 0x0 ;
882+ else if (dp_opts -> link_rate <= 2700 )
883+ ldo_config = 0x51 ;
884+ else
885+ ldo_config = 0x91 ;
886+
887+ writel (ldo_config , edp -> tx0 + TXn_LDO_CONFIG );
888+ writel (dp_opts -> lanes > 2 ? ldo_config : 0x00 , edp -> tx1 + TXn_LDO_CONFIG );
889+
890+ return 0 ;
891+ }
892+
827893static const struct phy_ver_ops qcom_edp_phy_ops_v6 = {
828894 .com_power_on = qcom_edp_phy_power_on_v6 ,
829895 .com_resetsm_cntrl = qcom_edp_phy_com_resetsm_cntrl_v6 ,
830896 .com_bias_en_clkbuflr = qcom_edp_com_bias_en_clkbuflr_v6 ,
831897 .com_clk_fwd_cfg = qcom_edp_com_clk_fwd_cfg_v4 ,
832898 .com_configure_pll = qcom_edp_com_configure_pll_v6 ,
833899 .com_configure_ssc = qcom_edp_com_configure_ssc_v6 ,
900+ .com_ldo_config = qcom_edp_ldo_config_v6 ,
834901};
835902
836903static struct qcom_edp_phy_cfg x1e80100_phy_cfg = {
@@ -1011,6 +1078,7 @@ static const struct phy_ver_ops qcom_edp_phy_ops_v8 = {
10111078 .com_clk_fwd_cfg = qcom_edp_com_clk_fwd_cfg_v8 ,
10121079 .com_configure_pll = qcom_edp_com_configure_pll_v8 ,
10131080 .com_configure_ssc = qcom_edp_com_configure_ssc_v8 ,
1081+ .com_ldo_config = qcom_edp_ldo_config_v6 ,
10141082};
10151083
10161084static struct qcom_edp_phy_cfg glymur_phy_cfg = {
@@ -1026,7 +1094,6 @@ static int qcom_edp_phy_power_on(struct phy *phy)
10261094 const struct qcom_edp * edp = phy_get_drvdata (phy );
10271095 u32 bias0_en , drvr0_en , bias1_en , drvr1_en ;
10281096 unsigned long pixel_freq ;
1029- u8 ldo_config = 0x0 ;
10301097 int ret ;
10311098 u32 val ;
10321099 u8 cfg1 ;
@@ -1035,11 +1102,10 @@ static int qcom_edp_phy_power_on(struct phy *phy)
10351102 if (ret )
10361103 return ret ;
10371104
1038- if (edp -> cfg -> edp_swing_pre_emph_cfg && !edp -> is_edp )
1039- ldo_config = 0x1 ;
1105+ ret = edp -> cfg -> ver_ops -> com_ldo_config (edp );
1106+ if (ret )
1107+ return ret ;
10401108
1041- writel (ldo_config , edp -> tx0 + TXn_LDO_CONFIG );
1042- writel (ldo_config , edp -> tx1 + TXn_LDO_CONFIG );
10431109 writel (0x00 , edp -> tx0 + TXn_LANE_MODE_1 );
10441110 writel (0x00 , edp -> tx1 + TXn_LANE_MODE_1 );
10451111
0 commit comments