diff options
Diffstat (limited to 'drivers/mtd')
-rw-r--r-- | drivers/mtd/chips/cfi_cmdset_0001.c | 11 | ||||
-rw-r--r-- | drivers/mtd/chips/cfi_cmdset_0002.c | 12 | ||||
-rw-r--r-- | drivers/mtd/chips/cfi_cmdset_0020.c | 11 | ||||
-rw-r--r-- | drivers/mtd/chips/cfi_util.c | 11 | ||||
-rw-r--r-- | drivers/mtd/chips/sharp.c | 17 | ||||
-rw-r--r-- | drivers/mtd/mtd_blkdevs.c | 22 | ||||
-rw-r--r-- | drivers/mtd/mtdchar.c | 15 |
7 files changed, 59 insertions, 40 deletions
diff --git a/drivers/mtd/chips/cfi_cmdset_0001.c b/drivers/mtd/chips/cfi_cmdset_0001.c index 0cfcd88468e0..1e99dffcc6ae 100644 --- a/drivers/mtd/chips/cfi_cmdset_0001.c +++ b/drivers/mtd/chips/cfi_cmdset_0001.c | |||
@@ -4,7 +4,7 @@ | |||
4 | * | 4 | * |
5 | * (C) 2000 Red Hat. GPL'd | 5 | * (C) 2000 Red Hat. GPL'd |
6 | * | 6 | * |
7 | * $Id: cfi_cmdset_0001.c,v 1.178 2005/05/19 17:05:43 nico Exp $ | 7 | * $Id: cfi_cmdset_0001.c,v 1.180 2005/07/20 21:01:13 tpoynor Exp $ |
8 | * | 8 | * |
9 | * | 9 | * |
10 | * 10/10/2000 Nicolas Pitre <nico@cam.org> | 10 | * 10/10/2000 Nicolas Pitre <nico@cam.org> |
@@ -252,6 +252,15 @@ read_pri_intelext(struct map_info *map, __u16 adr) | |||
252 | if (!extp) | 252 | if (!extp) |
253 | return NULL; | 253 | return NULL; |
254 | 254 | ||
255 | if (extp->MajorVersion != '1' || | ||
256 | (extp->MinorVersion < '0' || extp->MinorVersion > '3')) { | ||
257 | printk(KERN_ERR " Unknown Intel/Sharp Extended Query " | ||
258 | "version %c.%c.\n", extp->MajorVersion, | ||
259 | extp->MinorVersion); | ||
260 | kfree(extp); | ||
261 | return NULL; | ||
262 | } | ||
263 | |||
255 | /* Do some byteswapping if necessary */ | 264 | /* Do some byteswapping if necessary */ |
256 | extp->FeatureSupport = le32_to_cpu(extp->FeatureSupport); | 265 | extp->FeatureSupport = le32_to_cpu(extp->FeatureSupport); |
257 | extp->BlkStatusRegMask = le16_to_cpu(extp->BlkStatusRegMask); | 266 | extp->BlkStatusRegMask = le16_to_cpu(extp->BlkStatusRegMask); |
diff --git a/drivers/mtd/chips/cfi_cmdset_0002.c b/drivers/mtd/chips/cfi_cmdset_0002.c index 8505f118f2db..e3d31c749045 100644 --- a/drivers/mtd/chips/cfi_cmdset_0002.c +++ b/drivers/mtd/chips/cfi_cmdset_0002.c | |||
@@ -17,7 +17,7 @@ | |||
17 | * | 17 | * |
18 | * This code is GPL | 18 | * This code is GPL |
19 | * | 19 | * |
20 | * $Id: cfi_cmdset_0002.c,v 1.118 2005/07/04 22:34:29 gleixner Exp $ | 20 | * $Id: cfi_cmdset_0002.c,v 1.120 2005/07/20 21:01:13 tpoynor Exp $ |
21 | * | 21 | * |
22 | */ | 22 | */ |
23 | 23 | ||
@@ -253,6 +253,16 @@ struct mtd_info *cfi_cmdset_0002(struct map_info *map, int primary) | |||
253 | return NULL; | 253 | return NULL; |
254 | } | 254 | } |
255 | 255 | ||
256 | if (extp->MajorVersion != '1' || | ||
257 | (extp->MinorVersion < '0' || extp->MinorVersion > '4')) { | ||
258 | printk(KERN_ERR " Unknown Amd/Fujitsu Extended Query " | ||
259 | "version %c.%c.\n", extp->MajorVersion, | ||
260 | extp->MinorVersion); | ||
261 | kfree(extp); | ||
262 | kfree(mtd); | ||
263 | return NULL; | ||
264 | } | ||
265 | |||
256 | /* Install our own private info structure */ | 266 | /* Install our own private info structure */ |
257 | cfi->cmdset_priv = extp; | 267 | cfi->cmdset_priv = extp; |
258 | 268 | ||
diff --git a/drivers/mtd/chips/cfi_cmdset_0020.c b/drivers/mtd/chips/cfi_cmdset_0020.c index c894f8801578..d22df2d96788 100644 --- a/drivers/mtd/chips/cfi_cmdset_0020.c +++ b/drivers/mtd/chips/cfi_cmdset_0020.c | |||
@@ -4,7 +4,7 @@ | |||
4 | * | 4 | * |
5 | * (C) 2000 Red Hat. GPL'd | 5 | * (C) 2000 Red Hat. GPL'd |
6 | * | 6 | * |
7 | * $Id: cfi_cmdset_0020.c,v 1.19 2005/07/13 15:52:45 dwmw2 Exp $ | 7 | * $Id: cfi_cmdset_0020.c,v 1.20 2005/07/20 21:01:14 tpoynor Exp $ |
8 | * | 8 | * |
9 | * 10/10/2000 Nicolas Pitre <nico@cam.org> | 9 | * 10/10/2000 Nicolas Pitre <nico@cam.org> |
10 | * - completely revamped method functions so they are aware and | 10 | * - completely revamped method functions so they are aware and |
@@ -133,6 +133,15 @@ struct mtd_info *cfi_cmdset_0020(struct map_info *map, int primary) | |||
133 | if (!extp) | 133 | if (!extp) |
134 | return NULL; | 134 | return NULL; |
135 | 135 | ||
136 | if (extp->MajorVersion != '1' || | ||
137 | (extp->MinorVersion < '0' || extp->MinorVersion > '3')) { | ||
138 | printk(KERN_ERR " Unknown ST Microelectronics" | ||
139 | " Extended Query version %c.%c.\n", | ||
140 | extp->MajorVersion, extp->MinorVersion); | ||
141 | kfree(extp); | ||
142 | return NULL; | ||
143 | } | ||
144 | |||
136 | /* Do some byteswapping if necessary */ | 145 | /* Do some byteswapping if necessary */ |
137 | extp->FeatureSupport = cfi32_to_cpu(extp->FeatureSupport); | 146 | extp->FeatureSupport = cfi32_to_cpu(extp->FeatureSupport); |
138 | extp->BlkStatusRegMask = cfi32_to_cpu(extp->BlkStatusRegMask); | 147 | extp->BlkStatusRegMask = cfi32_to_cpu(extp->BlkStatusRegMask); |
diff --git a/drivers/mtd/chips/cfi_util.c b/drivers/mtd/chips/cfi_util.c index 2b2ede2bfcca..0cf183f01e49 100644 --- a/drivers/mtd/chips/cfi_util.c +++ b/drivers/mtd/chips/cfi_util.c | |||
@@ -7,7 +7,7 @@ | |||
7 | * | 7 | * |
8 | * This code is covered by the GPL. | 8 | * This code is covered by the GPL. |
9 | * | 9 | * |
10 | * $Id: cfi_util.c,v 1.8 2004/12/14 19:55:56 nico Exp $ | 10 | * $Id: cfi_util.c,v 1.9 2005/07/20 21:01:14 tpoynor Exp $ |
11 | * | 11 | * |
12 | */ | 12 | */ |
13 | 13 | ||
@@ -70,15 +70,6 @@ __xipram cfi_read_pri(struct map_info *map, __u16 adr, __u16 size, const char* n | |||
70 | local_irq_enable(); | 70 | local_irq_enable(); |
71 | #endif | 71 | #endif |
72 | 72 | ||
73 | if (extp->MajorVersion != '1' || | ||
74 | (extp->MinorVersion < '0' || extp->MinorVersion > '3')) { | ||
75 | printk(KERN_WARNING " Unknown %s Extended Query " | ||
76 | "version %c.%c.\n", name, extp->MajorVersion, | ||
77 | extp->MinorVersion); | ||
78 | kfree(extp); | ||
79 | extp = NULL; | ||
80 | } | ||
81 | |||
82 | out: return extp; | 73 | out: return extp; |
83 | } | 74 | } |
84 | 75 | ||
diff --git a/drivers/mtd/chips/sharp.c b/drivers/mtd/chips/sharp.c index c3cf0f63bc93..08376dbf5d62 100644 --- a/drivers/mtd/chips/sharp.c +++ b/drivers/mtd/chips/sharp.c | |||
@@ -4,7 +4,7 @@ | |||
4 | * Copyright 2000,2001 David A. Schleef <ds@schleef.org> | 4 | * Copyright 2000,2001 David A. Schleef <ds@schleef.org> |
5 | * 2000,2001 Lineo, Inc. | 5 | * 2000,2001 Lineo, Inc. |
6 | * | 6 | * |
7 | * $Id: sharp.c,v 1.14 2004/08/09 13:19:43 dwmw2 Exp $ | 7 | * $Id: sharp.c,v 1.15 2005/08/02 20:36:05 tpoynor Exp $ |
8 | * | 8 | * |
9 | * Devices supported: | 9 | * Devices supported: |
10 | * LH28F016SCT Symmetrical block flash memory, 2Mx8 | 10 | * LH28F016SCT Symmetrical block flash memory, 2Mx8 |
@@ -31,6 +31,7 @@ | |||
31 | #include <linux/mtd/cfi.h> | 31 | #include <linux/mtd/cfi.h> |
32 | #include <linux/delay.h> | 32 | #include <linux/delay.h> |
33 | #include <linux/init.h> | 33 | #include <linux/init.h> |
34 | #include <linux/slab.h> | ||
34 | 35 | ||
35 | #define CMD_RESET 0xffffffff | 36 | #define CMD_RESET 0xffffffff |
36 | #define CMD_READ_ID 0x90909090 | 37 | #define CMD_READ_ID 0x90909090 |
@@ -214,7 +215,7 @@ static int sharp_probe_map(struct map_info *map,struct mtd_info *mtd) | |||
214 | /* This function returns with the chip->mutex lock held. */ | 215 | /* This function returns with the chip->mutex lock held. */ |
215 | static int sharp_wait(struct map_info *map, struct flchip *chip) | 216 | static int sharp_wait(struct map_info *map, struct flchip *chip) |
216 | { | 217 | { |
217 | __u16 status; | 218 | int status, i; |
218 | unsigned long timeo = jiffies + HZ; | 219 | unsigned long timeo = jiffies + HZ; |
219 | DECLARE_WAITQUEUE(wait, current); | 220 | DECLARE_WAITQUEUE(wait, current); |
220 | int adr = 0; | 221 | int adr = 0; |
@@ -227,13 +228,11 @@ retry: | |||
227 | map_write32(map,CMD_READ_STATUS,adr); | 228 | map_write32(map,CMD_READ_STATUS,adr); |
228 | chip->state = FL_STATUS; | 229 | chip->state = FL_STATUS; |
229 | case FL_STATUS: | 230 | case FL_STATUS: |
230 | status = map_read32(map,adr); | 231 | for(i=0;i<100;i++){ |
231 | //printk("status=%08x\n",status); | 232 | status = map_read32(map,adr); |
232 | 233 | if((status & SR_READY)==SR_READY) | |
233 | udelay(100); | 234 | break; |
234 | if((status & SR_READY)!=SR_READY){ | 235 | udelay(1); |
235 | //printk(".status=%08x\n",status); | ||
236 | udelay(100); | ||
237 | } | 236 | } |
238 | break; | 237 | break; |
239 | default: | 238 | default: |
diff --git a/drivers/mtd/mtd_blkdevs.c b/drivers/mtd/mtd_blkdevs.c index f8d2185819e7..d6cb3d194efb 100644 --- a/drivers/mtd/mtd_blkdevs.c +++ b/drivers/mtd/mtd_blkdevs.c | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * $Id: mtd_blkdevs.c,v 1.24 2004/11/16 18:28:59 dwmw2 Exp $ | 2 | * $Id: mtd_blkdevs.c,v 1.26 2005/07/29 19:42:04 tpoynor Exp $ |
3 | * | 3 | * |
4 | * (C) 2003 David Woodhouse <dwmw2@infradead.org> | 4 | * (C) 2003 David Woodhouse <dwmw2@infradead.org> |
5 | * | 5 | * |
@@ -21,7 +21,6 @@ | |||
21 | #include <linux/init.h> | 21 | #include <linux/init.h> |
22 | #include <asm/semaphore.h> | 22 | #include <asm/semaphore.h> |
23 | #include <asm/uaccess.h> | 23 | #include <asm/uaccess.h> |
24 | #include <linux/devfs_fs_kernel.h> | ||
25 | 24 | ||
26 | static LIST_HEAD(blktrans_majors); | 25 | static LIST_HEAD(blktrans_majors); |
27 | 26 | ||
@@ -290,10 +289,18 @@ int add_mtd_blktrans_dev(struct mtd_blktrans_dev *new) | |||
290 | gd->first_minor = (new->devnum) << tr->part_bits; | 289 | gd->first_minor = (new->devnum) << tr->part_bits; |
291 | gd->fops = &mtd_blktrans_ops; | 290 | gd->fops = &mtd_blktrans_ops; |
292 | 291 | ||
293 | snprintf(gd->disk_name, sizeof(gd->disk_name), | 292 | if (tr->part_bits) |
294 | "%s%c", tr->name, (tr->part_bits?'a':'0') + new->devnum); | 293 | if (new->devnum < 26) |
295 | snprintf(gd->devfs_name, sizeof(gd->devfs_name), | 294 | snprintf(gd->disk_name, sizeof(gd->disk_name), |
296 | "%s/%c", tr->name, (tr->part_bits?'a':'0') + new->devnum); | 295 | "%s%c", tr->name, 'a' + new->devnum); |
296 | else | ||
297 | snprintf(gd->disk_name, sizeof(gd->disk_name), | ||
298 | "%s%c%c", tr->name, | ||
299 | 'a' - 1 + new->devnum / 26, | ||
300 | 'a' + new->devnum % 26); | ||
301 | else | ||
302 | snprintf(gd->disk_name, sizeof(gd->disk_name), | ||
303 | "%s%d", tr->name, new->devnum); | ||
297 | 304 | ||
298 | /* 2.5 has capacity in units of 512 bytes while still | 305 | /* 2.5 has capacity in units of 512 bytes while still |
299 | having BLOCK_SIZE_BITS set to 10. Just to keep us amused. */ | 306 | having BLOCK_SIZE_BITS set to 10. Just to keep us amused. */ |
@@ -411,8 +418,6 @@ int register_mtd_blktrans(struct mtd_blktrans_ops *tr) | |||
411 | return ret; | 418 | return ret; |
412 | } | 419 | } |
413 | 420 | ||
414 | devfs_mk_dir(tr->name); | ||
415 | |||
416 | INIT_LIST_HEAD(&tr->devs); | 421 | INIT_LIST_HEAD(&tr->devs); |
417 | list_add(&tr->list, &blktrans_majors); | 422 | list_add(&tr->list, &blktrans_majors); |
418 | 423 | ||
@@ -445,7 +450,6 @@ int deregister_mtd_blktrans(struct mtd_blktrans_ops *tr) | |||
445 | tr->remove_dev(dev); | 450 | tr->remove_dev(dev); |
446 | } | 451 | } |
447 | 452 | ||
448 | devfs_remove(tr->name); | ||
449 | blk_cleanup_queue(tr->blkcore_priv->rq); | 453 | blk_cleanup_queue(tr->blkcore_priv->rq); |
450 | unregister_blkdev(tr->major, tr->name); | 454 | unregister_blkdev(tr->major, tr->name); |
451 | 455 | ||
diff --git a/drivers/mtd/mtdchar.c b/drivers/mtd/mtdchar.c index 16df1e4fb0e9..8c0d94b72b63 100644 --- a/drivers/mtd/mtdchar.c +++ b/drivers/mtd/mtdchar.c | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * $Id: mtdchar.c,v 1.73 2005/07/04 17:36:41 gleixner Exp $ | 2 | * $Id: mtdchar.c,v 1.74 2005/08/04 01:05:48 tpoynor Exp $ |
3 | * | 3 | * |
4 | * Character-device access to raw MTD devices. | 4 | * Character-device access to raw MTD devices. |
5 | * | 5 | * |
@@ -70,26 +70,23 @@ static loff_t mtd_lseek (struct file *file, loff_t offset, int orig) | |||
70 | switch (orig) { | 70 | switch (orig) { |
71 | case 0: | 71 | case 0: |
72 | /* SEEK_SET */ | 72 | /* SEEK_SET */ |
73 | file->f_pos = offset; | ||
74 | break; | 73 | break; |
75 | case 1: | 74 | case 1: |
76 | /* SEEK_CUR */ | 75 | /* SEEK_CUR */ |
77 | file->f_pos += offset; | 76 | offset += file->f_pos; |
78 | break; | 77 | break; |
79 | case 2: | 78 | case 2: |
80 | /* SEEK_END */ | 79 | /* SEEK_END */ |
81 | file->f_pos =mtd->size + offset; | 80 | offset += mtd->size; |
82 | break; | 81 | break; |
83 | default: | 82 | default: |
84 | return -EINVAL; | 83 | return -EINVAL; |
85 | } | 84 | } |
86 | 85 | ||
87 | if (file->f_pos < 0) | 86 | if (offset >= 0 && offset < mtd->size) |
88 | file->f_pos = 0; | 87 | return file->f_pos = offset; |
89 | else if (file->f_pos >= mtd->size) | ||
90 | file->f_pos = mtd->size - 1; | ||
91 | 88 | ||
92 | return file->f_pos; | 89 | return -EINVAL; |
93 | } | 90 | } |
94 | 91 | ||
95 | 92 | ||