+
+ data->io_base = ioremap(pdev->resource[0].start, pdev->resource[0].end - pdev->resource[0].start + 1);
+
+ if (data->io_base == NULL) {
+ dev_err(&pdev->dev, "ioremap failed\n");
+ kfree(data);
+ return -EIO;
+ }
+
+ /* FIXME : this seems to work only for newer RB500, check the version to set the right flags accordingly */
+ data->flags1 = LO_FOFF | LO_CEX;
+ data->flags2 = LO_ULED | LO_ALE | LO_CLE | LO_WPX;
+
+ changeLatchU5(data->flags1, data->flags2);
+
+ data->chip.cmd_ctrl = rbmips_hwcontrol500;
+
+ data->chip.dev_ready = rb500_dev_ready;
+ data->chip.IO_ADDR_W = (unsigned char *)KSEG1ADDR(MEM32(IDT434_REG_BASE + DEV2BASE));
+ data->chip.IO_ADDR_R = data->chip.IO_ADDR_W;
+
+ data->chip.ecc.mode = NAND_ECC_SOFT;
+ data->chip.chip_delay = 25;
+ data->chip.options |= NAND_NO_AUTOINCR;
+
+ data->chip.priv = &data;
+ data->mtd.priv = &data->chip;
+ data->mtd.owner = THIS_MODULE;