Commit 3eb064e4 authored by Boris BREZILLON's avatar Boris BREZILLON Committed by Brian Norris

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: default avatarBoris Brezillon <boris.brezillon@free-electrons.com>
Signed-off-by: default avatarBrian Norris <computersforpeace@gmail.com>
parent 960823a2
...@@ -162,12 +162,15 @@ ...@@ -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; ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment