MLK-16812 drm/imx: ldb: Let system PM behave properly when we are unbinded
authorLiu Ying <victor.liu@nxp.com>
Tue, 14 Nov 2017 05:28:41 +0000 (13:28 +0800)
committerNitin Garg <nitin.garg@nxp.com>
Mon, 19 Mar 2018 20:46:57 +0000 (15:46 -0500)
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

index bbe111e..cfb3f02 100644 (file)
@@ -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);