@@ -568,12 +568,51 @@ static int stm_nand_bch_remove(struct platform_device *pdev)
return 0;
}
+#ifdef CONFIG_PM
+static int stm_nand_bch_suspend(struct device *dev)
+{
+ struct nandi_controller *nandi = dev_get_drvdata(dev);
+
+ nandi_clk_disable(nandi);
+
+ return 0;
+}
+static int stm_nand_bch_resume(struct device *dev)
+{
+ struct nandi_controller *nandi = dev_get_drvdata(dev);
+
+ nandi_clk_enable(nandi);
+
+ return 0;
+}
+
+static int stm_nand_bch_restore(struct device *dev)
+{
+ struct nandi_controller *nandi = dev_get_drvdata(dev);
+ struct stm_plat_nand_bch_data *pdata = dev->platform_data;
+ struct stm_nand_bank_data *bank = pdata->bank;
+
+ nandi_init_controller(nandi, bank->csn);
+
+ return 0;
+}
+
+static const struct dev_pm_ops stm_nand_bch_pm_ops = {
+ .suspend = stm_nand_bch_suspend,
+ .resume = stm_nand_bch_resume,
+ .restore = stm_nand_bch_restore,
+};
+#else
+static const struct dev_pm_ops stm_nand_bch_pm_ops;
+#endif
+
static struct platform_driver stm_nand_bch_driver = {
.probe = stm_nand_bch_probe ,
.remove = stm_nand_bch_remove,
.driver = {
.name = "stm-nand-bch",
.owner = THIS_MODULE,
+ .pm = &stm_nand_bch_pm_ops,
},
};
module_platform_driver(stm_nand_bch_driver);
Populate the standard PM call-backs for; suspend, resume and restore. Signed-off-by: Lee Jones <lee.jones@linaro.org> --- drivers/mtd/nand/stm_nand_bch.c | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+)