1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- From de994d9c849ca0ca020fccfa1916afcde7f313f2 Mon Sep 17 00:00:00 2001
- From: Boris BREZILLON <boris.brezillon@free-electrons.com>
- Date: Sun, 24 Aug 2014 10:40:44 +0200
- Subject: [PATCH] mtd: nand: sunxi: Fallback to chip config when partition
- config is not available
- Fallback to chip config for partitions where ecc/rnd config are not
- specified in the device tree.
- Signed-off-by: Boris BREZILLON <boris.brezillon@free-electrons.com>
- Signed-off-by: Hans de Goede <hdegoede@redhat.com>
- ---
- drivers/mtd/nand/sunxi_nand.c | 27 ++++++++++++++++++---------
- 1 file changed, 18 insertions(+), 9 deletions(-)
- --- a/drivers/mtd/nand/sunxi_nand.c
- +++ b/drivers/mtd/nand/sunxi_nand.c
- @@ -1709,28 +1709,37 @@ static void sunxi_nand_part_release(stru
- struct nand_part *sunxi_ofnandpart_parse(void *priv, struct mtd_info *master,
- struct device_node *pp)
- {
- + struct nand_chip *chip = master->priv;
- struct sunxi_nand_part *part;
- int ret;
-
- part = kzalloc(sizeof(*part), GFP_KERNEL);
- part->part.release = sunxi_nand_part_release;
-
- - ret = sunxi_nand_ecc_init(master, &part->ecc, pp);
- - if (ret)
- - goto err;
- -
- - ret = sunxi_nand_rnd_init(master, &part->rnd, &part->ecc, pp);
- - if (ret) {
- - sunxi_nand_ecc_cleanup(&part->ecc);
- - goto err;
- + if (of_find_property(pp, "nand-ecc-mode", NULL)) {
- + ret = sunxi_nand_ecc_init(master, &part->ecc, pp);
- + if (ret)
- + goto err;
- +
- + part->part.ecc = &part->ecc;
- }
-
- - part->part.ecc = &part->ecc;
- - part->part.rnd = &part->rnd;
- + if (of_find_property(pp, "nand-rnd-mode", NULL)) {
- + ret = sunxi_nand_rnd_init(master, &part->rnd,
- + part->part.ecc ? part->part.ecc : &chip->ecc,
- + pp);
- + if (ret)
- + goto err;
- +
- + part->part.rnd = &part->rnd;
- + }
-
- return &part->part;
-
- err:
- + if (part->part.ecc)
- + sunxi_nand_ecc_cleanup(part->part.ecc);
- +
- kfree(part);
- return ERR_PTR(ret);
- }
|