|
@@ -681,6 +681,7 @@ struct flash_info {
|
|
|
u16 flags;
|
|
|
#define SECT_4K 0x01 /* OPCODE_BE_4K works uniformly */
|
|
|
#define M25P_NO_ERASE 0x02 /* No erase command needed */
|
|
|
+#define SST_WRITE 0x04 /* use SST byte programming */
|
|
|
};
|
|
|
|
|
|
#define INFO(_jedec_id, _ext_id, _sector_size, _n_sectors, _flags) \
|
|
@@ -783,14 +784,14 @@ static const struct spi_device_id m25p_ids[] = {
|
|
|
{ "s25fl064k", INFO(0xef4017, 0, 64 * 1024, 128, SECT_4K) },
|
|
|
|
|
|
/* SST -- large erase sizes are "overlays", "sectors" are 4K */
|
|
|
- { "sst25vf040b", INFO(0xbf258d, 0, 64 * 1024, 8, SECT_4K) },
|
|
|
- { "sst25vf080b", INFO(0xbf258e, 0, 64 * 1024, 16, SECT_4K) },
|
|
|
- { "sst25vf016b", INFO(0xbf2541, 0, 64 * 1024, 32, SECT_4K) },
|
|
|
- { "sst25vf032b", INFO(0xbf254a, 0, 64 * 1024, 64, SECT_4K) },
|
|
|
- { "sst25wf512", INFO(0xbf2501, 0, 64 * 1024, 1, SECT_4K) },
|
|
|
- { "sst25wf010", INFO(0xbf2502, 0, 64 * 1024, 2, SECT_4K) },
|
|
|
- { "sst25wf020", INFO(0xbf2503, 0, 64 * 1024, 4, SECT_4K) },
|
|
|
- { "sst25wf040", INFO(0xbf2504, 0, 64 * 1024, 8, SECT_4K) },
|
|
|
+ { "sst25vf040b", INFO(0xbf258d, 0, 64 * 1024, 8, SECT_4K | SST_WRITE) },
|
|
|
+ { "sst25vf080b", INFO(0xbf258e, 0, 64 * 1024, 16, SECT_4K | SST_WRITE) },
|
|
|
+ { "sst25vf016b", INFO(0xbf2541, 0, 64 * 1024, 32, SECT_4K | SST_WRITE) },
|
|
|
+ { "sst25vf032b", INFO(0xbf254a, 0, 64 * 1024, 64, SECT_4K | SST_WRITE) },
|
|
|
+ { "sst25wf512", INFO(0xbf2501, 0, 64 * 1024, 1, SECT_4K | SST_WRITE) },
|
|
|
+ { "sst25wf010", INFO(0xbf2502, 0, 64 * 1024, 2, SECT_4K | SST_WRITE) },
|
|
|
+ { "sst25wf020", INFO(0xbf2503, 0, 64 * 1024, 4, SECT_4K | SST_WRITE) },
|
|
|
+ { "sst25wf040", INFO(0xbf2504, 0, 64 * 1024, 8, SECT_4K | SST_WRITE) },
|
|
|
|
|
|
/* ST Microelectronics -- newer production may have feature updates */
|
|
|
{ "m25p05", INFO(0x202010, 0, 32 * 1024, 2, 0) },
|
|
@@ -1002,7 +1003,7 @@ static int m25p_probe(struct spi_device *spi)
|
|
|
}
|
|
|
|
|
|
/* sst flash chips use AAI word program */
|
|
|
- if (JEDEC_MFR(info->jedec_id) == CFI_MFR_SST)
|
|
|
+ if (info->flags & SST_WRITE)
|
|
|
flash->mtd._write = sst_write;
|
|
|
else
|
|
|
flash->mtd._write = m25p80_write;
|