From patchwork Mon Jan 19 11:27:11 2009 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: MTD: NAND: pxa3xx_nand: allow building as module From: Mike Rapoport X-Patchwork-Id: 19275 Message-Id: <1232364431-7941-1-git-send-email-mike@compulab.co.il> To: eric.miao@marvell.com Cc: linux-mtd@lists.infradead.org, linux-arm-kernel@lists.arm.linux.org.uk, Mike Rapoport Date: Mon, 19 Jan 2009 13:27:11 +0200 Signed-off-by: Mike Rapoport --- drivers/mtd/nand/Kconfig | 2 +- drivers/mtd/nand/pxa3xx_nand.c | 10 ++++++++++ 2 files changed, 11 insertions(+), 1 deletions(-) diff --git a/drivers/mtd/nand/Kconfig b/drivers/mtd/nand/Kconfig index 8b12e6e..d3966d0 100644 --- a/drivers/mtd/nand/Kconfig +++ b/drivers/mtd/nand/Kconfig @@ -334,7 +334,7 @@ config MTD_NAND_ATMEL_ECC_NONE endchoice config MTD_NAND_PXA3xx - bool "Support for NAND flash devices on PXA3xx" + tristate "Support for NAND flash devices on PXA3xx" depends on MTD_NAND && PXA3xx help This enables the driver for the NAND flash device found on diff --git a/drivers/mtd/nand/pxa3xx_nand.c b/drivers/mtd/nand/pxa3xx_nand.c index cc55cbc..628ba08 100644 --- a/drivers/mtd/nand/pxa3xx_nand.c +++ b/drivers/mtd/nand/pxa3xx_nand.c @@ -123,6 +123,7 @@ struct pxa3xx_nand_info { struct clk *clk; void __iomem *mmio_base; + struct resource *res; unsigned int buf_start; unsigned int buf_count; @@ -1079,6 +1080,7 @@ static int pxa3xx_nand_probe(struct platform_device *pdev) this = &info->nand_chip; mtd->priv = info; + mtd->owner = THIS_MODULE; info->clk = clk_get(&pdev->dev, NULL); if (IS_ERR(info->clk)) { @@ -1125,6 +1127,7 @@ static int pxa3xx_nand_probe(struct platform_device *pdev) goto fail_put_clk; } + info->res = r; info->mmio_base = ioremap(r->start, r->end - r->start + 1); if (info->mmio_base == NULL) { dev_err(&pdev->dev, "ioremap() failed\n"); @@ -1199,6 +1202,13 @@ static int pxa3xx_nand_remove(struct platform_device *pdev) info->data_buff, info->data_buff_phys); } else kfree(info->data_buff); + + iounmap(info->mmio_base); + release_mem_region(info->res->start, info->res->end - info->res->start + 1); + + clk_disable(info->clk); + clk_put(info->clk); + kfree(mtd); return 0; }