[PATCH 2/2] mtd: nand: sunxi: add reset line support
Icenowy Zheng
icenowy at aosc.xyz
Sun Jun 19 04:37:39 PDT 2016
The NAND controller on some sun8i chips needs its reset line to be deasserted
before they can enter working state. This commit added the reset line process
to the driver.
Signed-off-by: Icenowy Zheng <icenowy at aosc.xyz>
---
drivers/mtd/nand/sunxi_nand.c | 14 ++++++++++++++
1 file changed, 14 insertions(+)
diff --git a/drivers/mtd/nand/sunxi_nand.c b/drivers/mtd/nand/sunxi_nand.c
index a83a690..1502748 100644
--- a/drivers/mtd/nand/sunxi_nand.c
+++ b/drivers/mtd/nand/sunxi_nand.c
@@ -39,6 +39,7 @@
#include <linux/gpio.h>
#include <linux/interrupt.h>
#include <linux/iopoll.h>
+#include <linux/reset.h>
#define NFC_REG_CTL 0x0000
#define NFC_REG_ST 0x0004
@@ -269,6 +270,7 @@ struct sunxi_nfc {
void __iomem *regs;
struct clk *ahb_clk;
struct clk *mod_clk;
+ struct reset_control *reset;
unsigned long assigned_cs;
unsigned long clk_rate;
struct list_head chips;
@@ -1871,6 +1873,18 @@ static int sunxi_nfc_probe(struct platform_device *pdev)
if (ret)
goto out_ahb_clk_unprepare;
+ nfc->reset = devm_reset_control_get_optional(dev, "ahb");
+ if (PTR_ERR(nfc->reset) == -EPROBE_DEFER)
+ return PTR_ERR(nfc->reset);
+
+ if (!IS_ERR(nfc->reset)) {
+ ret = reset_control_deassert(nfc->reset);
+ if (ret) {
+ dev_err(dev, "reset err %d\n", ret);
+ goto out_mod_clk_unprepare;
+ }
+ }
+
ret = sunxi_nfc_rst(nfc);
if (ret)
goto out_mod_clk_unprepare;
--
2.8.1
More information about the linux-mtd
mailing list