drm/rockchip: analogix_dp: Do not call Analogix code before bind
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.balletbo@collabora.com
This commit is contained in:
Родитель
7bb3bb4d56
Коммит
a4169609de
|
@ -368,6 +368,8 @@ static void rockchip_dp_unbind(struct device *dev, struct device *master,
|
|||
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 = {
|
||||
|
@ -391,6 +393,7 @@ static int rockchip_dp_probe(struct platform_device *pdev)
|
|||
return -ENOMEM;
|
||||
|
||||
dp->dev = dev;
|
||||
dp->adp = ERR_PTR(-ENODEV);
|
||||
dp->plat_data.panel = panel;
|
||||
|
||||
ret = rockchip_dp_of_probe(dp);
|
||||
|
@ -414,6 +417,9 @@ static int rockchip_dp_suspend(struct device *dev)
|
|||
{
|
||||
struct rockchip_dp_device *dp = dev_get_drvdata(dev);
|
||||
|
||||
if (IS_ERR(dp->adp))
|
||||
return 0;
|
||||
|
||||
return analogix_dp_suspend(dp->adp);
|
||||
}
|
||||
|
||||
|
@ -421,6 +427,9 @@ static int rockchip_dp_resume(struct device *dev)
|
|||
{
|
||||
struct rockchip_dp_device *dp = dev_get_drvdata(dev);
|
||||
|
||||
if (IS_ERR(dp->adp))
|
||||
return 0;
|
||||
|
||||
return analogix_dp_resume(dp->adp);
|
||||
}
|
||||
#endif
|
||||
|
|
Загрузка…
Ссылка в новой задаче