mirror of
https://github.com/torvalds/linux.git
synced 2025-01-01 15:51:46 +00:00
drm/bridge: analogix_dp: Don't change psr while bridge is disabled
There is a race between AUX CH bring-up and enabling bridge which will cause link training to fail. To avoid hitting it, don't change psr state while enabling the bridge. Cc: Tomeu Vizoso <tomeu.vizoso@collabora.com> Cc: Sean Paul <seanpaul@chromium.org> Signed-off-by: zain wang <wzz@rock-chips.com> Signed-off-by: Caesar Wang <wxt@rock-chips.com> [seanpaul fixed up the commit message a bit and renamed *_supported to *_enabled] Signed-off-by: Sean Paul <seanpaul@chromium.org> Signed-off-by: Thierry Escande <thierry.escande@collabora.com> Signed-off-by: Enric Balletbo i Serra <enric.balletbo@collabora.com> Tested-by: Marek Szyprowski <m.szyprowski@samsung.com> Reviewed-by: Archit Taneja <architt@codeaurora.org> Signed-off-by: Heiko Stuebner <heiko@sntech.de> Link: https://patchwork.freedesktop.org/patch/msgid/20180309222327.18689-4-enric.balletbo@collabora.com
This commit is contained in:
parent
baa2f02401
commit
243e398aab
@ -98,18 +98,18 @@ static int analogix_dp_detect_hpd(struct analogix_dp_device *dp)
|
||||
return 0;
|
||||
}
|
||||
|
||||
int analogix_dp_psr_supported(struct analogix_dp_device *dp)
|
||||
int analogix_dp_psr_enabled(struct analogix_dp_device *dp)
|
||||
{
|
||||
|
||||
return dp->psr_support;
|
||||
return dp->psr_enable;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(analogix_dp_psr_supported);
|
||||
EXPORT_SYMBOL_GPL(analogix_dp_psr_enabled);
|
||||
|
||||
int analogix_dp_enable_psr(struct analogix_dp_device *dp)
|
||||
{
|
||||
struct edp_vsc_psr psr_vsc;
|
||||
|
||||
if (!dp->psr_support)
|
||||
if (!dp->psr_enable)
|
||||
return 0;
|
||||
|
||||
/* Prepare VSC packet as per EDP 1.4 spec, Table 6.9 */
|
||||
@ -131,7 +131,7 @@ int analogix_dp_disable_psr(struct analogix_dp_device *dp)
|
||||
struct edp_vsc_psr psr_vsc;
|
||||
int ret;
|
||||
|
||||
if (!dp->psr_support)
|
||||
if (!dp->psr_enable)
|
||||
return 0;
|
||||
|
||||
/* Prepare VSC packet as per EDP 1.4 spec, Table 6.9 */
|
||||
@ -871,8 +871,8 @@ static void analogix_dp_commit(struct analogix_dp_device *dp)
|
||||
/* Enable video */
|
||||
analogix_dp_start_video(dp);
|
||||
|
||||
dp->psr_support = analogix_dp_detect_sink_psr(dp);
|
||||
if (dp->psr_support)
|
||||
dp->psr_enable = analogix_dp_detect_sink_psr(dp);
|
||||
if (dp->psr_enable)
|
||||
analogix_dp_enable_sink_psr(dp);
|
||||
}
|
||||
|
||||
@ -1117,6 +1117,7 @@ static void analogix_dp_bridge_disable(struct drm_bridge *bridge)
|
||||
if (ret)
|
||||
DRM_ERROR("failed to setup the panel ret = %d\n", ret);
|
||||
|
||||
dp->psr_enable = false;
|
||||
dp->dpms_mode = DRM_MODE_DPMS_OFF;
|
||||
}
|
||||
|
||||
|
@ -170,7 +170,7 @@ struct analogix_dp_device {
|
||||
int dpms_mode;
|
||||
int hpd_gpio;
|
||||
bool force_hpd;
|
||||
bool psr_support;
|
||||
bool psr_enable;
|
||||
|
||||
struct mutex panel_lock;
|
||||
bool panel_is_modeset;
|
||||
|
@ -82,7 +82,7 @@ static void analogix_dp_psr_set(struct drm_encoder *encoder, bool enabled)
|
||||
struct rockchip_dp_device *dp = to_dp(encoder);
|
||||
int ret;
|
||||
|
||||
if (!analogix_dp_psr_supported(dp->adp))
|
||||
if (!analogix_dp_psr_enabled(dp->adp))
|
||||
return;
|
||||
|
||||
DRM_DEV_DEBUG(dp->dev, "%s PSR...\n", enabled ? "Entry" : "Exit");
|
||||
|
@ -41,7 +41,7 @@ struct analogix_dp_plat_data {
|
||||
struct drm_connector *);
|
||||
};
|
||||
|
||||
int analogix_dp_psr_supported(struct analogix_dp_device *dp);
|
||||
int analogix_dp_psr_enabled(struct analogix_dp_device *dp);
|
||||
int analogix_dp_enable_psr(struct analogix_dp_device *dp);
|
||||
int analogix_dp_disable_psr(struct analogix_dp_device *dp);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user