diff --git a/msm/dp/dp_catalog.c b/msm/dp/dp_catalog.c index 37b68a7e88..ffdd62ff99 100644 --- a/msm/dp/dp_catalog.c +++ b/msm/dp/dp_catalog.c @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-only /* - * Copyright (c) 2017-2020, The Linux Foundation. All rights reserved. + * Copyright (c) 2017-2021, The Linux Foundation. All rights reserved. */ @@ -1406,6 +1406,7 @@ static void dp_catalog_panel_tpg_cfg(struct dp_catalog_panel *panel, { struct dp_catalog_private *catalog; struct dp_io_data *io_data; + u32 reg; if (!panel) { DP_ERR("invalid input\n"); @@ -1427,12 +1428,13 @@ static void dp_catalog_panel_tpg_cfg(struct dp_catalog_panel *panel, if (!enable) { dp_write(MMSS_DP_TPG_MAIN_CONTROL, 0x0); dp_write(MMSS_DP_BIST_ENABLE, 0x0); - dp_write(MMSS_DP_TIMING_ENGINE_EN, 0x0); + reg = dp_read(MMSS_DP_TIMING_ENGINE_EN); + reg &= ~0x1; + dp_write(MMSS_DP_TIMING_ENGINE_EN, reg); wmb(); /* ensure Timing generator is turned off */ return; } - dp_write(MMSS_DP_INTF_CONFIG, 0x0); dp_write(MMSS_DP_INTF_HSYNC_CTL, panel->hsync_ctl); dp_write(MMSS_DP_INTF_VSYNC_PERIOD_F0, @@ -1458,7 +1460,9 @@ static void dp_catalog_panel_tpg_cfg(struct dp_catalog_panel *panel, dp_write(MMSS_DP_TPG_VIDEO_CONFIG, 0x5); wmb(); /* ensure TPG config is programmed */ dp_write(MMSS_DP_BIST_ENABLE, 0x1); - dp_write(MMSS_DP_TIMING_ENGINE_EN, 0x1); + reg = dp_read(MMSS_DP_TIMING_ENGINE_EN); + reg |= 0x1; + dp_write(MMSS_DP_TIMING_ENGINE_EN, reg); wmb(); /* ensure Timing generator is turned on */ } diff --git a/msm/dp/dp_panel.c b/msm/dp/dp_panel.c index 1097a26825..d505dd2c07 100644 --- a/msm/dp/dp_panel.c +++ b/msm/dp/dp_panel.c @@ -1956,7 +1956,7 @@ static void dp_panel_handle_sink_request(struct dp_panel *dp_panel) static void dp_panel_tpg_config(struct dp_panel *dp_panel, bool enable) { - u32 hsync_start_x, hsync_end_x; + u32 hsync_start_x, hsync_end_x, hactive; struct dp_catalog_panel *catalog; struct dp_panel_private *panel; struct dp_panel_info *pinfo; @@ -1985,9 +1985,13 @@ static void dp_panel_tpg_config(struct dp_panel *dp_panel, bool enable) return; } + hactive = pinfo->h_active; + if (pinfo->widebus_en) + hactive >>= 1; + /* TPG config */ catalog->hsync_period = pinfo->h_sync_width + pinfo->h_back_porch + - pinfo->h_active + pinfo->h_front_porch; + hactive + pinfo->h_front_porch; catalog->vsync_period = pinfo->v_sync_width + pinfo->v_back_porch + pinfo->v_active + pinfo->v_front_porch;