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 | 42 ++++++++++++++++++++----------- 1 file changed, 28 insertions(+), 14 deletions(-) diff --git a/drivers/gpu/drm/mediatek/mtk_dp.c b/drivers/gpu/drm/mediatek/mtk_dp.c index 88e22a9553e0..9c28616c6ada 100644 --- a/drivers/gpu/drm/mediatek/mtk_dp.c +++ b/drivers/gpu/drm/mediatek/mtk_dp.c @@ -1404,6 +1404,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); @@ -1414,20 +1416,35 @@ 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); - regmap_write(mtk_dp->regs, DP_PHY_AUX_RX_CTL, - RG_DPAUX_RX_VALID_DEGLITCH_EN | RG_XTP_GLB_CKDET_EN | - RG_DPAUX_RX_EN); - regmap_clear_bits(mtk_dp->regs, MTK_DP_0034, DA_CKM_CKTX0_EN_FORCE_EN); + + if (mtk_dp->phy_dev) { + regmap_write(mtk_dp->regs, DP_PHY_AUX_RX_CTL, + RG_DPAUX_RX_VALID_DEGLITCH_EN | RG_XTP_GLB_CKDET_EN | + RG_DPAUX_RX_EN); + regmap_clear_bits(mtk_dp->regs, MTK_DP_0034, 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); - regmap_set_bits(mtk_dp->regs, MTK_DP_0034, DA_CKM_CKTX0_EN_FORCE_EN); + if (unlikely(mtk_dp->phy_dev)) { + regmap_set_bits(mtk_dp->regs, MTK_DP_0034, DA_CKM_CKTX0_EN_FORCE_EN); - /* Disable RX */ - regmap_write(mtk_dp->regs, DP_PHY_AUX_RX_CTL, 0); + /* Disable RX */ + regmap_write(mtk_dp->regs, 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); @@ -2711,12 +2728,11 @@ static int mtk_dp_register_audio_driver(struct device *dev) if (IS_ERR(mtk_dp->audio_pdev)) return PTR_ERR(mtk_dp->audio_pdev); - ret = devm_add_action_or_reset(dev, mtk_dp_unregister_pdevs, mtk_dp->phy_dev); - if (ret) { - platform_device_unregister(mtk_dp->audio_pdev); + ret = devm_add_action_or_reset(dev, mtk_dp_unregister_pdevs, mtk_dp->audio_pdev); + if (ret) return dev_err_probe(dev, ret, "Failed to add codec unregister devm action"); - } + return 0; } @@ -2734,11 +2750,9 @@ static int mtk_dp_register_phy(struct mtk_dp *mtk_dp) "Failed to create device mediatek-dp-phy\n"); ret = devm_add_action_or_reset(dev, mtk_dp_unregister_pdevs, mtk_dp->phy_dev); - if (ret) { - platform_device_unregister(mtk_dp->phy_dev); + if (ret) return dev_err_probe(dev, ret, "Failed to add phy unregister devm action"); - } mtk_dp_get_calibration_data(mtk_dp); -- 2.54.0
