Some eDP sinks or platform boards will not support hpd.
This patch adds support for those cases.

Signed-off-by: Sankeerth Billakanti <quic_sbill...@quicinc.com>
---
 drivers/gpu/drm/msm/dp/dp_catalog.c | 15 ++++++++++++---
 1 file changed, 12 insertions(+), 3 deletions(-)

diff --git a/drivers/gpu/drm/msm/dp/dp_catalog.c 
b/drivers/gpu/drm/msm/dp/dp_catalog.c
index 1809ce2..8f1fc71 100644
--- a/drivers/gpu/drm/msm/dp/dp_catalog.c
+++ b/drivers/gpu/drm/msm/dp/dp_catalog.c
@@ -244,10 +244,17 @@ void dp_catalog_aux_update_cfg(struct dp_catalog 
*dp_catalog)
 
 int dp_catalog_aux_wait_for_hpd_connect_state(struct dp_catalog *dp_catalog)
 {
-       u32 state;
+       u32 state, hpd_en;
        struct dp_catalog_private *catalog = container_of(dp_catalog,
                                struct dp_catalog_private, dp_catalog);
 
+       hpd_en = dp_read_aux(catalog, REG_DP_DP_HPD_CTRL);
+       hpd_en &= DP_DP_HPD_CTRL_HPD_EN;
+
+       /* no-hpd case */
+       if (!hpd_en)
+               return 0;
+
        /* poll for hpd connected status every 2ms and timeout after 500ms */
        return readl_poll_timeout(catalog->io->dp_controller.aux.base +
                                REG_DP_DP_HPD_INT_STATUS,
@@ -586,8 +593,10 @@ void dp_catalog_ctrl_hpd_config(struct dp_catalog 
*dp_catalog)
        reftimer |= DP_DP_HPD_REFTIMER_ENABLE;
        dp_write_aux(catalog, REG_DP_DP_HPD_REFTIMER, reftimer);
 
-       /* Enable HPD */
-       dp_write_aux(catalog, REG_DP_DP_HPD_CTRL, DP_DP_HPD_CTRL_HPD_EN);
+       /* Enable HPD if supported*/
+       if (!of_property_read_bool(catalog->dev->of_node, "no-hpd"))
+               dp_write_aux(catalog, REG_DP_DP_HPD_CTRL,
+                               DP_DP_HPD_CTRL_HPD_EN);
 }
 
 u32 dp_catalog_link_is_connected(struct dp_catalog *dp_catalog)
-- 
2.7.4

Reply via email to