Skip to content

Commit

Permalink
mtd: OneNAND: OMAP2/3: add support for command line partitioning
Browse files Browse the repository at this point in the history
Add the ability to parse MTD partition information from the
kernel command line.

Note that a pointless BUG_ON is removed, as are redundant
calls to 'del_mtd_partitions()' and 'del_mtd_device()'
because they are also done by 'onenand_release()'.

Finally note that 'add_mtd_device()' returns 1 on failure
so the error condition was incorrect.

Signed-off-by: Adrian Hunter <adrian.hunter@nokia.com>
Signed-off-by: Artem Bityutskiy <Artem.Bityutskiy@nokia.com>
Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
  • Loading branch information
Adrian Hunter authored and David Woodhouse committed Jan 6, 2011
1 parent b7b1a29 commit 263a8c8
Showing 1 changed file with 12 additions and 15 deletions.
27 changes: 12 additions & 15 deletions drivers/mtd/onenand/omap2.c
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,10 @@ struct omap2_onenand {
int (*setup)(void __iomem *base, int freq);
};

#ifdef CONFIG_MTD_PARTITIONS
static const char *part_probes[] = { "cmdlinepart", NULL, };
#endif

static void omap2_onenand_dma_cb(int lch, u16 ch_status, void *data)
{
struct omap2_onenand *c = data;
Expand Down Expand Up @@ -730,13 +734,15 @@ static int __devinit omap2_onenand_probe(struct platform_device *pdev)
}

#ifdef CONFIG_MTD_PARTITIONS
if (pdata->parts != NULL)
r = add_mtd_partitions(&c->mtd, pdata->parts,
pdata->nr_parts);
r = parse_mtd_partitions(&c->mtd, part_probes, &c->parts, 0);
if (r > 0)
r = add_mtd_partitions(&c->mtd, c->parts, r);
else if (pdata->parts != NULL)
r = add_mtd_partitions(&c->mtd, pdata->parts, pdata->nr_parts);
else
#endif
r = add_mtd_device(&c->mtd);
if (r < 0)
if (r)
goto err_release_onenand;

platform_set_drvdata(pdev, c);
Expand All @@ -760,6 +766,7 @@ static int __devinit omap2_onenand_probe(struct platform_device *pdev)
err_free_cs:
gpmc_cs_free(c->gpmc_cs);
err_kfree:
kfree(c->parts);
kfree(c);

return r;
Expand All @@ -769,17 +776,6 @@ static int __devexit omap2_onenand_remove(struct platform_device *pdev)
{
struct omap2_onenand *c = dev_get_drvdata(&pdev->dev);

BUG_ON(c == NULL);

#ifdef CONFIG_MTD_PARTITIONS
if (c->parts)
del_mtd_partitions(&c->mtd);
else
del_mtd_device(&c->mtd);
#else
del_mtd_device(&c->mtd);
#endif

onenand_release(&c->mtd);
if (c->dma_channel != -1)
omap_free_dma(c->dma_channel);
Expand All @@ -792,6 +788,7 @@ static int __devexit omap2_onenand_remove(struct platform_device *pdev)
iounmap(c->onenand.base);
release_mem_region(c->phys_base, ONENAND_IO_SIZE);
gpmc_cs_free(c->gpmc_cs);
kfree(c->parts);
kfree(c);

return 0;
Expand Down

0 comments on commit 263a8c8

Please sign in to comment.