diff options
Diffstat (limited to 'drivers/mtd/chips/gen_probe.c')
-rw-r--r-- | drivers/mtd/chips/gen_probe.c | 33 |
1 files changed, 17 insertions, 16 deletions
diff --git a/drivers/mtd/chips/gen_probe.c b/drivers/mtd/chips/gen_probe.c index dc065b22f79e..41bd59d20d85 100644 --- a/drivers/mtd/chips/gen_probe.c +++ b/drivers/mtd/chips/gen_probe.c | |||
@@ -2,7 +2,7 @@ | |||
2 | * Routines common to all CFI-type probes. | 2 | * Routines common to all CFI-type probes. |
3 | * (C) 2001-2003 Red Hat, Inc. | 3 | * (C) 2001-2003 Red Hat, Inc. |
4 | * GPL'd | 4 | * GPL'd |
5 | * $Id: gen_probe.c,v 1.22 2005/01/24 23:49:50 rmk Exp $ | 5 | * $Id: gen_probe.c,v 1.24 2005/11/07 11:14:23 gleixner Exp $ |
6 | */ | 6 | */ |
7 | 7 | ||
8 | #include <linux/kernel.h> | 8 | #include <linux/kernel.h> |
@@ -26,7 +26,7 @@ struct mtd_info *mtd_do_chip_probe(struct map_info *map, struct chip_probe *cp) | |||
26 | 26 | ||
27 | /* First probe the map to see if we have CFI stuff there. */ | 27 | /* First probe the map to see if we have CFI stuff there. */ |
28 | cfi = genprobe_ident_chips(map, cp); | 28 | cfi = genprobe_ident_chips(map, cp); |
29 | 29 | ||
30 | if (!cfi) | 30 | if (!cfi) |
31 | return NULL; | 31 | return NULL; |
32 | 32 | ||
@@ -36,12 +36,12 @@ struct mtd_info *mtd_do_chip_probe(struct map_info *map, struct chip_probe *cp) | |||
36 | mtd = check_cmd_set(map, 1); /* First the primary cmdset */ | 36 | mtd = check_cmd_set(map, 1); /* First the primary cmdset */ |
37 | if (!mtd) | 37 | if (!mtd) |
38 | mtd = check_cmd_set(map, 0); /* Then the secondary */ | 38 | mtd = check_cmd_set(map, 0); /* Then the secondary */ |
39 | 39 | ||
40 | if (mtd) | 40 | if (mtd) |
41 | return mtd; | 41 | return mtd; |
42 | 42 | ||
43 | printk(KERN_WARNING"gen_probe: No supported Vendor Command Set found\n"); | 43 | printk(KERN_WARNING"gen_probe: No supported Vendor Command Set found\n"); |
44 | 44 | ||
45 | kfree(cfi->cfiq); | 45 | kfree(cfi->cfiq); |
46 | kfree(cfi); | 46 | kfree(cfi); |
47 | map->fldrv_priv = NULL; | 47 | map->fldrv_priv = NULL; |
@@ -60,14 +60,14 @@ static struct cfi_private *genprobe_ident_chips(struct map_info *map, struct chi | |||
60 | 60 | ||
61 | memset(&cfi, 0, sizeof(cfi)); | 61 | memset(&cfi, 0, sizeof(cfi)); |
62 | 62 | ||
63 | /* Call the probetype-specific code with all permutations of | 63 | /* Call the probetype-specific code with all permutations of |
64 | interleave and device type, etc. */ | 64 | interleave and device type, etc. */ |
65 | if (!genprobe_new_chip(map, cp, &cfi)) { | 65 | if (!genprobe_new_chip(map, cp, &cfi)) { |
66 | /* The probe didn't like it */ | 66 | /* The probe didn't like it */ |
67 | printk(KERN_DEBUG "%s: Found no %s device at location zero\n", | 67 | printk(KERN_DEBUG "%s: Found no %s device at location zero\n", |
68 | cp->name, map->name); | 68 | cp->name, map->name); |
69 | return NULL; | 69 | return NULL; |
70 | } | 70 | } |
71 | 71 | ||
72 | #if 0 /* Let the CFI probe routine do this sanity check. The Intel and AMD | 72 | #if 0 /* Let the CFI probe routine do this sanity check. The Intel and AMD |
73 | probe routines won't ever return a broken CFI structure anyway, | 73 | probe routines won't ever return a broken CFI structure anyway, |
@@ -92,13 +92,13 @@ static struct cfi_private *genprobe_ident_chips(struct map_info *map, struct chi | |||
92 | } else { | 92 | } else { |
93 | BUG(); | 93 | BUG(); |
94 | } | 94 | } |
95 | 95 | ||
96 | cfi.numchips = 1; | 96 | cfi.numchips = 1; |
97 | 97 | ||
98 | /* | 98 | /* |
99 | * Allocate memory for bitmap of valid chips. | 99 | * Allocate memory for bitmap of valid chips. |
100 | * Align bitmap storage size to full byte. | 100 | * Align bitmap storage size to full byte. |
101 | */ | 101 | */ |
102 | max_chips = map->size >> cfi.chipshift; | 102 | max_chips = map->size >> cfi.chipshift; |
103 | mapsize = (max_chips / 8) + ((max_chips % 8) ? 1 : 0); | 103 | mapsize = (max_chips / 8) + ((max_chips % 8) ? 1 : 0); |
104 | chip_map = kmalloc(mapsize, GFP_KERNEL); | 104 | chip_map = kmalloc(mapsize, GFP_KERNEL); |
@@ -122,7 +122,7 @@ static struct cfi_private *genprobe_ident_chips(struct map_info *map, struct chi | |||
122 | } | 122 | } |
123 | 123 | ||
124 | /* | 124 | /* |
125 | * Now allocate the space for the structures we need to return to | 125 | * Now allocate the space for the structures we need to return to |
126 | * our caller, and copy the appropriate data into them. | 126 | * our caller, and copy the appropriate data into them. |
127 | */ | 127 | */ |
128 | 128 | ||
@@ -154,7 +154,7 @@ static struct cfi_private *genprobe_ident_chips(struct map_info *map, struct chi | |||
154 | return retcfi; | 154 | return retcfi; |
155 | } | 155 | } |
156 | 156 | ||
157 | 157 | ||
158 | static int genprobe_new_chip(struct map_info *map, struct chip_probe *cp, | 158 | static int genprobe_new_chip(struct map_info *map, struct chip_probe *cp, |
159 | struct cfi_private *cfi) | 159 | struct cfi_private *cfi) |
160 | { | 160 | { |
@@ -189,7 +189,7 @@ extern cfi_cmdset_fn_t cfi_cmdset_0001; | |||
189 | extern cfi_cmdset_fn_t cfi_cmdset_0002; | 189 | extern cfi_cmdset_fn_t cfi_cmdset_0002; |
190 | extern cfi_cmdset_fn_t cfi_cmdset_0020; | 190 | extern cfi_cmdset_fn_t cfi_cmdset_0020; |
191 | 191 | ||
192 | static inline struct mtd_info *cfi_cmdset_unknown(struct map_info *map, | 192 | static inline struct mtd_info *cfi_cmdset_unknown(struct map_info *map, |
193 | int primary) | 193 | int primary) |
194 | { | 194 | { |
195 | struct cfi_private *cfi = map->fldrv_priv; | 195 | struct cfi_private *cfi = map->fldrv_priv; |
@@ -199,7 +199,7 @@ static inline struct mtd_info *cfi_cmdset_unknown(struct map_info *map, | |||
199 | cfi_cmdset_fn_t *probe_function; | 199 | cfi_cmdset_fn_t *probe_function; |
200 | 200 | ||
201 | sprintf(probename, "cfi_cmdset_%4.4X", type); | 201 | sprintf(probename, "cfi_cmdset_%4.4X", type); |
202 | 202 | ||
203 | probe_function = inter_module_get_request(probename, probename); | 203 | probe_function = inter_module_get_request(probename, probename); |
204 | 204 | ||
205 | if (probe_function) { | 205 | if (probe_function) { |
@@ -221,7 +221,7 @@ static struct mtd_info *check_cmd_set(struct map_info *map, int primary) | |||
221 | { | 221 | { |
222 | struct cfi_private *cfi = map->fldrv_priv; | 222 | struct cfi_private *cfi = map->fldrv_priv; |
223 | __u16 type = primary?cfi->cfiq->P_ID:cfi->cfiq->A_ID; | 223 | __u16 type = primary?cfi->cfiq->P_ID:cfi->cfiq->A_ID; |
224 | 224 | ||
225 | if (type == P_ID_NONE || type == P_ID_RESERVED) | 225 | if (type == P_ID_NONE || type == P_ID_RESERVED) |
226 | return NULL; | 226 | return NULL; |
227 | 227 | ||
@@ -235,6 +235,7 @@ static struct mtd_info *check_cmd_set(struct map_info *map, int primary) | |||
235 | #ifdef CONFIG_MTD_CFI_INTELEXT | 235 | #ifdef CONFIG_MTD_CFI_INTELEXT |
236 | case 0x0001: | 236 | case 0x0001: |
237 | case 0x0003: | 237 | case 0x0003: |
238 | case 0x0200: | ||
238 | return cfi_cmdset_0001(map, primary); | 239 | return cfi_cmdset_0001(map, primary); |
239 | #endif | 240 | #endif |
240 | #ifdef CONFIG_MTD_CFI_AMDSTD | 241 | #ifdef CONFIG_MTD_CFI_AMDSTD |