4.17-stable review patch. If anyone has any objections, please let me know.
------------------
From: Tomasz Figa tfiga@chromium.org
[ Upstream commit a4169609def769c66f88140678970b2be6f64ac7 ]
Driver callbacks, such as system suspend or resume can be called any time, specifically they can be called before the component bind callback. Let's use dp->adp pointer as a safeguard and skip calling Analogix entry points if it is an ERR_PTR().
Signed-off-by: Tomasz Figa tfiga@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: Andrzej Hajda a.hajda@samsung.com Link: https://patchwork.freedesktop.org/patch/msgid/20180423105003.9004-24-enric.b... Signed-off-by: Sasha Levin alexander.levin@microsoft.com Signed-off-by: Greg Kroah-Hartman gregkh@linuxfoundation.org --- drivers/gpu/drm/rockchip/analogix_dp-rockchip.c | 9 +++++++++ 1 file changed, 9 insertions(+)
--- a/drivers/gpu/drm/rockchip/analogix_dp-rockchip.c +++ b/drivers/gpu/drm/rockchip/analogix_dp-rockchip.c @@ -358,6 +358,8 @@ static void rockchip_dp_unbind(struct de analogix_dp_unbind(dp->adp); rockchip_drm_psr_unregister(&dp->encoder); dp->encoder.funcs->destroy(&dp->encoder); + + dp->adp = ERR_PTR(-ENODEV); }
static const struct component_ops rockchip_dp_component_ops = { @@ -381,6 +383,7 @@ static int rockchip_dp_probe(struct plat return -ENOMEM;
dp->dev = dev; + dp->adp = ERR_PTR(-ENODEV); dp->plat_data.panel = panel;
ret = rockchip_dp_of_probe(dp); @@ -404,6 +407,9 @@ static int rockchip_dp_suspend(struct de { struct rockchip_dp_device *dp = dev_get_drvdata(dev);
+ if (IS_ERR(dp->adp)) + return 0; + return analogix_dp_suspend(dp->adp); }
@@ -411,6 +417,9 @@ static int rockchip_dp_resume(struct dev { struct rockchip_dp_device *dp = dev_get_drvdata(dev);
+ if (IS_ERR(dp->adp)) + return 0; + return analogix_dp_resume(dp->adp); } #endif