From b0c245000abcb3ce0778a0ef5c1c03d3ce221f5c Mon Sep 17 00:00:00 2001 From: Huicong Xu Date: Tue, 30 Jan 2018 16:01:56 +0800 Subject: [PATCH] drm/bridge/synopsys: restore bus_width as 8 when disable hdmi encoder to modify bus width error sometime plug out hdmi and switch cvbs output Change-Id: Iaa7914fbccc99991fbfbc5495ba647f97997c8ba Signed-off-by: Huicong Xu --- drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c index a1768ddeaecc..e683e24e074e 100644 --- a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c +++ b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c @@ -121,6 +121,7 @@ struct rockchip_hdmi { unsigned int colordepth; unsigned int hdmi_quant_range; + unsigned int phy_bus_width; enum drm_hdmi_output_type hdmi_output; }; @@ -421,6 +422,14 @@ dw_hdmi_rockchip_mode_valid(struct drm_connector *connector, void *data, static void dw_hdmi_rockchip_encoder_disable(struct drm_encoder *encoder) { + struct rockchip_hdmi *hdmi = to_rockchip_hdmi(encoder); + + /* + * when plug out hdmi it will be switch cvbs and then phy bus width + * must be set as 8 + */ + if (hdmi->phy) + phy_set_bus_width(hdmi->phy, 8); } static void dw_hdmi_rockchip_encoder_enable(struct drm_encoder *encoder) @@ -434,6 +443,9 @@ static void dw_hdmi_rockchip_encoder_enable(struct drm_encoder *encoder) if (WARN_ON(!crtc || !crtc->state)) return; + if (hdmi->phy) + phy_set_bus_width(hdmi->phy, hdmi->phy_bus_width); + clk_set_rate(hdmi->phyref_clk, crtc->state->adjusted_mode.crtc_clock * 1000); @@ -624,6 +636,7 @@ dw_hdmi_rockchip_encoder_atomic_check(struct drm_encoder *encoder, bus_width = colordepth; } + hdmi->phy_bus_width = bus_width; if (hdmi->phy) phy_set_bus_width(hdmi->phy, bus_width);