diff options
author | Lukasz Majewski <lukma@denx.de> | 2018-12-03 10:24:51 +0100 |
---|---|---|
committer | Stefano Babic <sbabic@denx.de> | 2019-01-01 14:12:18 +0100 |
commit | acdf10e17937f4b23fb2613e148caf25aac62c37 (patch) | |
tree | 6b44c824f33747f741b6b115ef9dce3ab29b78c5 /drivers/mtd/nand/raw | |
parent | 8a12d127d7a9298e051b6b26d4cc1e7c3af1d83a (diff) |
nand: vybrid: Extend the vf610 NFC NAND driver to support device tree (and DM)
This commit adds support for device tree and enumeration via device model
for the Vybrid's NFC NAND driver.
Signed-off-by: Lukasz Majewski <lukma@denx.de>
Diffstat (limited to 'drivers/mtd/nand/raw')
-rw-r--r-- | drivers/mtd/nand/raw/vf610_nfc.c | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/drivers/mtd/nand/raw/vf610_nfc.c b/drivers/mtd/nand/raw/vf610_nfc.c index 9baf5fa37a..3326c2b096 100644 --- a/drivers/mtd/nand/raw/vf610_nfc.c +++ b/drivers/mtd/nand/raw/vf610_nfc.c @@ -31,6 +31,11 @@ #include <nand.h> #include <errno.h> #include <asm/io.h> +#if CONFIG_NAND_VF610_NFC_DT +#include <dm.h> +#include <linux/io.h> +#include <linux/ioport.h> +#endif /* Register Offsets */ #define NFC_FLASH_CMD1 0x3F00 @@ -760,9 +765,51 @@ error: return err; } +#if CONFIG_NAND_VF610_NFC_DT +static const struct udevice_id vf610_nfc_dt_ids[] = { + { + .compatible = "fsl,vf610-nfc", + }, + { /* sentinel */ } +}; + +static int vf610_nfc_dt_probe(struct udevice *dev) +{ + struct resource res; + int ret; + + ret = dev_read_resource(dev, 0, &res); + if (ret) + return ret; + + return vf610_nfc_nand_init(0, devm_ioremap(dev, res.start, + resource_size(&res))); +} + +U_BOOT_DRIVER(vf610_nfc_dt) = { + .name = "vf610-nfc-dt", + .id = UCLASS_MTD, + .of_match = vf610_nfc_dt_ids, + .probe = vf610_nfc_dt_probe, +}; + +void board_nand_init(void) +{ + struct udevice *dev; + int ret; + + ret = uclass_get_device_by_driver(UCLASS_MTD, + DM_GET_DRIVER(vf610_nfc_dt), + &dev); + if (ret && ret != -ENODEV) + pr_err("Failed to initialize NAND controller. (error %d)\n", + ret); +} +#else void board_nand_init(void) { int err = vf610_nfc_nand_init(0, (void __iomem *)CONFIG_SYS_NAND_BASE); if (err) printf("VF610 NAND init failed (err %d)\n", err); } +#endif /* CONFIG_NAND_VF610_NFC_DT */ |