Hi Ramuthevar,
+static int ebu_nand_probe(struct platform_device *pdev)
+{
+ struct device *dev = &pdev->dev;
+ struct ebu_nand_controller *ebu_host;
+ struct nand_chip *nand;
+ phys_addr_t nandaddr_pa;
+ struct mtd_info *mtd;
+ struct resource *res;
+ int ret;
+ u32 cs;
+
+ ebu_host = devm_kzalloc(dev, sizeof(*ebu_host), GFP_KERNEL);
+ if (!ebu_host)
+ return -ENOMEM;
+
+ ebu_host->dev = dev;
+ nand_controller_init(&ebu_host->controller);
+
+ res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "ebunand");
+ ebu_host->ebu_addr = devm_ioremap_resource(&pdev->dev, res);
+ if (IS_ERR(ebu_host->ebu_addr))
+ return PTR_ERR(ebu_host->ebu_addr);
+
+ res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "hsnand");
+ ebu_host->nand_addr = devm_ioremap_resource(&pdev->dev, res);
+ if (IS_ERR(ebu_host->nand_addr))
+ return PTR_ERR(ebu_host->nand_addr);
+
+ ret = device_property_read_u32(dev, "nand,cs", &cs);
CS ids should be encoded in the reg property (see [1]).
Is it your choice to only support a single CS or is it actually a
controller limitation?
to anticipate the addition of the support for another CS. And in
this case there are many places in this driver that should be
more generic.
+ if (ret) {
+ dev_err(dev, "failed to get chip select: %d\n", ret);
+ return ret;
+ }
+
+ ebu_host->cs = cs;
+ res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "nand_cs0");
Thanks,
MiquÃl