Skip to content

Commit e534ee4

Browse files
Krzysztof MazurDavid Woodhouse
authored andcommitted
mtd: m25p80: introduce SST_WRITE flag for SST byte programming
Not all SST devices implement the SST byte programming command. Some devices (like SST25VF064C) implement only standard m25p80 page write command. Now SPI flash devices that need sst_write() are explicitly marked with new SST_WRITE flag and the decision to use sst_write() is based on this flag instead of manufacturer id. Signed-off-by: Krzysztof Mazur <krzysiek@podlesie.net> Signed-off-by: Artem Bityutskiy <artem.bityutskiy@linux.intel.com> Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
1 parent 05ff8c2 commit e534ee4

File tree

1 file changed

+10
-9
lines changed

1 file changed

+10
-9
lines changed

drivers/mtd/devices/m25p80.c

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -681,6 +681,7 @@ struct flash_info {
681681
u16 flags;
682682
#define SECT_4K 0x01 /* OPCODE_BE_4K works uniformly */
683683
#define M25P_NO_ERASE 0x02 /* No erase command needed */
684+
#define SST_WRITE 0x04 /* use SST byte programming */
684685
};
685686

686687
#define INFO(_jedec_id, _ext_id, _sector_size, _n_sectors, _flags) \
@@ -783,14 +784,14 @@ static const struct spi_device_id m25p_ids[] = {
783784
{ "s25fl064k", INFO(0xef4017, 0, 64 * 1024, 128, SECT_4K) },
784785

785786
/* SST -- large erase sizes are "overlays", "sectors" are 4K */
786-
{ "sst25vf040b", INFO(0xbf258d, 0, 64 * 1024, 8, SECT_4K) },
787-
{ "sst25vf080b", INFO(0xbf258e, 0, 64 * 1024, 16, SECT_4K) },
788-
{ "sst25vf016b", INFO(0xbf2541, 0, 64 * 1024, 32, SECT_4K) },
789-
{ "sst25vf032b", INFO(0xbf254a, 0, 64 * 1024, 64, SECT_4K) },
790-
{ "sst25wf512", INFO(0xbf2501, 0, 64 * 1024, 1, SECT_4K) },
791-
{ "sst25wf010", INFO(0xbf2502, 0, 64 * 1024, 2, SECT_4K) },
792-
{ "sst25wf020", INFO(0xbf2503, 0, 64 * 1024, 4, SECT_4K) },
793-
{ "sst25wf040", INFO(0xbf2504, 0, 64 * 1024, 8, SECT_4K) },
787+
{ "sst25vf040b", INFO(0xbf258d, 0, 64 * 1024, 8, SECT_4K | SST_WRITE) },
788+
{ "sst25vf080b", INFO(0xbf258e, 0, 64 * 1024, 16, SECT_4K | SST_WRITE) },
789+
{ "sst25vf016b", INFO(0xbf2541, 0, 64 * 1024, 32, SECT_4K | SST_WRITE) },
790+
{ "sst25vf032b", INFO(0xbf254a, 0, 64 * 1024, 64, SECT_4K | SST_WRITE) },
791+
{ "sst25wf512", INFO(0xbf2501, 0, 64 * 1024, 1, SECT_4K | SST_WRITE) },
792+
{ "sst25wf010", INFO(0xbf2502, 0, 64 * 1024, 2, SECT_4K | SST_WRITE) },
793+
{ "sst25wf020", INFO(0xbf2503, 0, 64 * 1024, 4, SECT_4K | SST_WRITE) },
794+
{ "sst25wf040", INFO(0xbf2504, 0, 64 * 1024, 8, SECT_4K | SST_WRITE) },
794795

795796
/* ST Microelectronics -- newer production may have feature updates */
796797
{ "m25p05", INFO(0x202010, 0, 32 * 1024, 2, 0) },
@@ -1002,7 +1003,7 @@ static int m25p_probe(struct spi_device *spi)
10021003
}
10031004

10041005
/* sst flash chips use AAI word program */
1005-
if (JEDEC_MFR(info->jedec_id) == CFI_MFR_SST)
1006+
if (info->flags & SST_WRITE)
10061007
flash->mtd._write = sst_write;
10071008
else
10081009
flash->mtd._write = m25p80_write;

0 commit comments

Comments
 (0)