From 357b22cca8213dada9150f0d1b197cbf93cbf3c0 Mon Sep 17 00:00:00 2001 From: Wyon Bi Date: Fri, 28 Sep 2018 11:21:15 +0800 Subject: [PATCH] drm/bridge: analogix_dp: Fix AUX CH not work properly when disabled the rockchip logo Fixes: 44f714e4359c (drm/analogix: dp: remove some function which cause loader logo flash) Change-Id: Ia4d999ce4287e75fd23c4920e1b4e07e7004f4aa Signed-off-by: Wyon Bi --- .../drm/bridge/analogix/analogix_dp_core.c | 29 ++++++++++--------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c b/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c index 1657eccb7191..dca915c74cb8 100644 --- a/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c +++ b/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c @@ -40,23 +40,22 @@ struct bridge_init { struct device_node *node; }; +static void analogix_dp_init(struct analogix_dp_device *dp) +{ + analogix_dp_init_analog_param(dp); + analogix_dp_init_interrupt(dp); + analogix_dp_enable_sw_function(dp); + analogix_dp_config_interrupt(dp); + analogix_dp_init_analog_func(dp); + analogix_dp_init_hpd(dp); + analogix_dp_init_aux(dp); +} + static void analogix_dp_init_dp(struct analogix_dp_device *dp) { analogix_dp_reset(dp); - analogix_dp_swreset(dp); - - analogix_dp_init_analog_param(dp); - analogix_dp_init_interrupt(dp); - - /* SW defined function Normal operation */ - analogix_dp_enable_sw_function(dp); - - analogix_dp_config_interrupt(dp); - analogix_dp_init_analog_func(dp); - - analogix_dp_init_hpd(dp); - analogix_dp_init_aux(dp); + analogix_dp_init(dp); } static int analogix_dp_detect_hpd(struct analogix_dp_device *dp) @@ -1292,6 +1291,8 @@ int analogix_dp_bind(struct device *dev, struct drm_device *drm_dev, return ret; pm_runtime_enable(dev); + pm_runtime_get_sync(dp->dev); + analogix_dp_init(dp); ret = analogix_dp_create_bridge(drm_dev, dp); if (ret) { @@ -1303,6 +1304,7 @@ int analogix_dp_bind(struct device *dev, struct drm_device *drm_dev, return 0; err_disable_pm_runtime: + pm_runtime_put(dp->dev); pm_runtime_disable(dev); return ret; @@ -1326,6 +1328,7 @@ void analogix_dp_unbind(struct device *dev, struct device *master, } drm_dp_aux_unregister(&dp->aux); + pm_runtime_put(dp->dev); pm_runtime_disable(dev); clk_disable_unprepare(dp->clock); }