mirror of
https://source.denx.de/u-boot/u-boot.git
synced 2025-11-29 06:31:28 +01:00
nand: davinci: add support for driver model
Extend the davinci NAND driver to support the driver model. For now this doesn't add any device-tree parsing due to the fact that we can't access the actual nand node on the device-tree - it's a subnode of the aemif device and we don't have an aemif driver on davinci at the moment. Signed-off-by: Bartosz Golaszewski <bgolaszewski@baylibre.com>
This commit is contained in:
parent
7bf9972643
commit
29d8eb3345
@ -31,6 +31,7 @@
|
|||||||
#include <common.h>
|
#include <common.h>
|
||||||
#include <asm/io.h>
|
#include <asm/io.h>
|
||||||
#include <nand.h>
|
#include <nand.h>
|
||||||
|
#include <dm/uclass.h>
|
||||||
#include <asm/ti-common/davinci_nand.h>
|
#include <asm/ti-common/davinci_nand.h>
|
||||||
|
|
||||||
/* Definitions for 4-bit hardware ECC */
|
/* Definitions for 4-bit hardware ECC */
|
||||||
@ -785,10 +786,53 @@ static void davinci_nand_init(struct nand_chip *nand)
|
|||||||
nand->dev_ready = nand_davinci_dev_ready;
|
nand->dev_ready = nand_davinci_dev_ready;
|
||||||
}
|
}
|
||||||
|
|
||||||
int board_nand_init(struct nand_chip *chip) __attribute__((weak));
|
#ifdef CONFIG_SYS_NAND_SELF_INIT
|
||||||
|
static int davinci_nand_probe(struct udevice *dev)
|
||||||
|
{
|
||||||
|
struct nand_chip *nand = dev_get_priv(dev);
|
||||||
|
struct mtd_info *mtd = nand_to_mtd(nand);
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
nand->IO_ADDR_R = (void __iomem *)CONFIG_SYS_NAND_BASE;
|
||||||
|
nand->IO_ADDR_W = (void __iomem *)CONFIG_SYS_NAND_BASE;
|
||||||
|
|
||||||
|
davinci_nand_init(nand);
|
||||||
|
|
||||||
|
ret = nand_scan(mtd, CONFIG_SYS_NAND_MAX_CHIPS);
|
||||||
|
if (ret)
|
||||||
|
return ret;
|
||||||
|
|
||||||
|
return nand_register(0, mtd);
|
||||||
|
}
|
||||||
|
|
||||||
|
static const struct udevice_id davinci_nand_ids[] = {
|
||||||
|
{ .compatible = "ti,davinci-nand" },
|
||||||
|
{ }
|
||||||
|
};
|
||||||
|
|
||||||
|
U_BOOT_DRIVER(davinci_nand) = {
|
||||||
|
.name = "davinci-nand",
|
||||||
|
.id = UCLASS_MTD,
|
||||||
|
.of_match = davinci_nand_ids,
|
||||||
|
.probe = davinci_nand_probe,
|
||||||
|
.priv_auto_alloc_size = sizeof(struct nand_chip),
|
||||||
|
};
|
||||||
|
|
||||||
|
void board_nand_init(void)
|
||||||
|
{
|
||||||
|
struct udevice *dev;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
ret = uclass_get_device_by_driver(UCLASS_MTD,
|
||||||
|
DM_GET_DRIVER(davinci_nand), &dev);
|
||||||
|
if (ret && ret != -ENODEV)
|
||||||
|
pr_err("Failed to initialize %s: %d\n", dev->name, ret);
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
int board_nand_init(struct nand_chip *chip) __attribute__((weak));
|
||||||
int board_nand_init(struct nand_chip *chip)
|
int board_nand_init(struct nand_chip *chip)
|
||||||
{
|
{
|
||||||
davinci_nand_init(chip);
|
davinci_nand_init(chip);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
#endif /* CONFIG_SYS_NAND_SELF_INIT */
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user