drm/bridge: analogix_dp: set the DPCD600 during disabling PSR
authorCaesar Wang <wxt@rock-chips.com>
Sat, 10 Dec 2016 02:49:19 +0000 (10:49 +0800)
committerArchit Taneja <architt@codeaurora.org>
Thu, 15 Dec 2016 09:37:12 +0000 (15:07 +0530)
It looks like the BOE panel FW didn't ack the DPCD600 signal from the
host device, this will cause the panel to hang on the startup display.

The root cause is that we use the fast link mode when we enter and
exit PSR, the issue is gone if we switch from the fast link to main
link mode.

Signed-off-by: Caesar Wang <wxt@rock-chips.com>
Signed-off-by: Archit Taneja <architt@codeaurora.org>
Link: http://patchwork.freedesktop.org/patch/msgid/1481338159-7189-1-git-send-email-wxt@rock-chips.com
drivers/gpu/drm/bridge/analogix/analogix_dp_core.c

index eb9bf8786c249744418b601bae38bb78ae04f2a7..134bd28337a9c0e263a3927c07f5f9f9d3fa0051 100644 (file)
@@ -133,6 +133,7 @@ int analogix_dp_disable_psr(struct device *dev)
 {
        struct analogix_dp_device *dp = dev_get_drvdata(dev);
        struct edp_vsc_psr psr_vsc;
+       int ret;
 
        if (!dp->psr_support)
                return 0;
@@ -147,6 +148,10 @@ int analogix_dp_disable_psr(struct device *dev)
        psr_vsc.DB0 = 0;
        psr_vsc.DB1 = 0;
 
+       ret = drm_dp_dpcd_writeb(&dp->aux, DP_SET_POWER, DP_SET_POWER_D0);
+       if (ret != 1)
+               dev_err(dp->dev, "Failed to set DP Power0 %d\n", ret);
+
        analogix_dp_send_psr_spd(dp, &psr_vsc);
        return 0;
 }