summaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorSascha Hauer <s.hauer@pengutronix.de>2011-08-17 09:26:39 +0200
committerSascha Hauer <s.hauer@pengutronix.de>2011-09-21 09:59:36 +0200
commit0972e837c3631c4fbbf16080c76ebad0c94086d7 (patch)
treec8708a2f8315d49ddca9a93fe56ca13856ec6e09 /drivers
parent8c1f388d88c78b260e881c93ad21b4fe894300c6 (diff)
downloadbarebox-0972e837c3631c4fbbf16080c76ebad0c94086d7.tar.gz
barebox-0972e837c3631c4fbbf16080c76ebad0c94086d7.tar.xz
i.MX NAND: pass second base address as resource
The nand controller on i.MX51/53 uses two base addresses. Instead of hardcode the second address use the new shiny resources two specify it. Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/mtd/nand/nand_imx.c21
1 files changed, 15 insertions, 6 deletions
diff --git a/drivers/mtd/nand/nand_imx.c b/drivers/mtd/nand/nand_imx.c
index e471c8a719..f270326aaa 100644
--- a/drivers/mtd/nand/nand_imx.c
+++ b/drivers/mtd/nand/nand_imx.c
@@ -1034,9 +1034,6 @@ static int __init imxnd_probe(struct device_d *dev)
return -ENOMEM;
host->data_buf = (uint8_t *)(host + 1);
- host->base = dev_request_mem_region(dev, 0);
-
- host->main_area0 = host->base;
if (nfc_is_v1() || nfc_is_v21()) {
host->preset = preset_v1_v2;
@@ -1049,21 +1046,32 @@ static int __init imxnd_probe(struct device_d *dev)
}
if (nfc_is_v21()) {
+ host->base = dev_request_mem_region(dev, 0);
+ host->main_area0 = host->base;
host->regs = host->base + 0x1e00;
host->spare0 = host->base + 0x1000;
host->spare_len = 64;
oob_smallpage = &nandv2_hw_eccoob_smallpage;
oob_largepage = &nandv2_hw_eccoob_largepage;
} else if (nfc_is_v1()) {
+ host->base = dev_request_mem_region(dev, 0);
+ host->main_area0 = host->base;
host->regs = host->base + 0xe00;
host->spare0 = host->base + 0x800;
host->spare_len = 16;
oob_smallpage = &nandv1_hw_eccoob_smallpage;
oob_largepage = &nandv1_hw_eccoob_largepage;
} else if (nfc_is_v3_2()) {
-#ifdef CONFIG_ARCH_IMX51
- host->regs_ip = (void *)MX51_NFC_BASE_ADDR;
-#endif
+ host->regs_ip = dev_request_mem_region(dev, 0);
+ host->base = dev_request_mem_region(dev, 1);
+ host->main_area0 = host->base;
+
+ if (!host->regs_ip) {
+ dev_err(dev, "no second mem region\n");
+ err = -ENODEV;
+ goto escan;
+ }
+
host->regs_axi = host->base + 0x1e00;
host->spare0 = host->base + 0x1000;
host->spare_len = 64;
@@ -1083,6 +1091,7 @@ static int __init imxnd_probe(struct device_d *dev)
this = &host->nand;
mtd = &host->mtd;
mtd->priv = this;
+ mtd->dev = dev;
/* 50 us command delay time */
this->chip_delay = 5;