#include <drm/drm_of.h>
#include <drm/drm_plane_helper.h>
#include <drm/drm_simple_kms_helper.h>
+#include <linux/busfreq-imx.h>
#include <linux/clk.h>
#include <linux/iopoll.h>
#include <linux/of_graph.h>
if (mxsfb->enabled)
return;
+ if (mxsfb->devdata->flags & MXSFB_FLAG_BUSFREQ)
+ request_bus_freq(BUS_FREQ_HIGH);
+
writel(0, mxsfb->base + LCDC_CTRL);
mxsfb_crtc_mode_set_nofb(mxsfb);
mxsfb_enable_controller(mxsfb);
mxsfb_disable_controller(mxsfb);
+ if (mxsfb->devdata->flags & MXSFB_FLAG_BUSFREQ)
+ release_bus_freq(BUS_FREQ_HIGH);
+
mxsfb->enabled = false;
}
#include <linux/pm_runtime.h>
#include <linux/reservation.h>
#include <linux/version.h>
-#include <linux/busfreq-imx.h>
#include <drm/drmP.h>
#include <drm/drm_atomic.h>
return 0;
mxsfb_crtc_disable(mxsfb);
-
- if (mxsfb->devdata->flags & MXSFB_FLAG_BUSFREQ)
- release_bus_freq(BUS_FREQ_HIGH);
+ mxsfb->suspended = true;
return 0;
}
struct drm_device *drm = dev_get_drvdata(dev);
struct mxsfb_drm_private *mxsfb = drm->dev_private;
- if (!drm->registered)
+ if (!drm->registered || !mxsfb->suspended)
return 0;
- if (mxsfb->devdata->flags & MXSFB_FLAG_BUSFREQ)
- request_bus_freq(BUS_FREQ_HIGH);
-
mxsfb_crtc_enable(mxsfb);
return 0;
struct mxsfb_drm_private *mxsfb = drm->dev_private;
mxsfb_crtc_disable(mxsfb);
+ mxsfb->suspended = true;
return 0;
}
struct drm_device *drm = dev_get_drvdata(dev);
struct mxsfb_drm_private *mxsfb = drm->dev_private;
+ if (!mxsfb->suspended)
+ return 0;
+
mxsfb_crtc_enable(mxsfb);
return 0;