return driver_data;
 }
 
-static int gsc_m2m_suspend(struct gsc_dev *gsc)
-{
-       unsigned long flags;
-       int timeout;
-
-       spin_lock_irqsave(&gsc->slock, flags);
-       if (!gsc_m2m_pending(gsc)) {
-               spin_unlock_irqrestore(&gsc->slock, flags);
-               return 0;
-       }
-       clear_bit(ST_M2M_SUSPENDED, &gsc->state);
-       set_bit(ST_M2M_SUSPENDING, &gsc->state);
-       spin_unlock_irqrestore(&gsc->slock, flags);
-
-       timeout = wait_event_timeout(gsc->irq_queue,
-                            test_bit(ST_M2M_SUSPENDED, &gsc->state),
-                            GSC_SHUTDOWN_TIMEOUT);
-
-       clear_bit(ST_M2M_SUSPENDING, &gsc->state);
-       return timeout == 0 ? -EAGAIN : 0;
-}
-
-static void gsc_m2m_resume(struct gsc_dev *gsc)
-{
-       struct gsc_ctx *ctx;
-       unsigned long flags;
-
-       spin_lock_irqsave(&gsc->slock, flags);
-       /* Clear for full H/W setup in first run after resume */
-       ctx = gsc->m2m.ctx;
-       gsc->m2m.ctx = NULL;
-       spin_unlock_irqrestore(&gsc->slock, flags);
-
-       if (test_and_clear_bit(ST_M2M_SUSPENDED, &gsc->state))
-               gsc_m2m_job_finish(ctx, VB2_BUF_STATE_ERROR);
-}
-
 static int gsc_probe(struct platform_device *pdev)
 {
        struct gsc_dev *gsc;
        return 0;
 }
 
+#ifdef CONFIG_PM
+static int gsc_m2m_suspend(struct gsc_dev *gsc)
+{
+       unsigned long flags;
+       int timeout;
+
+       spin_lock_irqsave(&gsc->slock, flags);
+       if (!gsc_m2m_pending(gsc)) {
+               spin_unlock_irqrestore(&gsc->slock, flags);
+               return 0;
+       }
+       clear_bit(ST_M2M_SUSPENDED, &gsc->state);
+       set_bit(ST_M2M_SUSPENDING, &gsc->state);
+       spin_unlock_irqrestore(&gsc->slock, flags);
+
+       timeout = wait_event_timeout(gsc->irq_queue,
+                            test_bit(ST_M2M_SUSPENDED, &gsc->state),
+                            GSC_SHUTDOWN_TIMEOUT);
+
+       clear_bit(ST_M2M_SUSPENDING, &gsc->state);
+       return timeout == 0 ? -EAGAIN : 0;
+}
+
+static void gsc_m2m_resume(struct gsc_dev *gsc)
+{
+       struct gsc_ctx *ctx;
+       unsigned long flags;
+
+       spin_lock_irqsave(&gsc->slock, flags);
+       /* Clear for full H/W setup in first run after resume */
+       ctx = gsc->m2m.ctx;
+       gsc->m2m.ctx = NULL;
+       spin_unlock_irqrestore(&gsc->slock, flags);
+
+       if (test_and_clear_bit(ST_M2M_SUSPENDED, &gsc->state))
+               gsc_m2m_job_finish(ctx, VB2_BUF_STATE_ERROR);
+}
+
 static int gsc_runtime_resume(struct device *dev)
 {
        struct gsc_dev *gsc = dev_get_drvdata(dev);
        pr_debug("gsc%d: state: 0x%lx", gsc->id, gsc->state);
        return ret;
 }
+#endif
 
+#ifdef CONFIG_PM_SLEEP
 static int gsc_resume(struct device *dev)
 {
        struct gsc_dev *gsc = dev_get_drvdata(dev);
 
        return 0;
 }
+#endif
 
 static const struct dev_pm_ops gsc_pm_ops = {
-       .suspend                = gsc_suspend,
-       .resume                 = gsc_resume,
-       .runtime_suspend        = gsc_runtime_suspend,
-       .runtime_resume         = gsc_runtime_resume,
+       SET_SYSTEM_SLEEP_PM_OPS(gsc_suspend, gsc_resume)
+       SET_RUNTIME_PM_OPS(gsc_runtime_suspend, gsc_runtime_resume, NULL)
 };
 
 static struct platform_driver gsc_driver = {