{
        int ret;
        struct spi_controller *ctlr = dev_get_drvdata(dev);
-       struct rockchip_spi *rs = spi_controller_get_devdata(ctlr);
 
        ret = spi_controller_suspend(ctlr);
        if (ret < 0)
                return ret;
 
-       clk_disable_unprepare(rs->spiclk);
-       clk_disable_unprepare(rs->apb_pclk);
+       ret = pm_runtime_force_suspend(dev);
+       if (ret < 0) {
+               spi_controller_resume(ctlr);
+               return ret;
+       }
 
        pinctrl_pm_select_sleep_state(dev);
 
 {
        int ret;
        struct spi_controller *ctlr = dev_get_drvdata(dev);
-       struct rockchip_spi *rs = spi_controller_get_devdata(ctlr);
 
        pinctrl_pm_select_default_state(dev);
 
-       ret = clk_prepare_enable(rs->apb_pclk);
+       ret = pm_runtime_force_resume(dev);
        if (ret < 0)
                return ret;
 
-       ret = clk_prepare_enable(rs->spiclk);
-       if (ret < 0)
-               clk_disable_unprepare(rs->apb_pclk);
-
-       ret = spi_controller_resume(ctlr);
-       if (ret < 0) {
-               clk_disable_unprepare(rs->spiclk);
-               clk_disable_unprepare(rs->apb_pclk);
-       }
-
-       return 0;
+       return spi_controller_resume(ctlr);
 }
 #endif /* CONFIG_PM_SLEEP */