diff --git a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c index 179c9c497741..3949d5fc3113 100644 --- a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c +++ b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c @@ -69,7 +69,7 @@ struct rockchip_hdmi { struct regmap *regmap; struct drm_encoder encoder; const struct rockchip_hdmi_chip_data *chip_data; - struct clk *vpll_clk; + struct clk *phyref_clk; struct clk *grf_clk; struct dw_hdmi *hdmi; struct phy *phy; @@ -196,14 +196,17 @@ static int rockchip_hdmi_parse_dt(struct rockchip_hdmi *hdmi) return PTR_ERR(hdmi->regmap); } - hdmi->vpll_clk = devm_clk_get(hdmi->dev, "vpll"); - if (PTR_ERR(hdmi->vpll_clk) == -ENOENT) { - hdmi->vpll_clk = NULL; - } else if (PTR_ERR(hdmi->vpll_clk) == -EPROBE_DEFER) { + hdmi->phyref_clk = devm_clk_get(hdmi->dev, "vpll"); + if (PTR_ERR(hdmi->phyref_clk) == -ENOENT) + hdmi->phyref_clk = devm_clk_get(hdmi->dev, "ref"); + + if (PTR_ERR(hdmi->phyref_clk) == -ENOENT) { + hdmi->phyref_clk = NULL; + } else if (PTR_ERR(hdmi->phyref_clk) == -EPROBE_DEFER) { return -EPROBE_DEFER; - } else if (IS_ERR(hdmi->vpll_clk)) { + } else if (IS_ERR(hdmi->phyref_clk)) { DRM_DEV_ERROR(hdmi->dev, "failed to get grf clock\n"); - return PTR_ERR(hdmi->vpll_clk); + return PTR_ERR(hdmi->phyref_clk); } hdmi->grf_clk = devm_clk_get(hdmi->dev, "grf"); @@ -260,7 +263,9 @@ static void dw_hdmi_rockchip_encoder_enable(struct drm_encoder *encoder) if (WARN_ON(!crtc || !crtc->state)) return; - clk_set_rate(hdmi->vpll_clk, crtc->state->adjusted_mode.clock * 1000); + + clk_set_rate(hdmi->phyref_clk, + crtc->state->adjusted_mode.crtc_clock * 1000); if (hdmi->chip_data->lcdsel_grf_reg < 0) return; @@ -540,7 +545,7 @@ static int dw_hdmi_rockchip_bind(struct device *dev, struct device *master, return ret; } - ret = clk_prepare_enable(hdmi->vpll_clk); + ret = clk_prepare_enable(hdmi->phyref_clk); if (ret) { DRM_DEV_ERROR(hdmi->dev, "Failed to enable HDMI vpll: %d\n", ret); @@ -569,7 +574,7 @@ static int dw_hdmi_rockchip_bind(struct device *dev, struct device *master, if (IS_ERR(hdmi->hdmi)) { ret = PTR_ERR(hdmi->hdmi); drm_encoder_cleanup(encoder); - clk_disable_unprepare(hdmi->vpll_clk); + clk_disable_unprepare(hdmi->phyref_clk); } return ret; @@ -581,7 +586,7 @@ static void dw_hdmi_rockchip_unbind(struct device *dev, struct device *master, struct rockchip_hdmi *hdmi = dev_get_drvdata(dev); dw_hdmi_unbind(hdmi->hdmi); - clk_disable_unprepare(hdmi->vpll_clk); + clk_disable_unprepare(hdmi->phyref_clk); } static const struct component_ops dw_hdmi_rockchip_ops = {