From 91033d8707a92e089fbe0b9cb48565d2c8581659 Mon Sep 17 00:00:00 2001
From: Liu Ying <victor.liu@nxp.com>
Date: Tue, 14 Nov 2017 13:28:41 +0800
Subject: [PATCH] MLK-16812 drm/imx: ldb: Let system PM behave properly when we
 are unbinded

The system power management operations should get correct driver data
before going on to further handling.  When the component is unbinded,
driver data should be set to NULL so that the system power management
may be bypassed(return early).  This way, we may prevent the system power
management from using any invalid driver data.

Fixes: 915ac0ad7369 ("MLK-16581-7 drm/imx: ldb: Add system power management support")
Signed-off-by: Liu Ying <victor.liu@nxp.com>
---
 drivers/gpu/drm/imx/imx-ldb.c | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/drivers/gpu/drm/imx/imx-ldb.c b/drivers/gpu/drm/imx/imx-ldb.c
index 3cc45e56b7c92a..ef5f229a4b4c2a 100644
--- a/drivers/gpu/drm/imx/imx-ldb.c
+++ b/drivers/gpu/drm/imx/imx-ldb.c
@@ -1273,6 +1273,8 @@ static void imx_ldb_unbind(struct device *dev, struct device *master,
 		kfree(channel->edid);
 		i2c_put_adapter(channel->ddc);
 	}
+
+	dev_set_drvdata(dev, NULL);
 }
 
 static const struct component_ops imx_ldb_ops = {
@@ -1298,6 +1300,9 @@ static int imx_ldb_suspend(struct device *dev)
 	struct imx_ldb_channel *channel;
 	int i;
 
+	if (imx_ldb == NULL)
+		return 0;
+
 	for (i = 0; i < 2; i++) {
 		channel = &imx_ldb->channel[i];
 
@@ -1315,6 +1320,9 @@ static int imx_ldb_resume(struct device *dev)
 	struct imx_ldb *imx_ldb = dev_get_drvdata(dev);
 	int i;
 
+	if (imx_ldb == NULL)
+		return 0;
+
 	if (imx_ldb->visible_phy)
 		for (i = 0; i < 2; i++)
 			phy_init(imx_ldb->channel[i].phy);
-- 
GitLab