|
@@ -168,11 +168,13 @@ static struct drm_driver exynos_drm_driver = {
|
|
|
static int exynos_drm_suspend(struct device *dev)
|
|
|
{
|
|
|
struct drm_device *drm_dev = dev_get_drvdata(dev);
|
|
|
- struct exynos_drm_private *private = drm_dev->dev_private;
|
|
|
+ struct exynos_drm_private *private;
|
|
|
|
|
|
if (pm_runtime_suspended(dev) || !drm_dev)
|
|
|
return 0;
|
|
|
|
|
|
+ private = drm_dev->dev_private;
|
|
|
+
|
|
|
drm_kms_helper_poll_disable(drm_dev);
|
|
|
exynos_drm_fbdev_suspend(drm_dev);
|
|
|
private->suspend_state = drm_atomic_helper_suspend(drm_dev);
|
|
@@ -188,11 +190,12 @@ static int exynos_drm_suspend(struct device *dev)
|
|
|
static int exynos_drm_resume(struct device *dev)
|
|
|
{
|
|
|
struct drm_device *drm_dev = dev_get_drvdata(dev);
|
|
|
- struct exynos_drm_private *private = drm_dev->dev_private;
|
|
|
+ struct exynos_drm_private *private;
|
|
|
|
|
|
if (pm_runtime_suspended(dev) || !drm_dev)
|
|
|
return 0;
|
|
|
|
|
|
+ private = drm_dev->dev_private;
|
|
|
drm_atomic_helper_resume(drm_dev, private->suspend_state);
|
|
|
exynos_drm_fbdev_resume(drm_dev);
|
|
|
drm_kms_helper_poll_enable(drm_dev);
|
|
@@ -427,6 +430,7 @@ static void exynos_drm_unbind(struct device *dev)
|
|
|
|
|
|
kfree(drm->dev_private);
|
|
|
drm->dev_private = NULL;
|
|
|
+ dev_set_drvdata(dev, NULL);
|
|
|
|
|
|
drm_dev_unref(drm);
|
|
|
}
|