From b7c33a0e4021fda663241eccdbd445fd5a455ace Mon Sep 17 00:00:00 2001 From: Liu Ying Date: Tue, 14 Nov 2017 13:28:41 +0800 Subject: 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 (cherry picked from commit c7aeac017eeffe97df2506314d7647e2364185d1) --- 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 bbe111e7d00f..cfb3f02f1a68 100644 --- a/drivers/gpu/drm/imx/imx-ldb.c +++ b/drivers/gpu/drm/imx/imx-ldb.c @@ -1291,6 +1291,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 = { @@ -1316,6 +1318,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]; @@ -1333,6 +1338,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); -- cgit v1.2.3