The PHY driver has gained support for .power_on() and .power_off()
callbacks: use the API provided phy_power_on(), phy_power_off()
functions instead of writing into PHY registers from this driver.

Signed-off-by: AngeloGioacchino Del Regno 
<[email protected]>
---
 drivers/gpu/drm/mediatek/mtk_dp.c | 32 ++++++++++++++++++++++++-------
 1 file changed, 25 insertions(+), 7 deletions(-)

diff --git a/drivers/gpu/drm/mediatek/mtk_dp.c 
b/drivers/gpu/drm/mediatek/mtk_dp.c
index 97bce8966a1f..3b5348ab487d 100644
--- a/drivers/gpu/drm/mediatek/mtk_dp.c
+++ b/drivers/gpu/drm/mediatek/mtk_dp.c
@@ -1415,6 +1415,8 @@ static void mtk_dp_aux_panel_poweron(struct mtk_dp 
*mtk_dp, bool pwron)
 
 static void mtk_dp_power_enable(struct mtk_dp *mtk_dp)
 {
+       int ret;
+
        mtk_dp_update_bits(mtk_dp, MTK_DP_TOP_RESET_AND_PROBE,
                           0, SW_RST_B_PHYD);
 
@@ -1425,21 +1427,37 @@ static void mtk_dp_power_enable(struct mtk_dp *mtk_dp)
                           SW_RST_B_PHYD, SW_RST_B_PHYD);
        mtk_dp_update_bits(mtk_dp, MTK_DP_TOP_PWR_STATE,
                           DP_PWR_STATE_BANDGAP_TPLL, DP_PWR_STATE_MASK);
-       mtk_dp_write(mtk_dp, DP_PHY_AUX_RX_CTL,
-                    RG_DPAUX_RX_VALID_DEGLITCH_EN | RG_XTP_GLB_CKDET_EN |
-                    RG_DPAUX_RX_EN);
-       mtk_dp_update_bits(mtk_dp, MTK_DP_0034, 0, DA_CKM_CKTX0_EN_FORCE_EN);
+
+       if (mtk_dp->phy_dev) {
+               mtk_dp_write(mtk_dp, DP_PHY_AUX_RX_CTL,
+                            RG_DPAUX_RX_VALID_DEGLITCH_EN | 
RG_XTP_GLB_CKDET_EN |
+                            RG_DPAUX_RX_EN);
+               mtk_dp_update_bits(mtk_dp, MTK_DP_0034, 0, 
DA_CKM_CKTX0_EN_FORCE_EN);
+       } else {
+               ret = phy_power_on(mtk_dp->phy);
+               if (ret)
+                       dev_warn(mtk_dp->dev, "Could not power on PHY!\n");
+       }
 }
 
 static void mtk_dp_power_disable(struct mtk_dp *mtk_dp)
 {
+       int ret;
+
        mtk_dp_write(mtk_dp, MTK_DP_TOP_PWR_STATE, 0);
 
-       mtk_dp_update_bits(mtk_dp, MTK_DP_0034,
+       if (unlikely(mtk_dp->phy_dev)) {
+               mtk_dp_update_bits(mtk_dp, MTK_DP_0034,
                           DA_CKM_CKTX0_EN_FORCE_EN, DA_CKM_CKTX0_EN_FORCE_EN);
 
-       /* Disable RX */
-       mtk_dp_write(mtk_dp, DP_PHY_AUX_RX_CTL, 0);
+               /* Disable RX */
+               mtk_dp_write(mtk_dp, DP_PHY_AUX_RX_CTL, 0);
+       } else {
+               ret = phy_power_off(mtk_dp->phy);
+               if (ret)
+                       dev_warn(mtk_dp->dev, "Could not power off PHY!\n");
+       }
+
        mtk_dp_write(mtk_dp, MTK_DP_TOP_MEM_PD,
                     0x550 | FUSE_SEL | MEM_ISO_EN);
 }
-- 
2.54.0

Reply via email to