Commit a57e230c authored by Ladislav Michl's avatar Ladislav Michl Committed by Tony Lindgren

[PATCH] Make omap-nand-flash driver work after MTD update

Make omap-nand-flash driver work after MTD update
Signed-off-by: default avatarLadislav Michl <ladis@linux-mips.org>
parent 878716ca
...@@ -11,6 +11,7 @@ ...@@ -11,6 +11,7 @@
#include <linux/init.h> #include <linux/init.h>
#include <linux/ioport.h> #include <linux/ioport.h>
#include <linux/delay.h>
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/module.h> #include <linux/module.h>
#include <linux/platform_device.h> #include <linux/platform_device.h>
...@@ -44,21 +45,25 @@ struct omap_nand_info { ...@@ -44,21 +45,25 @@ struct omap_nand_info {
/* /*
* hardware specific access to control-lines * hardware specific access to control-lines
* NOTE: boards may use different bits for these!! * NOTE: boards may use different bits for these!!
*
* ctrl:
* NAND_NCE: bit 0 - don't care
* NAND_CLE: bit 1 -> bit 1 (0x0002)
* NAND_ALE: bit 2 -> bit 2 (0x0004)
*/ */
#define MASK_CLE 0x02
#define MASK_ALE 0x04 static void omap_nand_hwcontrol(struct mtd_info *mtd, int cmd, unsigned int ctrl)
static void omap_nand_hwcontrol(struct mtd_info *mtd, int cmd)
{ {
struct nand_chip *this = mtd->priv; struct nand_chip *chip = mtd->priv;
unsigned long IO_ADDR_W = (unsigned long) this->IO_ADDR_W; unsigned long mask;
switch (cmd) { if (cmd == NAND_CMD_NONE)
case NAND_CTL_SETCLE: IO_ADDR_W |= MASK_CLE; break; return;
case NAND_CTL_CLRCLE: IO_ADDR_W &= ~MASK_CLE; break;
case NAND_CTL_SETALE: IO_ADDR_W |= MASK_ALE; break; mask = (ctrl & NAND_CLE) ? 0x02 : 0;
case NAND_CTL_CLRALE: IO_ADDR_W &= ~MASK_ALE; break; if (ctrl & NAND_ALE)
} mask |= 0x04;
this->IO_ADDR_W = (void __iomem *) IO_ADDR_W; writeb(cmd, (unsigned long)chip->IO_ADDR_W | mask);
} }
static int omap_nand_dev_ready(struct mtd_info *mtd) static int omap_nand_dev_ready(struct mtd_info *mtd)
...@@ -76,12 +81,10 @@ static int __devinit omap_nand_probe(struct platform_device *pdev) ...@@ -76,12 +81,10 @@ static int __devinit omap_nand_probe(struct platform_device *pdev)
unsigned long size = res->end - res->start + 1; unsigned long size = res->end - res->start + 1;
int err; int err;
info = kmalloc(sizeof(struct omap_nand_info), GFP_KERNEL); info = kzalloc(sizeof(struct omap_nand_info), GFP_KERNEL);
if (!info) if (!info)
return -ENOMEM; return -ENOMEM;
memset(info, 0, sizeof(struct omap_nand_info));
if (!request_mem_region(res->start, size, pdev->dev.driver->name)) { if (!request_mem_region(res->start, size, pdev->dev.driver->name)) {
err = -EBUSY; err = -EBUSY;
goto out_free_info; goto out_free_info;
...@@ -93,8 +96,8 @@ static int __devinit omap_nand_probe(struct platform_device *pdev) ...@@ -93,8 +96,8 @@ static int __devinit omap_nand_probe(struct platform_device *pdev)
goto out_release_mem_region; goto out_release_mem_region;
} }
info->nand.IO_ADDR_W = info->nand.IO_ADDR_R; info->nand.IO_ADDR_W = info->nand.IO_ADDR_R;
info->nand.hwcontrol = omap_nand_hwcontrol; info->nand.cmd_ctrl = omap_nand_hwcontrol;
info->nand.eccmode = NAND_ECC_SOFT; info->nand.ecc.mode = NAND_ECC_SOFT;
info->nand.options = pdata->options; info->nand.options = pdata->options;
if (pdata->dev_ready) if (pdata->dev_ready)
info->nand.dev_ready = omap_nand_dev_ready; info->nand.dev_ready = omap_nand_dev_ready;
......
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