diff options
author | Todd Poynor <tpoynor@mvista.com> | 2005-08-02 20:36:09 (GMT) |
---|---|---|
committer | Thomas Gleixner <tglx@mtd.linutronix.de> | 2005-08-04 10:52:09 (GMT) |
commit | 1da2c9a638f8af7be3daf1fa8dbd087b3284d16e (patch) | |
tree | 6a19cb3ae7b28fa0f71c1020bb4c076a53595df8 | |
parent | 65a8de36b48f1c1cd02940c4480bc8e290540d18 (diff) | |
download | linux-1da2c9a638f8af7be3daf1fa8dbd087b3284d16e.tar.xz |
[MTD] Pre-CFI Sharp chip driver: Some speedups and cleanups
Remove useless udelay(100) after status value already read. Poll
for status OK with reduced udelay if not immediate OK status return.
Fix read and compare of 32-bit status value using 16-bit variable.
Include slab.h since kmalloc/kfree are called.
Signed-off-by: Todd Poynor <tpoynor@mvista.com>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
-rw-r--r-- | drivers/mtd/chips/sharp.c | 17 |
1 files changed, 8 insertions, 9 deletions
diff --git a/drivers/mtd/chips/sharp.c b/drivers/mtd/chips/sharp.c index c3cf0f6..08376db 100644 --- a/drivers/mtd/chips/sharp.c +++ b/drivers/mtd/chips/sharp.c @@ -4,7 +4,7 @@ * Copyright 2000,2001 David A. Schleef <ds@schleef.org> * 2000,2001 Lineo, Inc. * - * $Id: sharp.c,v 1.14 2004/08/09 13:19:43 dwmw2 Exp $ + * $Id: sharp.c,v 1.15 2005/08/02 20:36:05 tpoynor Exp $ * * Devices supported: * LH28F016SCT Symmetrical block flash memory, 2Mx8 @@ -31,6 +31,7 @@ #include <linux/mtd/cfi.h> #include <linux/delay.h> #include <linux/init.h> +#include <linux/slab.h> #define CMD_RESET 0xffffffff #define CMD_READ_ID 0x90909090 @@ -214,7 +215,7 @@ static int sharp_probe_map(struct map_info *map,struct mtd_info *mtd) /* This function returns with the chip->mutex lock held. */ static int sharp_wait(struct map_info *map, struct flchip *chip) { - __u16 status; + int status, i; unsigned long timeo = jiffies + HZ; DECLARE_WAITQUEUE(wait, current); int adr = 0; @@ -227,13 +228,11 @@ retry: map_write32(map,CMD_READ_STATUS,adr); chip->state = FL_STATUS; case FL_STATUS: - status = map_read32(map,adr); -//printk("status=%08x\n",status); - - udelay(100); - if((status & SR_READY)!=SR_READY){ -//printk(".status=%08x\n",status); - udelay(100); + for(i=0;i<100;i++){ + status = map_read32(map,adr); + if((status & SR_READY)==SR_READY) + break; + udelay(1); } break; default: |