mtd: nand: update the documentation to reflect framework changes

The MTD device is now directly embedded in the nand_chip struct. Update the
mtdnand documentation to mention this aspect and fix the different
examples.

Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
Signed-off-by: Brian Norris <computersforpeace@gmail.com>
This commit is contained in:
Boris BREZILLON 2015-12-10 09:00:30 +01:00 committed by Brian Norris
parent 960823a226
commit 3eb064e4b0
1 changed files with 15 additions and 16 deletions

View File

@ -162,12 +162,15 @@
<sect1 id="Basic_defines"> <sect1 id="Basic_defines">
<title>Basic defines</title> <title>Basic defines</title>
<para> <para>
At least you have to provide a mtd structure and At least you have to provide a nand_chip structure
a storage for the ioremap'ed chip address. and a storage for the ioremap'ed chip address.
You can allocate the mtd structure using kmalloc You can allocate the nand_chip structure using
or you can allocate it statically. kmalloc or you can allocate it statically.
In case of static allocation you have to allocate The NAND chip structure embeds an mtd structure
a nand_chip structure too. which will be registered to the MTD subsystem.
You can extract a pointer to the mtd structure
from a nand_chip pointer using the nand_to_mtd()
helper.
</para> </para>
<para> <para>
Kmalloc based example Kmalloc based example
@ -180,7 +183,6 @@ static void __iomem *baseaddr;
Static example Static example
</para> </para>
<programlisting> <programlisting>
static struct mtd_info board_mtd;
static struct nand_chip board_chip; static struct nand_chip board_chip;
static void __iomem *baseaddr; static void __iomem *baseaddr;
</programlisting> </programlisting>
@ -274,13 +276,15 @@ static int __init board_init (void)
int err = 0; int err = 0;
/* Allocate memory for MTD device structure and private data */ /* Allocate memory for MTD device structure and private data */
board_mtd = kzalloc(sizeof(struct mtd_info) + sizeof(struct nand_chip), GFP_KERNEL); this = kzalloc(sizeof(struct nand_chip), GFP_KERNEL);
if (!board_mtd) { if (!this) {
printk ("Unable to allocate NAND MTD device structure.\n"); printk ("Unable to allocate NAND MTD device structure.\n");
err = -ENOMEM; err = -ENOMEM;
goto out; goto out;
} }
board_mtd = nand_to_mtd(this);
/* map physical address */ /* map physical address */
baseaddr = ioremap(CHIP_PHYSICAL_ADDRESS, 1024); baseaddr = ioremap(CHIP_PHYSICAL_ADDRESS, 1024);
if (!baseaddr) { if (!baseaddr) {
@ -289,11 +293,6 @@ static int __init board_init (void)
goto out_mtd; goto out_mtd;
} }
/* Get pointer to private data */
this = (struct nand_chip *) ();
/* Link the private data with the MTD structure */
board_mtd->priv = this;
/* Set address of NAND IO lines */ /* Set address of NAND IO lines */
this->IO_ADDR_R = baseaddr; this->IO_ADDR_R = baseaddr;
this->IO_ADDR_W = baseaddr; this->IO_ADDR_W = baseaddr;
@ -317,7 +316,7 @@ static int __init board_init (void)
out_ior: out_ior:
iounmap(baseaddr); iounmap(baseaddr);
out_mtd: out_mtd:
kfree (board_mtd); kfree (this);
out: out:
return err; return err;
} }
@ -343,7 +342,7 @@ static void __exit board_cleanup (void)
iounmap(baseaddr); iounmap(baseaddr);
/* Free the MTD device structure */ /* Free the MTD device structure */
kfree (board_mtd); kfree (mtd_to_nand(board_mtd));
} }
module_exit(board_cleanup); module_exit(board_cleanup);
#endif #endif