return 0;
 }
 
-#ifdef CONFIG_PM
-/*
- * These two functions are used from both suspend/resume and
- * the runtime counterparts to handle external resources like
- * clocks, pins and regulators when going to sleep.
- */
-static void pl022_suspend_resources(struct pl022 *pl022, bool runtime)
-{
-       clk_disable_unprepare(pl022->clk);
-
-       if (runtime)
-               pinctrl_pm_select_idle_state(&pl022->adev->dev);
-       else
-               pinctrl_pm_select_sleep_state(&pl022->adev->dev);
-}
-
-static void pl022_resume_resources(struct pl022 *pl022, bool runtime)
-{
-       /* First go to the default state */
-       pinctrl_pm_select_default_state(&pl022->adev->dev);
-       if (!runtime)
-               /* Then let's idle the pins until the next transfer happens */
-               pinctrl_pm_select_idle_state(&pl022->adev->dev);
-
-       clk_prepare_enable(pl022->clk);
-}
-#endif
-
-#ifdef CONFIG_SUSPEND
+#ifdef CONFIG_PM_SLEEP
 static int pl022_suspend(struct device *dev)
 {
        struct pl022 *pl022 = dev_get_drvdata(dev);
                return ret;
        }
 
-       pm_runtime_get_sync(dev);
-       pl022_suspend_resources(pl022, false);
+       ret = pm_runtime_force_suspend(dev);
+       if (ret) {
+               spi_master_resume(pl022->master);
+               return ret;
+       }
+
+       pinctrl_pm_select_sleep_state(dev);
 
        dev_dbg(dev, "suspended\n");
        return 0;
        struct pl022 *pl022 = dev_get_drvdata(dev);
        int ret;
 
-       pl022_resume_resources(pl022, false);
-       pm_runtime_put(dev);
+       ret = pm_runtime_force_resume(dev);
+       if (ret)
+               dev_err(dev, "problem resuming\n");
 
        /* Start the queue running */
        ret = spi_master_resume(pl022->master);
 
        return ret;
 }
-#endif /* CONFIG_PM */
+#endif
 
 #ifdef CONFIG_PM
 static int pl022_runtime_suspend(struct device *dev)
 {
        struct pl022 *pl022 = dev_get_drvdata(dev);
 
-       pl022_suspend_resources(pl022, true);
+       clk_disable_unprepare(pl022->clk);
+       pinctrl_pm_select_idle_state(dev);
+
        return 0;
 }
 
 {
        struct pl022 *pl022 = dev_get_drvdata(dev);
 
-       pl022_resume_resources(pl022, true);
+       pinctrl_pm_select_default_state(dev);
+       clk_prepare_enable(pl022->clk);
+
        return 0;
 }
 #endif