]> git.karo-electronics.de Git - mv-sheeva.git/blobdiff - drivers/mtd/chips/jedec_probe.c
mtd: jedec_probe: Change variable name from cfi_p to cfi
[mv-sheeva.git] / drivers / mtd / chips / jedec_probe.c
index 04fb45cacc317569fa02e15c10a753585274d55f..7bedbb96604d37826d5e19dcaeb8f8673bb1c9c8 100644 (file)
 #define SST39LF160     0x2782
 #define SST39VF1601    0x234b
 #define SST39VF3201    0x235b
+#define SST39WF1601    0x274b
+#define SST39WF1602    0x274a
 #define SST39LF512     0x00D4
 #define SST39LF010     0x00D5
 #define SST39LF020     0x00D6
@@ -1331,7 +1333,7 @@ static const struct amd_flash_info jedec_table[] = {
                }
        }, {
                .mfr_id         = CFI_MFR_SST,
-               .dev_id         = SST29EE020,
+               .dev_id         = SST29EE020,
                .name           = "SST 29EE020",
                .devtypes       = CFI_DEVICETYPE_X8,
                .uaddr          = MTD_UADDR_0x5555_0x2AAA,
@@ -1341,9 +1343,9 @@ static const struct amd_flash_info jedec_table[] = {
                .regions = {ERASEINFO(0x01000,64),
                }
        }, {
-               .mfr_id         = CFI_MFR_SST,
+               .mfr_id         = CFI_MFR_SST,
                .dev_id         = SST29LE020,
-               .name           = "SST 29LE020",
+               .name           = "SST 29LE020",
                .devtypes       = CFI_DEVICETYPE_X8,
                .uaddr          = MTD_UADDR_0x5555_0x2AAA,
                .dev_size       = SIZE_256KiB,
@@ -1510,6 +1512,34 @@ static const struct amd_flash_info jedec_table[] = {
                        ERASEINFO(0x1000,256),
                        ERASEINFO(0x1000,256)
                }
+       }, {
+               /* CFI is broken: reports AMD_STD, but needs custom uaddr */
+               .mfr_id         = CFI_MFR_SST,
+               .dev_id         = SST39WF1601,
+               .name           = "SST 39WF1601",
+               .devtypes       = CFI_DEVICETYPE_X16,
+               .uaddr          = MTD_UADDR_0xAAAA_0x5555,
+               .dev_size       = SIZE_2MiB,
+               .cmd_set        = P_ID_AMD_STD,
+               .nr_regions     = 2,
+               .regions        = {
+                       ERASEINFO(0x1000,256),
+                       ERASEINFO(0x1000,256)
+               }
+       }, {
+               /* CFI is broken: reports AMD_STD, but needs custom uaddr */
+               .mfr_id         = CFI_MFR_SST,
+               .dev_id         = SST39WF1602,
+               .name           = "SST 39WF1602",
+               .devtypes       = CFI_DEVICETYPE_X16,
+               .uaddr          = MTD_UADDR_0xAAAA_0x5555,
+               .dev_size       = SIZE_2MiB,
+               .cmd_set        = P_ID_AMD_STD,
+               .nr_regions     = 2,
+               .regions        = {
+                       ERASEINFO(0x1000,256),
+                       ERASEINFO(0x1000,256)
+               }
        }, {
                .mfr_id         = CFI_MFR_SST,     /* should be CFI */
                .dev_id         = SST39VF3201,
@@ -1905,14 +1935,14 @@ static void jedec_reset(u32 base, struct map_info *map, struct cfi_private *cfi)
 }
 
 
-static int cfi_jedec_setup(struct cfi_private *p_cfi, int index)
+static int cfi_jedec_setup(struct cfi_private *cfi, int index)
 {
        int i,num_erase_regions;
        uint8_t uaddr;
 
-       if (! (jedec_table[index].devtypes & p_cfi->device_type)) {
+       if (!(jedec_table[index].devtypes & cfi->device_type)) {
                DEBUG(MTD_DEBUG_LEVEL1, "Rejecting potential %s with incompatible %d-bit device type\n",
-                     jedec_table[index].name, 4 * (1<<p_cfi->device_type));
+                     jedec_table[index].name, 4 * (1<<cfi->device_type));
                return 0;
        }
 
@@ -1920,27 +1950,27 @@ static int cfi_jedec_setup(struct cfi_private *p_cfi, int index)
 
        num_erase_regions = jedec_table[index].nr_regions;
 
-       p_cfi->cfiq = kmalloc(sizeof(struct cfi_ident) + num_erase_regions * 4, GFP_KERNEL);
-       if (!p_cfi->cfiq) {
+       cfi->cfiq = kmalloc(sizeof(struct cfi_ident) + num_erase_regions * 4, GFP_KERNEL);
+       if (!cfi->cfiq) {
                //xx printk(KERN_WARNING "%s: kmalloc failed for CFI ident structure\n", map->name);
                return 0;
        }
 
-       memset(p_cfi->cfiq,0,sizeof(struct cfi_ident));
+       memset(cfi->cfiq, 0, sizeof(struct cfi_ident));
 
-       p_cfi->cfiq->P_ID = jedec_table[index].cmd_set;
-       p_cfi->cfiq->NumEraseRegions = jedec_table[index].nr_regions;
-       p_cfi->cfiq->DevSize = jedec_table[index].dev_size;
-       p_cfi->cfi_mode = CFI_MODE_JEDEC;
+       cfi->cfiq->P_ID = jedec_table[index].cmd_set;
+       cfi->cfiq->NumEraseRegions = jedec_table[index].nr_regions;
+       cfi->cfiq->DevSize = jedec_table[index].dev_size;
+       cfi->cfi_mode = CFI_MODE_JEDEC;
 
        for (i=0; i<num_erase_regions; i++){
-               p_cfi->cfiq->EraseRegionInfo[i] = jedec_table[index].regions[i];
+               cfi->cfiq->EraseRegionInfo[i] = jedec_table[index].regions[i];
        }
-       p_cfi->cmdset_priv = NULL;
+       cfi->cmdset_priv = NULL;
 
        /* This may be redundant for some cases, but it doesn't hurt */
-       p_cfi->mfr = jedec_table[index].mfr_id;
-       p_cfi->id = jedec_table[index].dev_id;
+       cfi->mfr = jedec_table[index].mfr_id;
+       cfi->id = jedec_table[index].dev_id;
 
        uaddr = jedec_table[index].uaddr;
 
@@ -1948,10 +1978,10 @@ static int cfi_jedec_setup(struct cfi_private *p_cfi, int index)
           our brains explode when we see the datasheets talking about address
           lines numbered from A-1 to A18. The CFI table has unlock addresses
           in device-words according to the mode the device is connected in */
-       p_cfi->addr_unlock1 = unlock_addrs[uaddr].addr1 / p_cfi->device_type;
-       p_cfi->addr_unlock2 = unlock_addrs[uaddr].addr2 / p_cfi->device_type;
+       cfi->addr_unlock1 = unlock_addrs[uaddr].addr1 / cfi->device_type;
+       cfi->addr_unlock2 = unlock_addrs[uaddr].addr2 / cfi->device_type;
 
-       return 1;       /* ok */
+       return 1;       /* ok */
 }