|
|
@@ -861,7 +861,33 @@ static int at91_twi_runtime_resume(struct device *dev)
|
|
|
return clk_prepare_enable(twi_dev->clk);
|
|
|
}
|
|
|
|
|
|
+static int at91_twi_suspend_noirq(struct device *dev)
|
|
|
+{
|
|
|
+ if (!pm_runtime_status_suspended(dev))
|
|
|
+ at91_twi_runtime_suspend(dev);
|
|
|
+
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
+static int at91_twi_resume_noirq(struct device *dev)
|
|
|
+{
|
|
|
+ int ret;
|
|
|
+
|
|
|
+ if (!pm_runtime_status_suspended(dev)) {
|
|
|
+ ret = at91_twi_runtime_resume(dev);
|
|
|
+ if (ret)
|
|
|
+ return ret;
|
|
|
+ }
|
|
|
+
|
|
|
+ pm_runtime_mark_last_busy(dev);
|
|
|
+ pm_request_autosuspend(dev);
|
|
|
+
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
static const struct dev_pm_ops at91_twi_pm = {
|
|
|
+ .suspend_noirq = at91_twi_suspend_noirq,
|
|
|
+ .resume_noirq = at91_twi_resume_noirq,
|
|
|
.runtime_suspend = at91_twi_runtime_suspend,
|
|
|
.runtime_resume = at91_twi_runtime_resume,
|
|
|
};
|