Am 16.06.2014 02:50 schrieb Stefan Tauner:
Some important facts:
- AT45 prober issues a 0xD7 opcode (without address) unconditionally.
- No prober weights yet - any chip matched by a single prober is presented to the user.
Signed-off-by: Stefan Tauner stefan.tauner@alumni.tuwien.ac.at
82802ab.c | 49 +- Makefile | 2 +- at45db.c | 48 +- chipdrivers.h | 36 +- cli_classic.c | 132 ++- en29lv640b.c | 27 +- flash.h | 54 +- flashchips.c | 3624 +++++++++++++++++++++++++++++++++------------------------ flashchips.h | 888 +++++++-------
I tried to verify your conversion of flashchips.c by doing it myself. Our results differ, though. The differences need to be verified against the code and the datasheets. I do believe my versions are correct and I checked most of them against the current code and/or a datasheet, but I might have made some mistakes.
The differences between your flashchips.c conversion and my conversion are:
probe_spi_at25f is len=2 in my tree, len=3 in yours probe_82802ab for ATMEL_AT49LH002 is len=2 in my tree, len=3 in yours probe_jedec for EON_EN29F010 is len=3 in my tree, len=2 in yours probe_jedec for EON_EN29F002T is len=4 in my tree, len=2 in yours probe_m29f400bt for FUJITSU_MBM29F400BC is len=2 in my tree, len=3 in yours probe_m29f400bt for FUJITSU_MBM29F400TC is len=2 in my tree, len=3 in yours probe_m29f400bt for FUJITSU_MBM29LV160BE is len=2 in my tree, len=3 in yours probe_m29f400bt for FUJITSU_MBM29LV160TE is len=2 in my tree, len=3 in yours probe_82802ab for INTEL_28F002T has len=2 in my tree, len=3 in yours probe_82802ab_* always has len=3 in your tree, and I believe this to be a systematic error probe_spi_rems for SST_SST25VF512A_REMS/SST_SST25VF010_REMS/SST_SST25VF020_REMS/SST_SST25VF040_REMS/SST_SST25VF040B_REMS is len=2 in my tree, len=3 in yours probe_jedec for SST_SST29EE010/SST_SST29LE010/SST_SST29EE020A/SST_SST29LE020 is len=2 in my tree; len=3 in yours probe_m29f400bt for ST_M29F400BB is len=2 in my tree, len=3 in yours probe_jedec for WINBOND_W29C010 has len=2 in my tree, len=3 in yours probe_jedec for WINBOND_W29C020/WINBOND_W29C040 has len=2 in my tree, len=3 in yours
This patch has almost the same layout in flashchips.c as your end result of the probe conversion, the only differences (besides the stuff mentioned above) are: Your patch has a struct field .probers, mine doesn't have it to make sure only flash.h and flashchips.c have to change at the first step while having virtually identical layout for the new flashchips.c contents. Your patch has killed probe_timing, mine doesn't yet, that one needs to die and/or be moved for chips where it is relevant. Your patch removes all those generic chips, mine doesn't yet, those things are abominations and need to die. Your patch treats the at45 chips as two models per hardware to handle the different sector/page sizes (good thing, I unfortunately didn't get around to that yet). I have left feature_bits untouched. Whitespace has changed for ca. 5 lines as well.
This patch compiles, and although flashchips.c almost looks like your variant, it needs no code changes outside flashchips.c and flash.h. The idea behind such a conversion was to decouple layout changes from semantic changes and do that with copious amounts of anonymous structs. I did _not_ do this to discredit your work, I simply wanted an easy way to almost recreate your flashchips.c for verification while not having to touch any code outside it.
By the way, I'd like to propose a slight change to your struct prober: Make the individual members of struct probe_res non-nested members of struct prober, i.e. this {probe_jedec, {2, {AMD_ID, AMD_AM29F002BB} } }, becomes this {probe_jedec, 2, {AMD_ID, AMD_AM29F002BB} }, IMHO the second variant looks better.
Signed-off-by: Carl-Daniel Hailfinger c-d.hailfinger.devel.2006@gmx.net
Index: flashrom-proberewrite/flash.h =================================================================== --- flashrom-proberewrite/flash.h (Revision 1822) +++ flashrom-proberewrite/flash.h (Arbeitskopie) @@ -150,14 +150,6 @@
enum chipbustype bustype;
- /* - * With 32bit manufacture_id and model_id we can cover IDs up to - * (including) the 4th bank of JEDEC JEP106W Standard Manufacturer's - * Identification code. - */ - uint32_t manufacture_id; - uint32_t model_id; - /* Total chip size in kilobytes */ unsigned int total_size; /* Chip page size in bytes */ @@ -172,8 +164,23 @@ enum test_state write; } tested;
- int (*probe) (struct flashctx *flash); + struct { + int (*probe) (struct flashctx *flash); + struct { + uint8_t probe_res_len; + struct { + /* + * With 32bit manufacture_id and model_id we can cover IDs up to + * (including) the 4th bank of JEDEC JEP106W Standard Manufacturer's + * Identification code. + */ + uint32_t manufacture_id; + uint32_t model_id; + }; + }; + };
+ /* Delay after "enter/exit ID mode" commands in microseconds. * NB: negative values have special meanings, see TIMING_* below. */ Index: flashrom-proberewrite/flashchips.c =================================================================== --- flashrom-proberewrite/flashchips.c (Revision 1822) +++ flashrom-proberewrite/flashchips.c (Arbeitskopie) @@ -25,6 +25,7 @@ #include "flash.h" #include "flashchips.h" #include "chipdrivers.h" +#define FIXME 0
/** * List of supported flash chips. @@ -61,13 +62,11 @@ .vendor = "AMD", .name = "Am29F010A/B", .bustype = BUS_PARALLEL, - .manufacture_id = AMD_ID, - .model_id = AMD_AM29F010B, /* Same as Am29F010A */ .total_size = 128, .page_size = 16 * 1024, .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET, .tested = TEST_OK_PRE, - .probe = probe_jedec, + {probe_jedec, {2, {AMD_ID, AMD_AM29F010B /* Same as Am29F010A */} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -88,13 +87,11 @@ .vendor = "AMD", .name = "Am29F002(N)BB", .bustype = BUS_PARALLEL, - .manufacture_id = AMD_ID, - .model_id = AMD_AM29F002BB, .total_size = 256, .page_size = 256, .feature_bits = FEATURE_SHORT_RESET | FEATURE_ADDR_2AA, .tested = TEST_UNTESTED, - .probe = probe_jedec, + {probe_jedec, {2, {AMD_ID, AMD_AM29F002BB} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -120,13 +117,11 @@ .vendor = "AMD", .name = "Am29F002(N)BT", .bustype = BUS_PARALLEL, - .manufacture_id = AMD_ID, - .model_id = AMD_AM29F002BT, .total_size = 256, .page_size = 256, .feature_bits = FEATURE_EITHER_RESET | FEATURE_ADDR_2AA, .tested = TEST_UNTESTED, - .probe = probe_jedec, + {probe_jedec, {2, {AMD_ID, AMD_AM29F002BT} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -152,13 +147,11 @@ .vendor = "AMD", .name = "Am29F016D", .bustype = BUS_PARALLEL, - .manufacture_id = AMD_ID, - .model_id = AMD_AM29F016D, .total_size = 2 * 1024, .page_size = 64 * 1024, .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET, .tested = TEST_UNTESTED, - .probe = probe_jedec, + {probe_jedec, {2, {AMD_ID, AMD_AM29F016D} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -179,13 +172,11 @@ .vendor = "AMD", .name = "Am29F040B", .bustype = BUS_PARALLEL, - .manufacture_id = AMD_ID, - .model_id = AMD_AM29F040B, .total_size = 512, .page_size = 64 * 1024, .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET, .tested = TEST_UNTESTED, - .probe = probe_jedec, + {probe_jedec, {2, {AMD_ID, AMD_AM29F040B} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -206,13 +197,11 @@ .vendor = "AMD", .name = "Am29F080B", .bustype = BUS_PARALLEL, - .manufacture_id = AMD_ID, - .model_id = AMD_AM29F080B, .total_size = 1024, .page_size = 64 * 1024, .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET, .tested = TEST_UNTESTED, - .probe = probe_jedec, + {probe_jedec, {2, {AMD_ID, AMD_AM29F080B} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -233,13 +222,11 @@ .vendor = "AMD", .name = "Am29LV001BB", .bustype = BUS_PARALLEL, - .manufacture_id = AMD_ID, - .model_id = AMD_AM29LV001BB, .total_size = 128, .page_size = 64 * 1024, /* unused */ .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET, .tested = TEST_OK_PREW, - .probe = probe_jedec, + {probe_jedec, {2, {AMD_ID, AMD_AM29LV001BB} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -264,13 +251,11 @@ .vendor = "AMD", .name = "Am29LV001BT", .bustype = BUS_PARALLEL, - .manufacture_id = AMD_ID, - .model_id = AMD_AM29LV001BT, .total_size = 128, .page_size = 64 * 1024, /* unused */ .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET, .tested = TEST_UNTESTED, - .probe = probe_jedec, + {probe_jedec, {2, {AMD_ID, AMD_AM29LV001BT} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -295,13 +280,11 @@ .vendor = "AMD", .name = "Am29LV002BB", .bustype = BUS_PARALLEL, - .manufacture_id = AMD_ID, - .model_id = AMD_AM29LV002BB, .total_size = 256, .page_size = 64 * 1024, /* unused */ .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET, .tested = TEST_UNTESTED, - .probe = probe_jedec, + {probe_jedec, {2, {AMD_ID, AMD_AM29LV002BB} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -327,13 +310,11 @@ .vendor = "AMD", .name = "Am29LV002BT", .bustype = BUS_PARALLEL, - .manufacture_id = AMD_ID, - .model_id = AMD_AM29LV002BT, .total_size = 256, .page_size = 64 * 1024, /* unused */ .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET, .tested = TEST_UNTESTED, - .probe = probe_jedec, + {probe_jedec, {2, {AMD_ID, AMD_AM29LV002BT} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -359,13 +340,11 @@ .vendor = "AMD", .name = "Am29LV004BB", .bustype = BUS_PARALLEL, - .manufacture_id = AMD_ID, - .model_id = AMD_AM29LV004BB, .total_size = 512, .page_size = 64 * 1024, /* unused */ .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET, .tested = TEST_UNTESTED, - .probe = probe_jedec, + {probe_jedec, {2, {AMD_ID, AMD_AM29LV004BB} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -391,13 +370,11 @@ .vendor = "AMD", .name = "Am29LV004BT", .bustype = BUS_PARALLEL, - .manufacture_id = AMD_ID, - .model_id = AMD_AM29LV004BT, .total_size = 512, .page_size = 64 * 1024, /* unused */ .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET, .tested = TEST_UNTESTED, - .probe = probe_jedec, + {probe_jedec, {2, {AMD_ID, AMD_AM29LV004BT} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -423,13 +400,11 @@ .vendor = "AMD", .name = "Am29LV008BB", .bustype = BUS_PARALLEL, - .manufacture_id = AMD_ID, - .model_id = AMD_AM29LV008BB, .total_size = 1024, .page_size = 64 * 1024, /* unused */ .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET, .tested = TEST_OK_PREW, - .probe = probe_jedec, + {probe_jedec, {2, {AMD_ID, AMD_AM29LV008BB} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -455,13 +430,11 @@ .vendor = "AMD", .name = "Am29LV008BT", .bustype = BUS_PARALLEL, - .manufacture_id = AMD_ID, - .model_id = AMD_AM29LV008BT, .total_size = 1024, .page_size = 64 * 1024, /* unused */ .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET, .tested = TEST_UNTESTED, - .probe = probe_jedec, + {probe_jedec, {2, {AMD_ID, AMD_AM29LV008BT} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -487,13 +460,11 @@ .vendor = "AMD", .name = "Am29LV040B", .bustype = BUS_PARALLEL, - .manufacture_id = AMD_ID, - .model_id = AMD_AM29LV040B, .total_size = 512, .page_size = 64 * 1024, .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET, .tested = TEST_OK_PRE, - .probe = probe_jedec, + {probe_jedec, {2, {AMD_ID, AMD_AM29LV040B} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -514,13 +485,11 @@ .vendor = "AMD", .name = "Am29LV081B", .bustype = BUS_PARALLEL, - .manufacture_id = AMD_ID, - .model_id = AMD_AM29LV080B, .total_size = 1024, .page_size = 64 * 1024, .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET, /* datasheet specifies address as don't care */ .tested = TEST_UNTESTED, - .probe = probe_jedec, + {probe_jedec, {2, {AMD_ID, AMD_AM29LV080B} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -541,13 +510,11 @@ .vendor = "AMIC", .name = "A25L05PT", .bustype = BUS_SPI, - .manufacture_id = AMIC_ID, - .model_id = AMIC_A25L05PT, .total_size = 64, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_UNTESTED, - .probe = probe_spi_rdid4, + {probe_spi_rdid4, {4, {AMIC_ID, AMIC_A25L05PT} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -575,13 +542,11 @@ .vendor = "AMIC", .name = "A25L05PU", .bustype = BUS_SPI, - .manufacture_id = AMIC_ID, - .model_id = AMIC_A25L05PU, .total_size = 64, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_UNTESTED, - .probe = probe_spi_rdid4, + {probe_spi_rdid4, {4, {AMIC_ID, AMIC_A25L05PU} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -609,13 +574,11 @@ .vendor = "AMIC", .name = "A25L10PT", .bustype = BUS_SPI, - .manufacture_id = AMIC_ID, - .model_id = AMIC_A25L10PT, .total_size = 128, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_UNTESTED, - .probe = probe_spi_rdid4, + {probe_spi_rdid4, {4, {AMIC_ID, AMIC_A25L10PT} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -644,13 +607,11 @@ .vendor = "AMIC", .name = "A25L10PU", .bustype = BUS_SPI, - .manufacture_id = AMIC_ID, - .model_id = AMIC_A25L10PU, .total_size = 128, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_UNTESTED, - .probe = probe_spi_rdid4, + {probe_spi_rdid4, {4, {AMIC_ID, AMIC_A25L10PU} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -679,13 +640,11 @@ .vendor = "AMIC", .name = "A25L20PT", .bustype = BUS_SPI, - .manufacture_id = AMIC_ID, - .model_id = AMIC_A25L20PT, .total_size = 256, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_UNTESTED, - .probe = probe_spi_rdid4, + {probe_spi_rdid4, {4, {AMIC_ID, AMIC_A25L20PT} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -714,13 +673,11 @@ .vendor = "AMIC", .name = "A25L20PU", .bustype = BUS_SPI, - .manufacture_id = AMIC_ID, - .model_id = AMIC_A25L20PU, .total_size = 256, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_UNTESTED, - .probe = probe_spi_rdid4, + {probe_spi_rdid4, {4, {AMIC_ID, AMIC_A25L20PU} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -754,13 +711,11 @@ .vendor = "AMIC", .name = "A25L40PT", .bustype = BUS_SPI, - .manufacture_id = AMIC_ID, - .model_id = AMIC_A25L40PT, .total_size = 512, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_OK_PR, - .probe = probe_spi_rdid4, + {probe_spi_rdid4, {4, {AMIC_ID, AMIC_A25L40PT} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -789,13 +744,11 @@ .vendor = "AMIC", .name = "A25L40PU", .bustype = BUS_SPI, - .manufacture_id = AMIC_ID, - .model_id = AMIC_A25L40PU, .total_size = 512, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_OK_PR, - .probe = probe_spi_rdid4, + {probe_spi_rdid4, {4, {AMIC_ID, AMIC_A25L40PU} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -824,13 +777,11 @@ .vendor = "AMIC", .name = "A25L80P", .bustype = BUS_SPI, - .manufacture_id = AMIC_ID, - .model_id = AMIC_A25L80P, .total_size = 1024, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_OK_PRE, - .probe = probe_spi_rdid4, + {probe_spi_rdid4, {4, {AMIC_ID, AMIC_A25L80P} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -859,13 +810,11 @@ .vendor = "AMIC", .name = "A25L16PT", .bustype = BUS_SPI, - .manufacture_id = AMIC_ID, - .model_id = AMIC_A25L16PT, .total_size = 2048, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_UNTESTED, - .probe = probe_spi_rdid4, + {probe_spi_rdid4, {4, {AMIC_ID, AMIC_A25L16PT} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -897,13 +846,11 @@ .vendor = "AMIC", .name = "A25L16PU", .bustype = BUS_SPI, - .manufacture_id = AMIC_ID, - .model_id = AMIC_A25L16PU, .total_size = 2048, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_OK_PR, - .probe = probe_spi_rdid4, + {probe_spi_rdid4, {4, {AMIC_ID, AMIC_A25L16PU} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -935,13 +882,11 @@ .vendor = "AMIC", .name = "A25L512", .bustype = BUS_SPI, - .manufacture_id = AMIC_ID_NOPREFIX, - .model_id = AMIC_A25L512, .total_size = 64, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_UNTESTED, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {AMIC_ID_NOPREFIX, AMIC_A25L512} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -967,13 +912,11 @@ .vendor = "AMIC", .name = "A25L010", .bustype = BUS_SPI, - .manufacture_id = AMIC_ID_NOPREFIX, - .model_id = AMIC_A25L010, .total_size = 128, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_UNTESTED, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {AMIC_ID_NOPREFIX, AMIC_A25L010} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -999,13 +942,11 @@ .vendor = "AMIC", .name = "A25L020", .bustype = BUS_SPI, - .manufacture_id = AMIC_ID_NOPREFIX, - .model_id = AMIC_A25L020, .total_size = 256, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_UNTESTED, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {AMIC_ID_NOPREFIX, AMIC_A25L020} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -1031,13 +972,11 @@ .vendor = "AMIC", .name = "A25L040", .bustype = BUS_SPI, - .manufacture_id = AMIC_ID_NOPREFIX, - .model_id = AMIC_A25L040, .total_size = 512, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_UNTESTED, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {AMIC_ID_NOPREFIX, AMIC_A25L040} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -1063,13 +1002,11 @@ .vendor = "AMIC", .name = "A25L080", .bustype = BUS_SPI, - .manufacture_id = AMIC_ID_NOPREFIX, - .model_id = AMIC_A25L080, .total_size = 1024, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_UNTESTED, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {AMIC_ID_NOPREFIX, AMIC_A25L080} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -1095,13 +1032,11 @@ .vendor = "AMIC", .name = "A25L016", .bustype = BUS_SPI, - .manufacture_id = AMIC_ID_NOPREFIX, - .model_id = AMIC_A25L016, .total_size = 2048, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_UNTESTED, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {AMIC_ID_NOPREFIX, AMIC_A25L016} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -1127,14 +1062,12 @@ .vendor = "AMIC", .name = "A25L032", .bustype = BUS_SPI, - .manufacture_id = AMIC_ID_NOPREFIX, - .model_id = AMIC_A25L032, .total_size = 4096, .page_size = 256, /* OTP: 64B total; read 0x4B, 0x48; write 0x42 */ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP, .tested = TEST_OK_PREW, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {AMIC_ID_NOPREFIX, AMIC_A25L032} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -1166,15 +1099,13 @@ .vendor = "AMIC", .name = "A25LQ16", .bustype = BUS_SPI, - .manufacture_id = AMIC_ID_NOPREFIX, - .model_id = AMIC_A25LQ16, .total_size = 2048, .page_size = 256, /* supports SFDP */ /* OTP: 64B total; read 0x4B, 0x48; write 0x42 */ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP, .tested = TEST_UNTESTED, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {AMIC_ID_NOPREFIX, AMIC_A25LQ16} } }, .probe_timing = TIMING_ZERO, .block_erasers = { { @@ -1205,15 +1136,13 @@ .vendor = "AMIC", .name = "A25LQ032/A25LQ32A", .bustype = BUS_SPI, - .manufacture_id = AMIC_ID_NOPREFIX, - .model_id = AMIC_A25LQ032, .total_size = 4096, .page_size = 256, /* A25LQ32A supports SFDP */ /* OTP: 64B total; read 0x4B, 0x48; write 0x42 */ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP, .tested = TEST_UNTESTED, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {AMIC_ID_NOPREFIX, AMIC_A25LQ032} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -1245,8 +1174,6 @@ .vendor = "AMIC", .name = "A25LQ64", .bustype = BUS_SPI, - .manufacture_id = AMIC_ID_NOPREFIX, - .model_id = AMIC_A25LQ032, .total_size = 8192, .page_size = 256, /* supports SFDP */ @@ -1254,7 +1181,7 @@ /* QPI enable 0x35, disable 0xF5 */ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_QPI, .tested = TEST_UNTESTED, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {AMIC_ID_NOPREFIX, AMIC_A25LQ032} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -1286,13 +1213,11 @@ .vendor = "AMIC", .name = "A29002B", .bustype = BUS_PARALLEL, - .manufacture_id = AMIC_ID_NOPREFIX, - .model_id = AMIC_A29002B, .total_size = 256, .page_size = 64 * 1024, .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET, .tested = TEST_UNTESTED, - .probe = probe_jedec, + {probe_jedec, {2, {AMIC_ID_NOPREFIX, AMIC_A29002B} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -1318,13 +1243,11 @@ .vendor = "AMIC", .name = "A29002T", .bustype = BUS_PARALLEL, - .manufacture_id = AMIC_ID_NOPREFIX, - .model_id = AMIC_A29002T, .total_size = 256, .page_size = 64 * 1024, .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET, .tested = TEST_OK_PREW, - .probe = probe_jedec, + {probe_jedec, {2, {AMIC_ID_NOPREFIX, AMIC_A29002T} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -1350,13 +1273,11 @@ .vendor = "AMIC", .name = "A29040B", .bustype = BUS_PARALLEL, - .manufacture_id = AMIC_ID_NOPREFIX, - .model_id = AMIC_A29040B, .total_size = 512, .page_size = 64 * 1024, .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET, .tested = TEST_OK_PREW, - .probe = probe_jedec, + {probe_jedec, {2, {AMIC_ID_NOPREFIX, AMIC_A29040B} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -1377,13 +1298,11 @@ .vendor = "AMIC", .name = "A49LF040A", .bustype = BUS_LPC, - .manufacture_id = AMIC_ID_NOPREFIX, - .model_id = AMIC_A49LF040A, .total_size = 512, .page_size = 64 * 1024, .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET, .tested = TEST_OK_PREW, - .probe = probe_jedec, + {probe_jedec, {2, {AMIC_ID_NOPREFIX, AMIC_A49LF040A} } }, .probe_timing = TIMING_ZERO, /* routine is wrapper to probe_jedec (pm49fl00x.c) */ .block_erasers = { @@ -1405,14 +1324,12 @@ .vendor = "Atmel", .name = "AT25DF021", .bustype = BUS_SPI, - .manufacture_id = ATMEL_ID, - .model_id = ATMEL_AT25DF021, .total_size = 256, .page_size = 256, /* OTP: 128B total, 64B pre-programmed; read 0x77; write 0x9B */ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP, .tested = TEST_UNTESTED, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {ATMEL_ID, ATMEL_AT25DF021} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -1444,13 +1361,11 @@ .vendor = "Atmel", .name = "AT25DF041A", .bustype = BUS_SPI, - .manufacture_id = ATMEL_ID, - .model_id = ATMEL_AT25DF041A, .total_size = 512, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_UNTESTED, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {ATMEL_ID, ATMEL_AT25DF041A} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -1482,13 +1397,11 @@ .vendor = "Atmel", .name = "AT25DF081", .bustype = BUS_SPI, - .manufacture_id = ATMEL_ID, - .model_id = ATMEL_AT25DF081, .total_size = 1024, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_UNTESTED, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {ATMEL_ID, ATMEL_AT25DF081} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -1520,13 +1433,11 @@ .vendor = "Atmel", .name = "AT25DF081A", .bustype = BUS_SPI, - .manufacture_id = ATMEL_ID, - .model_id = ATMEL_AT25DF081A, .total_size = 1024, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_UNTESTED, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {ATMEL_ID, ATMEL_AT25DF081A} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -1558,13 +1469,11 @@ .vendor = "Atmel", .name = "AT25DF161", .bustype = BUS_SPI, - .manufacture_id = ATMEL_ID, - .model_id = ATMEL_AT25DF161, .total_size = 2048, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_OK_PROBE, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {ATMEL_ID, ATMEL_AT25DF161} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -1596,13 +1505,11 @@ .vendor = "Atmel", .name = "AT25DF321", .bustype = BUS_SPI, - .manufacture_id = ATMEL_ID, - .model_id = ATMEL_AT25DF321, .total_size = 4096, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_OK_PREW, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {ATMEL_ID, ATMEL_AT25DF321} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -1634,14 +1541,12 @@ .vendor = "Atmel", .name = "AT25DF321A", .bustype = BUS_SPI, - .manufacture_id = ATMEL_ID, - .model_id = ATMEL_AT25DF321A, .total_size = 4096, .page_size = 256, /* OTP: 128B total, 64B pre-programmed; read 0x77; write 0x9B */ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP, .tested = TEST_OK_PREW, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {ATMEL_ID, ATMEL_AT25DF321A} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -1673,13 +1578,11 @@ .vendor = "Atmel", .name = "AT25DF641(A)", .bustype = BUS_SPI, - .manufacture_id = ATMEL_ID, - .model_id = ATMEL_AT25DF641, .total_size = 8192, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_OK_PREW, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {ATMEL_ID, ATMEL_AT25DF641} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -1711,14 +1614,12 @@ .vendor = "Atmel", .name = "AT25DL081", .bustype = BUS_SPI, - .manufacture_id = ATMEL_ID, - .model_id = ATMEL_AT25DF081, .total_size = 1024, .page_size = 256, /* OTP: 128B total, 64B pre-programmed; read 0x77; write 0x9B */ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP, .tested = TEST_UNTESTED, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {ATMEL_ID, ATMEL_AT25DF081} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -1750,14 +1651,12 @@ .vendor = "Atmel", .name = "AT25DL161", .bustype = BUS_SPI, - .manufacture_id = ATMEL_ID, - .model_id = ATMEL_AT25DL161, .total_size = 2048, .page_size = 256, /* OTP: 128B total, 64B pre-programmed; read 0x77; write 0x9B */ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP, .tested = TEST_UNTESTED, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {ATMEL_ID, ATMEL_AT25DL161} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -1789,14 +1688,12 @@ .vendor = "Atmel", .name = "AT25DQ161", .bustype = BUS_SPI, - .manufacture_id = ATMEL_ID, - .model_id = ATMEL_AT25DQ161, .total_size = 2048, .page_size = 256, /* OTP: 128B total, 64B pre-programmed; read 0x77; write 0x9B */ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP, .tested = TEST_UNTESTED, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {ATMEL_ID, ATMEL_AT25DQ161} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -1828,13 +1725,11 @@ .vendor = "Atmel", .name = "AT25F512", .bustype = BUS_SPI, - .manufacture_id = ATMEL_ID, - .model_id = ATMEL_AT25F512, .total_size = 64, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_OK_PREW, - .probe = probe_spi_at25f, + {probe_spi_at25f, {2, {ATMEL_ID, ATMEL_AT25F512} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -1857,13 +1752,11 @@ .vendor = "Atmel", .name = "AT25F512A", .bustype = BUS_SPI, - .manufacture_id = ATMEL_ID, - .model_id = ATMEL_AT25F512A, .total_size = 64, .page_size = 128, .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_OK_PREW, - .probe = probe_spi_at25f, + {probe_spi_at25f, {2, {ATMEL_ID, ATMEL_AT25F512A} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -1887,14 +1780,12 @@ .vendor = "Atmel", .name = "AT25F512B", .bustype = BUS_SPI, - .manufacture_id = ATMEL_ID, - .model_id = ATMEL_AT25F512B, .total_size = 64, .page_size = 256, /* OTP: 128B total, 64B pre-programmed; read 0x77; write 0x9B */ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP, .tested = TEST_UNTESTED, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {ATMEL_ID, ATMEL_AT25F512B} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -1931,13 +1822,11 @@ * All other properties seem to be the same.*/ .name = "AT25F1024(A)", .bustype = BUS_SPI, - .manufacture_id = ATMEL_ID, - .model_id = ATMEL_AT25F1024, .total_size = 128, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_OK_PREW, - .probe = probe_spi_at25f, + {probe_spi_at25f, {2, {ATMEL_ID, ATMEL_AT25F1024} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -1960,13 +1849,11 @@ .vendor = "Atmel", .name = "AT25F2048", .bustype = BUS_SPI, - .manufacture_id = ATMEL_ID, - .model_id = ATMEL_AT25F2048, .total_size = 256, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_UNTESTED, - .probe = probe_spi_at25f, + {probe_spi_at25f, {2, {ATMEL_ID, ATMEL_AT25F2048} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -1989,13 +1876,11 @@ .vendor = "Atmel", .name = "AT25F4096", .bustype = BUS_SPI, - .manufacture_id = ATMEL_ID, - .model_id = ATMEL_AT25F4096, .total_size = 512, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_UNTESTED, - .probe = probe_spi_at25f, + {probe_spi_at25f, {2, {ATMEL_ID, ATMEL_AT25F4096} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -2019,13 +1904,11 @@ .vendor = "Atmel", .name = "AT25FS010", .bustype = BUS_SPI, - .manufacture_id = ATMEL_ID, - .model_id = ATMEL_AT25FS010, .total_size = 128, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_OK_PREW, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {ATMEL_ID, ATMEL_AT25FS010} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -2060,13 +1943,11 @@ .vendor = "Atmel", .name = "AT25FS040", .bustype = BUS_SPI, - .manufacture_id = ATMEL_ID, - .model_id = ATMEL_AT25FS040, .total_size = 512, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_UNTESTED, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {ATMEL_ID, ATMEL_AT25FS040} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -2098,13 +1979,11 @@ .vendor = "Atmel", .name = "AT26DF041", .bustype = BUS_SPI, - .manufacture_id = ATMEL_ID, - .model_id = ATMEL_AT26DF041, .total_size = 512, .page_size = 256, /* does not support EWSR nor WREN and has no writable status register bits whatsoever */ .tested = TEST_OK_PREW, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {ATMEL_ID, ATMEL_AT26DF041} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -2130,13 +2009,11 @@ .vendor = "Atmel", .name = "AT26DF081A", .bustype = BUS_SPI, - .manufacture_id = ATMEL_ID, - .model_id = ATMEL_AT26DF081A, .total_size = 1024, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_OK_PREW, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {ATMEL_ID, ATMEL_AT26DF081A} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -2168,13 +2045,11 @@ .vendor = "Atmel", .name = "AT26DF161", .bustype = BUS_SPI, - .manufacture_id = ATMEL_ID, - .model_id = ATMEL_AT26DF161, .total_size = 2048, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_OK_PR, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {ATMEL_ID, ATMEL_AT26DF161} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -2206,13 +2081,11 @@ .vendor = "Atmel", .name = "AT26DF161A", .bustype = BUS_SPI, - .manufacture_id = ATMEL_ID, - .model_id = ATMEL_AT26DF161A, .total_size = 2048, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_OK_PREW, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {ATMEL_ID, ATMEL_AT26DF161A} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -2245,13 +2118,11 @@ .vendor = "Atmel", .name = "AT26DF321", .bustype = BUS_SPI, - .manufacture_id = ATMEL_ID, - .model_id = ATMEL_AT26DF321, .total_size = 4096, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_UNTESTED, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {ATMEL_ID, ATMEL_AT26DF321} } }, .probe_timing = TIMING_ZERO, .printlock = spi_prettyprint_status_register_at26df081a, .unlock = spi_disable_blockprotect, @@ -2263,13 +2134,11 @@ .vendor = "Atmel", .name = "AT26F004", .bustype = BUS_SPI, - .manufacture_id = ATMEL_ID, - .model_id = ATMEL_AT26F004, .total_size = 512, .page_size = 256, - .tested = {.probe = NT, .read = NT, .erase = NT, .write = BAD }, .feature_bits = FEATURE_WRSR_WREN, - .probe = probe_spi_rdid, + .tested = {.probe = NT, .read = NT, .erase = NT, .write = BAD }, + {probe_spi_rdid, {3, {ATMEL_ID, ATMEL_AT26F004} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -2300,13 +2169,11 @@ .vendor = "Atmel", .name = "AT29C512", .bustype = BUS_PARALLEL, - .manufacture_id = ATMEL_ID, - .model_id = ATMEL_AT29C512, .total_size = 64, .page_size = 128, .feature_bits = FEATURE_LONG_RESET, .tested = TEST_OK_PREW, - .probe = probe_jedec, + {probe_jedec, {2, {ATMEL_ID, ATMEL_AT29C512} } }, .probe_timing = 10000, /* 10mS, Enter=Exec */ .block_erasers = { @@ -2324,13 +2191,11 @@ .vendor = "Atmel", .name = "AT29C010A", .bustype = BUS_PARALLEL, - .manufacture_id = ATMEL_ID, - .model_id = ATMEL_AT29C010A, .total_size = 128, .page_size = 128, .feature_bits = FEATURE_LONG_RESET, .tested = TEST_OK_PRE, - .probe = probe_jedec, + {probe_jedec, {2, {ATMEL_ID, ATMEL_AT29C010A} } }, .probe_timing = 10000, /* 10mS, Enter=Exec */ .block_erasers = { @@ -2348,13 +2213,11 @@ .vendor = "Atmel", .name = "AT29C020", .bustype = BUS_PARALLEL, - .manufacture_id = ATMEL_ID, - .model_id = ATMEL_AT29C020, .total_size = 256, .page_size = 256, .feature_bits = FEATURE_LONG_RESET, .tested = TEST_OK_PREW, - .probe = probe_jedec, + {probe_jedec, {2, {ATMEL_ID, ATMEL_AT29C020} } }, .probe_timing = 10000, /* 10ms */ .block_erasers = { @@ -2372,13 +2235,11 @@ .vendor = "Atmel", .name = "AT29C040A", .bustype = BUS_PARALLEL, - .manufacture_id = ATMEL_ID, - .model_id = ATMEL_AT29C040A, .total_size = 512, .page_size = 256, .feature_bits = FEATURE_LONG_RESET, .tested = TEST_UNTESTED, - .probe = probe_jedec, + {probe_jedec, {2, {ATMEL_ID, ATMEL_AT29C040A} } }, .probe_timing = 10000, /* 10 ms */ .block_erasers = { @@ -2396,15 +2257,13 @@ .vendor = "Atmel", .name = "AT45CS1282", .bustype = BUS_SPI, - .manufacture_id = ATMEL_ID, - .model_id = ATMEL_AT45CS1282, .total_size = 16896 /* No power of two sizes */, .page_size = 1056 /* No power of two sizes */, /* does not support EWSR nor WREN and has no writable status register bits whatsoever */ /* OTP: 128B total, 64B pre-programmed; read 0x77 (4 dummy bytes); write 0x9A (via buffer) */ .feature_bits = FEATURE_OTP, .tested = TEST_UNTESTED, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {ATMEL_ID, ATMEL_AT45CS1282} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -2428,15 +2287,13 @@ .vendor = "Atmel", .name = "AT45DB011D", .bustype = BUS_SPI, - .manufacture_id = ATMEL_ID, - .model_id = ATMEL_AT45DB011D, .total_size = 128 /* or 132, determined from status register */, .page_size = 256 /* or 264, determined from status register */, /* does not support EWSR nor WREN and has no writable status register bits whatsoever */ /* OTP: 128B total, 64B pre-programmed; read 0x77; write 0x9B */ .feature_bits = FEATURE_OTP, .tested = TEST_UNTESTED, - .probe = probe_spi_at45db, + {probe_spi_at45db, {FIXME, {ATMEL_ID, ATMEL_AT45DB011D} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -2470,15 +2327,13 @@ .vendor = "Atmel", .name = "AT45DB021D", .bustype = BUS_SPI, - .manufacture_id = ATMEL_ID, - .model_id = ATMEL_AT45DB021D, .total_size = 256 /* or 264, determined from status register */, .page_size = 256 /* or 264, determined from status register */, /* does not support EWSR nor WREN and has no writable status register bits whatsoever */ /* OTP: 128B total, 64B pre-programmed; read 0x77; write 0x9B */ .feature_bits = FEATURE_OTP, .tested = TEST_UNTESTED, - .probe = probe_spi_at45db, + {probe_spi_at45db, {FIXME, {ATMEL_ID, ATMEL_AT45DB021D} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -2512,15 +2367,13 @@ .vendor = "Atmel", .name = "AT45DB041D", .bustype = BUS_SPI, - .manufacture_id = ATMEL_ID, - .model_id = ATMEL_AT45DB041D, .total_size = 512 /* or 528, determined from status register */, .page_size = 256 /* or 264, determined from status register */, /* does not support EWSR nor WREN and has no writable status register bits whatsoever */ /* OTP: 128B total, 64B pre-programmed; read 0x77; write 0x9B */ .feature_bits = FEATURE_OTP, .tested = TEST_OK_PREW, - .probe = probe_spi_at45db, + {probe_spi_at45db, {FIXME, {ATMEL_ID, ATMEL_AT45DB041D} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -2554,15 +2407,13 @@ .vendor = "Atmel", .name = "AT45DB081D", .bustype = BUS_SPI, - .manufacture_id = ATMEL_ID, - .model_id = ATMEL_AT45DB081D, .total_size = 1024 /* or 1056, determined from status register */, .page_size = 256 /* or 264, determined from status register */, /* does not support EWSR nor WREN and has no writable status register bits whatsoever */ /* OTP: 128B total, 64B pre-programmed; read 0x77; write 0x9B */ .feature_bits = FEATURE_OTP, .tested = TEST_UNTESTED, - .probe = probe_spi_at45db, + {probe_spi_at45db, {FIXME, {ATMEL_ID, ATMEL_AT45DB081D} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -2596,15 +2447,13 @@ .vendor = "Atmel", .name = "AT45DB161D", .bustype = BUS_SPI, - .manufacture_id = ATMEL_ID, - .model_id = ATMEL_AT45DB161D, .total_size = 2048 /* or 2112, determined from status register */, .page_size = 512 /* or 528, determined from status register */, /* does not support EWSR nor WREN and has no writable status register bits whatsoever */ /* OTP: 128B total, 64B pre-programmed; read 0x77; write 0x9B */ .feature_bits = FEATURE_OTP, .tested = TEST_OK_PREW, - .probe = probe_spi_at45db, + {probe_spi_at45db, {FIXME, {ATMEL_ID, ATMEL_AT45DB161D} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -2638,15 +2487,13 @@ .vendor = "Atmel", .name = "AT45DB321C", .bustype = BUS_SPI, - .manufacture_id = ATMEL_ID, - .model_id = ATMEL_AT45DB321C, .total_size = 4224 /* No power of two sizes */, .page_size = 528 /* No power of two sizes */, /* does not support EWSR nor WREN and has no writable status register bits whatsoever */ /* OTP: 128B total, 64B pre-programmed; read 0x77 (4 dummy bytes); write 0x9A (via buffer) */ .feature_bits = FEATURE_OTP, .tested = TEST_UNTESTED, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {ATMEL_ID, ATMEL_AT45DB321C} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -2681,15 +2528,13 @@ .vendor = "Atmel", .name = "AT45DB321D", .bustype = BUS_SPI, - .manufacture_id = ATMEL_ID, - .model_id = ATMEL_AT45DB321D, .total_size = 4096 /* or 4224, determined from status register */, .page_size = 512 /* or 528, determined from status register */, /* does not support EWSR nor WREN and has no writable status register bits whatsoever */ /* OTP: 128B total, 64B pre-programmed; read 0x77; write 0x9B */ .feature_bits = FEATURE_OTP, .tested = TEST_UNTESTED, - .probe = probe_spi_at45db, + {probe_spi_at45db, {FIXME, {ATMEL_ID, ATMEL_AT45DB321D} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -2723,15 +2568,13 @@ .vendor = "Atmel", .name = "AT45DB321E", .bustype = BUS_SPI, - .manufacture_id = ATMEL_ID, - .model_id = ATMEL_AT45DB321C, .total_size = 4096 /* or 4224, determined from status register */, .page_size = 512 /* or 528, determined from status register */, /* does not support EWSR nor WREN and has no writable status register bits whatsoever */ /* OTP: 128B total, 64B pre-programmed; read 0x77; write 0x9B */ .feature_bits = FEATURE_OTP, .tested = TEST_UNTESTED, - .probe = probe_spi_at45db, + {probe_spi_at45db, {FIXME, {ATMEL_ID, ATMEL_AT45DB321C} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -2765,15 +2608,13 @@ .vendor = "Atmel", .name = "AT45DB642D", .bustype = BUS_SPI, - .manufacture_id = ATMEL_ID, - .model_id = ATMEL_AT45DB642D, .total_size = 8192 /* or 8448, determined from status register */, .page_size = 1024 /* or 1056, determined from status register */, /* does not support EWSR nor WREN and has no writable status register bits whatsoever */ /* OTP: 128B total, 64B pre-programmed; read 0x77; write 0x9B */ .feature_bits = FEATURE_OTP, .tested = TEST_UNTESTED, - .probe = probe_spi_at45db, + {probe_spi_at45db, {FIXME, {ATMEL_ID, ATMEL_AT45DB642D} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -2807,13 +2648,11 @@ .vendor = "Atmel", .name = "AT49BV512", .bustype = BUS_PARALLEL, - .manufacture_id = ATMEL_ID, - .model_id = ATMEL_AT49BV512, .total_size = 64, .page_size = 64, .feature_bits = FEATURE_EITHER_RESET, .tested = TEST_OK_PREW, - .probe = probe_jedec, + {probe_jedec, {2, {ATMEL_ID, ATMEL_AT49BV512} } }, .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */ .block_erasers = { @@ -2831,13 +2670,11 @@ .vendor = "Atmel", .name = "AT49F002(N)", .bustype = BUS_PARALLEL, - .manufacture_id = ATMEL_ID, - .model_id = ATMEL_AT49F002N, .total_size = 256, .page_size = 256, .feature_bits = FEATURE_EITHER_RESET, .tested = TEST_UNTESTED, - .probe = probe_jedec, + {probe_jedec, {2, {ATMEL_ID, ATMEL_AT49F002N} } }, .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */ .block_erasers = { @@ -2863,13 +2700,11 @@ .vendor = "Atmel", .name = "AT49F002(N)T", .bustype = BUS_PARALLEL, - .manufacture_id = ATMEL_ID, - .model_id = ATMEL_AT49F002NT, .total_size = 256, .page_size = 256, .feature_bits = FEATURE_EITHER_RESET, .tested = TEST_OK_PR, - .probe = probe_jedec, + {probe_jedec, {2, {ATMEL_ID, ATMEL_AT49F002NT} } }, .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */ .block_erasers = { @@ -2895,13 +2730,11 @@ .vendor = "Atmel", .name = "AT49(H)F010", .bustype = BUS_PARALLEL, - .manufacture_id = ATMEL_ID, - .model_id = ATMEL_AT49F010, .total_size = 128, .page_size = 0, /* unused */ .feature_bits = FEATURE_EITHER_RESET, .tested = TEST_OK_PREW, - .probe = probe_jedec, + {probe_jedec, {2, {ATMEL_ID, ATMEL_AT49F010} } }, .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */ .block_erasers = { @@ -2920,13 +2753,11 @@ .vendor = "Atmel", .name = "AT49F020", .bustype = BUS_PARALLEL, - .manufacture_id = ATMEL_ID, - .model_id = ATMEL_AT49F020, .total_size = 256, .page_size = 0, /* unused */ .feature_bits = FEATURE_EITHER_RESET, .tested = TEST_OK_PRE, - .probe = probe_jedec, + {probe_jedec, {2, {ATMEL_ID, ATMEL_AT49F020} } }, .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */ .block_erasers = { @@ -2951,13 +2782,11 @@ .vendor = "Atmel", .name = "AT49F040", .bustype = BUS_PARALLEL, - .manufacture_id = ATMEL_ID, - .model_id = ATMEL_AT49F040, .total_size = 512, .page_size = 0, /* unused */ .feature_bits = FEATURE_EITHER_RESET, .tested = TEST_UNTESTED, - .probe = probe_jedec, + {probe_jedec, {2, {ATMEL_ID, ATMEL_AT49F040} } }, .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */ .block_erasers = { @@ -2982,13 +2811,11 @@ .vendor = "Atmel", .name = "AT49F080", .bustype = BUS_PARALLEL, - .manufacture_id = ATMEL_ID, - .model_id = ATMEL_AT49F080, .total_size = 1024, .page_size = 0, /* unused */ .feature_bits = FEATURE_EITHER_RESET, .tested = TEST_UNTESTED, - .probe = probe_jedec, + {probe_jedec, {2, {ATMEL_ID, ATMEL_AT49F080} } }, .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */ .block_erasers = { @@ -3014,13 +2841,11 @@ .vendor = "Atmel", .name = "AT49F080T", .bustype = BUS_PARALLEL, - .manufacture_id = ATMEL_ID, - .model_id = ATMEL_AT49F080T, .total_size = 1024, .page_size = 0, /* unused */ .feature_bits = FEATURE_EITHER_RESET, .tested = TEST_UNTESTED, - .probe = probe_jedec, + {probe_jedec, {2, {ATMEL_ID, ATMEL_AT49F080T} } }, .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */ .block_erasers = { @@ -3045,13 +2870,11 @@ .vendor = "Atmel", .name = "AT49LH002", .bustype = BUS_LPC | BUS_FWH, /* A/A Mux */ - .manufacture_id = ATMEL_ID, - .model_id = ATMEL_AT49LH002, .total_size = 256, .page_size = 0, /* unused */ .feature_bits = FEATURE_REGISTERMAP, /* TODO: LPC OK too? */ .tested = TEST_UNTESTED, - .probe = probe_82802ab, /* TODO: 0xff cmd not documented? */ + {probe_82802ab, {2, {ATMEL_ID, ATMEL_AT49LH002} } }, /* TODO: 0xff cmd not documented? */ .probe_timing = TIMING_FIXME, .block_erasers = { @@ -3081,13 +2904,11 @@ .vendor = "Catalyst", .name = "CAT28F512", .bustype = BUS_PARALLEL, - .manufacture_id = CATALYST_ID, - .model_id = CATALYST_CAT28F512, .total_size = 64, .page_size = 0, /* unused */ .feature_bits = 0, .tested = TEST_OK_PR, - .probe = probe_jedec, /* FIXME! */ + {probe_jedec, {2, {CATALYST_ID, CATALYST_CAT28F512} } }, /* FIXME! */ .probe_timing = TIMING_ZERO, .block_erasers = { @@ -3105,13 +2926,11 @@ .vendor = "Bright", .name = "BM29F040", .bustype = BUS_PARALLEL, - .manufacture_id = BRIGHT_ID, - .model_id = BRIGHT_BM29F040, .total_size = 512, .page_size = 64 * 1024, .feature_bits = FEATURE_EITHER_RESET, .tested = TEST_OK_PR, - .probe = probe_jedec, + {probe_jedec, {2, {BRIGHT_ID, BRIGHT_BM29F040} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -3132,13 +2951,11 @@ .vendor = "ESMT", .name = "F49B002UA", .bustype = BUS_PARALLEL, - .manufacture_id = ESMT_ID, - .model_id = ESMT_F49B002UA, .total_size = 256, .page_size = 4096, .feature_bits = FEATURE_EITHER_RESET, .tested = TEST_UNTESTED, - .probe = probe_jedec, + {probe_jedec, {2, {ESMT_ID, ESMT_F49B002UA} } }, .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */ .block_erasers = { @@ -3164,13 +2981,11 @@ .vendor = "ESMT", .name = "F25L008A", .bustype = BUS_SPI, - .manufacture_id = ESMT_ID, - .model_id = ESMT_F25L008A, .total_size = 1024, .page_size = 256, .feature_bits = FEATURE_WRSR_EITHER, .tested = TEST_OK_PREW, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {ESMT_ID, ESMT_F25L008A} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -3199,13 +3014,11 @@ .vendor = "ESMT", .name = "F25L32PA", .bustype = BUS_SPI, - .manufacture_id = ESMT_ID, - .model_id = ESMT_F25L32PA, .total_size = 4096, .page_size = 256, .feature_bits = FEATURE_WRSR_EITHER | FEATURE_OTP, .tested = TEST_UNTESTED, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {ESMT_ID, ESMT_F25L32PA} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -3234,13 +3047,11 @@ .vendor = "Eon", .name = "EN25B05", .bustype = BUS_SPI, - .manufacture_id = EON_ID_NOPREFIX, - .model_id = EON_EN25B05, .total_size = 64, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_UNTESTED, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {EON_ID_NOPREFIX, EON_EN25B05} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -3268,13 +3079,11 @@ .vendor = "Eon", .name = "EN25B05T", .bustype = BUS_SPI, - .manufacture_id = EON_ID_NOPREFIX, - .model_id = EON_EN25B05, .total_size = 64, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_UNTESTED, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {EON_ID_NOPREFIX, EON_EN25B05} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -3302,13 +3111,11 @@ .vendor = "Eon", .name = "EN25B10", .bustype = BUS_SPI, - .manufacture_id = EON_ID_NOPREFIX, - .model_id = EON_EN25B10, .total_size = 128, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_UNTESTED, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {EON_ID_NOPREFIX, EON_EN25B10} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -3336,13 +3143,11 @@ .vendor = "Eon", .name = "EN25B10T", .bustype = BUS_SPI, - .manufacture_id = EON_ID_NOPREFIX, - .model_id = EON_EN25B10, .total_size = 128, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_OK_PREW, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {EON_ID_NOPREFIX, EON_EN25B10} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -3370,13 +3175,11 @@ .vendor = "Eon", .name = "EN25B20", .bustype = BUS_SPI, - .manufacture_id = EON_ID_NOPREFIX, - .model_id = EON_EN25B20, .total_size = 256, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_UNTESTED, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {EON_ID_NOPREFIX, EON_EN25B20} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -3405,13 +3208,11 @@ .vendor = "Eon", .name = "EN25B20T", .bustype = BUS_SPI, - .manufacture_id = EON_ID_NOPREFIX, - .model_id = EON_EN25B20, .total_size = 256, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_UNTESTED, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {EON_ID_NOPREFIX, EON_EN25B20} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -3440,13 +3241,11 @@ .vendor = "Eon", .name = "EN25B40", .bustype = BUS_SPI, - .manufacture_id = EON_ID_NOPREFIX, - .model_id = EON_EN25B40, .total_size = 512, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_UNTESTED, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {EON_ID_NOPREFIX, EON_EN25B40} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -3475,13 +3274,11 @@ .vendor = "Eon", .name = "EN25B40T", .bustype = BUS_SPI, - .manufacture_id = EON_ID_NOPREFIX, - .model_id = EON_EN25B40, .total_size = 512, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_UNTESTED, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {EON_ID_NOPREFIX, EON_EN25B40} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -3510,13 +3307,11 @@ .vendor = "Eon", .name = "EN25B80", .bustype = BUS_SPI, - .manufacture_id = EON_ID_NOPREFIX, - .model_id = EON_EN25B80, .total_size = 1024, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_UNTESTED, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {EON_ID_NOPREFIX, EON_EN25B80} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -3545,13 +3340,11 @@ .vendor = "Eon", .name = "EN25B80T", .bustype = BUS_SPI, - .manufacture_id = EON_ID_NOPREFIX, - .model_id = EON_EN25B80, .total_size = 1024, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_UNTESTED, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {EON_ID_NOPREFIX, EON_EN25B80} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -3580,13 +3373,11 @@ .vendor = "Eon", .name = "EN25B16", .bustype = BUS_SPI, - .manufacture_id = EON_ID_NOPREFIX, - .model_id = EON_EN25B16, .total_size = 2048, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_UNTESTED, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {EON_ID_NOPREFIX, EON_EN25B16} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -3615,13 +3406,11 @@ .vendor = "Eon", .name = "EN25B16T", .bustype = BUS_SPI, - .manufacture_id = EON_ID_NOPREFIX, - .model_id = EON_EN25B16, .total_size = 2048, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_UNTESTED, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {EON_ID_NOPREFIX, EON_EN25B16} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -3650,13 +3439,11 @@ .vendor = "Eon", .name = "EN25B32", .bustype = BUS_SPI, - .manufacture_id = EON_ID_NOPREFIX, - .model_id = EON_EN25B32, .total_size = 4096, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_UNTESTED, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {EON_ID_NOPREFIX, EON_EN25B32} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -3685,13 +3472,11 @@ .vendor = "Eon", .name = "EN25B32T", .bustype = BUS_SPI, - .manufacture_id = EON_ID_NOPREFIX, - .model_id = EON_EN25B32, .total_size = 4096, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_UNTESTED, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {EON_ID_NOPREFIX, EON_EN25B32} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -3720,13 +3505,11 @@ .vendor = "Eon", .name = "EN25B64", .bustype = BUS_SPI, - .manufacture_id = EON_ID_NOPREFIX, - .model_id = EON_EN25B64, .total_size = 8192, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_UNTESTED, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {EON_ID_NOPREFIX, EON_EN25B64} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -3755,13 +3538,11 @@ .vendor = "Eon", .name = "EN25B64T", .bustype = BUS_SPI, - .manufacture_id = EON_ID_NOPREFIX, - .model_id = EON_EN25B64, .total_size = 8192, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_UNTESTED, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {EON_ID_NOPREFIX, EON_EN25B64} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -3790,13 +3571,11 @@ .vendor = "Eon", .name = "EN25F05", .bustype = BUS_SPI, - .manufacture_id = EON_ID_NOPREFIX, - .model_id = EON_EN25F05, .total_size = 64, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_OK_PREW, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {EON_ID_NOPREFIX, EON_EN25F05} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -3828,13 +3607,11 @@ .vendor = "Eon", .name = "EN25F10", .bustype = BUS_SPI, - .manufacture_id = EON_ID_NOPREFIX, - .model_id = EON_EN25F10, .total_size = 128, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_UNTESTED, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {EON_ID_NOPREFIX, EON_EN25F10} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -3866,13 +3643,11 @@ .vendor = "Eon", .name = "EN25F20", .bustype = BUS_SPI, - .manufacture_id = EON_ID_NOPREFIX, - .model_id = EON_EN25F20, .total_size = 256, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_UNTESTED, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {EON_ID_NOPREFIX, EON_EN25F20} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -3904,13 +3679,11 @@ .vendor = "Eon", .name = "EN25F40", .bustype = BUS_SPI, - .manufacture_id = EON_ID_NOPREFIX, - .model_id = EON_EN25F40, .total_size = 512, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_OK_PROBE, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {EON_ID_NOPREFIX, EON_EN25F40} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -3939,13 +3712,11 @@ .vendor = "Eon", .name = "EN25F80", .bustype = BUS_SPI, - .manufacture_id = EON_ID_NOPREFIX, - .model_id = EON_EN25F80, .total_size = 1024, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_OK_PREW, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {EON_ID_NOPREFIX, EON_EN25F80} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -3974,13 +3745,11 @@ .vendor = "Eon", .name = "EN25F16", .bustype = BUS_SPI, - .manufacture_id = EON_ID_NOPREFIX, - .model_id = EON_EN25F16, .total_size = 2048, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_OK_PREW, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {EON_ID_NOPREFIX, EON_EN25F16} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -4009,13 +3778,11 @@ .vendor = "Eon", .name = "EN25F32", .bustype = BUS_SPI, - .manufacture_id = EON_ID_NOPREFIX, - .model_id = EON_EN25F32, .total_size = 4096, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_UNTESTED, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {EON_ID_NOPREFIX, EON_EN25F32} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -4044,13 +3811,11 @@ .vendor = "Eon", .name = "EN25F64", .bustype = BUS_SPI, - .manufacture_id = EON_ID_NOPREFIX, - .model_id = EON_EN25F64, .total_size = 8192, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_OK_PREW, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {EON_ID_NOPREFIX, EON_EN25F64} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -4079,14 +3844,12 @@ .vendor = "Eon", .name = "EN25Q40", .bustype = BUS_SPI, - .manufacture_id = EON_ID_NOPREFIX, - .model_id = EON_EN25Q40, .total_size = 512, .page_size = 256, /* OTP: 256B total; enter 0x3A */ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP, .tested = TEST_UNTESTED, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {EON_ID_NOPREFIX, EON_EN25Q40} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -4115,14 +3878,12 @@ .vendor = "Eon", .name = "EN25Q80(A)", .bustype = BUS_SPI, - .manufacture_id = EON_ID_NOPREFIX, - .model_id = EON_EN25Q80, .total_size = 1024, .page_size = 256, /* OTP: 256B total; enter 0x3A */ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP, .tested = TEST_UNTESTED, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {EON_ID_NOPREFIX, EON_EN25Q80} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -4153,14 +3914,12 @@ .vendor = "Eon", .name = "EN25Q16", .bustype = BUS_SPI, - .manufacture_id = EON_ID_NOPREFIX, - .model_id = EON_EN25Q16, .total_size = 2048, .page_size = 256, /* OTP: D16 512B/Q16 128B total; enter 0x3A */ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP, .tested = TEST_UNTESTED, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {EON_ID_NOPREFIX, EON_EN25Q16} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -4193,14 +3952,12 @@ .vendor = "Eon", .name = "EN25Q32(A/B)", .bustype = BUS_SPI, - .manufacture_id = EON_ID_NOPREFIX, - .model_id = EON_EN25Q32, .total_size = 4096, .page_size = 256, /* OTP: 512B total; enter 0x3A */ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP, .tested = TEST_OK_PREW, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {EON_ID_NOPREFIX, EON_EN25Q32} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -4229,14 +3986,12 @@ .vendor = "Eon", .name = "EN25Q64", .bustype = BUS_SPI, - .manufacture_id = EON_ID_NOPREFIX, - .model_id = EON_EN25Q64, .total_size = 8192, .page_size = 256, /* OTP: 512B total; enter 0x3A */ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP, .tested = TEST_OK_PREW, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {EON_ID_NOPREFIX, EON_EN25Q64} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -4265,14 +4020,12 @@ .vendor = "Eon", .name = "EN25Q128", .bustype = BUS_SPI, - .manufacture_id = EON_ID_NOPREFIX, - .model_id = EON_EN25Q128, .total_size = 16384, .page_size = 256, /* OTP: 512B total; enter 0x3A */ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP, .tested = TEST_UNTESTED, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {EON_ID_NOPREFIX, EON_EN25Q128} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -4300,8 +4053,6 @@ .vendor = "Eon", .name = "EN25QH16", .bustype = BUS_SPI, - .manufacture_id = EON_ID_NOPREFIX, - .model_id = EON_EN25QH16, .total_size = 2048, .page_size = 256, /* supports SFDP */ @@ -4309,7 +4060,7 @@ /* QPI enable 0x38, disable 0xFF */ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_QPI, .tested = TEST_OK_PR, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {EON_ID_NOPREFIX, EON_EN25QH16} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -4338,8 +4089,6 @@ .vendor = "Eon", .name = "EN25QH32", .bustype = BUS_SPI, - .manufacture_id = EON_ID_NOPREFIX, - .model_id = EON_EN25QH32, .total_size = 4096, .page_size = 256, /* supports SFDP */ @@ -4347,7 +4096,7 @@ /* QPI enable 0x38, disable 0xFF */ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_QPI, .tested = TEST_UNTESTED, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {EON_ID_NOPREFIX, EON_EN25QH32} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -4376,8 +4125,6 @@ .vendor = "Eon", .name = "EN25QH64", .bustype = BUS_SPI, - .manufacture_id = EON_ID_NOPREFIX, - .model_id = EON_EN25QH64, .total_size = 8192, .page_size = 256, /* supports SFDP */ @@ -4385,7 +4132,7 @@ /* QPI enable 0x38, disable 0xFF */ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_QPI, .tested = TEST_OK_PR, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {EON_ID_NOPREFIX, EON_EN25QH64} } }, .probe_timing = TIMING_ZERO, .block_erasers = { { @@ -4413,8 +4160,6 @@ .vendor = "Eon", .name = "EN25QH128", .bustype = BUS_SPI, - .manufacture_id = EON_ID_NOPREFIX, - .model_id = EON_EN25QH128, .total_size = 16384, .page_size = 256, /* supports SFDP */ @@ -4422,7 +4167,7 @@ /* QPI enable 0x38, disable 0xFF */ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_QPI, .tested = TEST_UNTESTED, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {EON_ID_NOPREFIX, EON_EN25QH128} } }, .probe_timing = TIMING_ZERO, .block_erasers = { { @@ -4450,14 +4195,12 @@ .vendor = "Eon", .name = "EN25S10", .bustype = BUS_SPI, - .manufacture_id = EON_ID_NOPREFIX, - .model_id = EON_EN25S10, .total_size = 128, .page_size = 256, /* OTP: 256B total; enter 0x3A */ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP, .tested = TEST_UNTESTED, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {EON_ID_NOPREFIX, EON_EN25S10} } }, .probe_timing = TIMING_ZERO, .block_erasers = { { @@ -4485,14 +4228,12 @@ .vendor = "Eon", .name = "EN25S20", .bustype = BUS_SPI, - .manufacture_id = EON_ID_NOPREFIX, - .model_id = EON_EN25S20, .total_size = 256, .page_size = 256, /* OTP: 256B total; enter 0x3A */ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP, .tested = TEST_UNTESTED, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {EON_ID_NOPREFIX, EON_EN25S20} } }, .probe_timing = TIMING_ZERO, .block_erasers = { { @@ -4520,14 +4261,12 @@ .vendor = "Eon", .name = "EN25S40", .bustype = BUS_SPI, - .manufacture_id = EON_ID_NOPREFIX, - .model_id = EON_EN25S40, .total_size = 512, .page_size = 256, /* OTP: 256B total; enter 0x3A */ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP, .tested = TEST_UNTESTED, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {EON_ID_NOPREFIX, EON_EN25S40} } }, .probe_timing = TIMING_ZERO, .block_erasers = { { @@ -4555,14 +4294,12 @@ .vendor = "Eon", .name = "EN25S80", .bustype = BUS_SPI, - .manufacture_id = EON_ID_NOPREFIX, - .model_id = EON_EN25S80, .total_size = 1024, .page_size = 256, /* OTP: 256B total; enter 0x3A */ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP, .tested = TEST_UNTESTED, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {EON_ID_NOPREFIX, EON_EN25S80} } }, .probe_timing = TIMING_ZERO, .block_erasers = { { @@ -4590,14 +4327,12 @@ .vendor = "Eon", .name = "EN25S16", .bustype = BUS_SPI, - .manufacture_id = EON_ID_NOPREFIX, - .model_id = EON_EN25S16, .total_size = 2048, .page_size = 256, /* OTP: 512B total; enter 0x3A */ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_QPI, .tested = TEST_UNTESTED, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {EON_ID_NOPREFIX, EON_EN25S16} } }, .probe_timing = TIMING_ZERO, .block_erasers = { { @@ -4628,14 +4363,12 @@ .vendor = "Eon", .name = "EN25S32", .bustype = BUS_SPI, - .manufacture_id = EON_ID_NOPREFIX, - .model_id = EON_EN25S32, .total_size = 4096, .page_size = 256, /* OTP: 512B total; enter 0x3A */ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_QPI, .tested = TEST_UNTESTED, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {EON_ID_NOPREFIX, EON_EN25S32} } }, .probe_timing = TIMING_ZERO, .block_erasers = { { @@ -4666,14 +4399,12 @@ .vendor = "Eon", .name = "EN25S64", .bustype = BUS_SPI, - .manufacture_id = EON_ID_NOPREFIX, - .model_id = EON_EN25S64, .total_size = 8192, .page_size = 256, /* OTP: 512B total; enter 0x3A */ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_QPI, .tested = TEST_UNTESTED, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {EON_ID_NOPREFIX, EON_EN25S64} } }, .probe_timing = TIMING_ZERO, .block_erasers = { { @@ -4701,13 +4432,11 @@ .vendor = "Eon", .name = "EN29F010", .bustype = BUS_PARALLEL, - .manufacture_id = EON_ID, - .model_id = EON_EN29F010, .total_size = 128, .page_size = 128, .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET, .tested = TEST_OK_PRE, - .probe = probe_jedec, + {probe_jedec, {3, {EON_ID, EON_EN29F010} } }, .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */ .block_erasers = { @@ -4729,13 +4458,11 @@ .vendor = "Eon", .name = "EN29F002(A)(N)B", .bustype = BUS_PARALLEL, - .manufacture_id = EON_ID, - .model_id = EON_EN29F002B, .total_size = 256, .page_size = 256, .feature_bits = FEATURE_ADDR_AAA | FEATURE_EITHER_RESET, .tested = TEST_OK_PR, - .probe = probe_jedec, + {probe_jedec, {4, {EON_ID, EON_EN29F002B} } }, .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */ .block_erasers = { @@ -4761,13 +4488,11 @@ .vendor = "Eon", .name = "EN29F002(A)(N)T", .bustype = BUS_PARALLEL, - .manufacture_id = EON_ID, - .model_id = EON_EN29F002T, .total_size = 256, .page_size = 256, .feature_bits = FEATURE_ADDR_AAA | FEATURE_EITHER_RESET, .tested = TEST_OK_PREW, - .probe = probe_jedec, + {probe_jedec, {4, {EON_ID, EON_EN29F002T} } }, .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */ .block_erasers = { @@ -4793,13 +4518,11 @@ .vendor = "Eon", .name = "EN29LV640B", .bustype = BUS_PARALLEL, - .manufacture_id = EON_ID, - .model_id = EON_EN29LV640B, .total_size = 8192, .page_size = 8192, .feature_bits = 0, .tested = TEST_OK_PREW, - .probe = probe_en29lv640b, + {probe_en29lv640b, {3, {EON_ID, EON_EN29LV640B} } }, .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */ .block_erasers = { @@ -4823,13 +4546,11 @@ .vendor = "Fujitsu", .name = "MBM29F004BC", .bustype = BUS_PARALLEL, - .manufacture_id = FUJITSU_ID, - .model_id = FUJITSU_MBM29F004BC, .total_size = 512, .page_size = 64 * 1024, .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET, .tested = TEST_UNTESTED, - .probe = probe_jedec, + {probe_jedec, {2, {FUJITSU_ID, FUJITSU_MBM29F004BC} } }, .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */ .block_erasers = { @@ -4855,13 +4576,11 @@ .vendor = "Fujitsu", .name = "MBM29F004TC", .bustype = BUS_PARALLEL, - .manufacture_id = FUJITSU_ID, - .model_id = FUJITSU_MBM29F004TC, .total_size = 512, .page_size = 64 * 1024, .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET, .tested = TEST_UNTESTED, - .probe = probe_jedec, + {probe_jedec, {2, {FUJITSU_ID, FUJITSU_MBM29F004TC} } }, .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */ .block_erasers = { @@ -4888,13 +4607,11 @@ .vendor = "Fujitsu", .name = "MBM29F400BC", .bustype = BUS_PARALLEL, - .manufacture_id = FUJITSU_ID, - .model_id = FUJITSU_MBM29F400BC, .total_size = 512, .page_size = 64 * 1024, .feature_bits = FEATURE_ADDR_SHIFTED | FEATURE_EITHER_RESET, .tested = TEST_UNTESTED, - .probe = probe_m29f400bt, + {probe_m29f400bt, {2, {FUJITSU_ID, FUJITSU_MBM29F400BC} } }, .probe_timing = TIMING_IGNORED, /* routine doesn't use probe_timing (m29f400bt.c) */ .block_erasers = { @@ -4920,13 +4637,11 @@ .vendor = "Fujitsu", .name = "MBM29F400TC", .bustype = BUS_PARALLEL, - .manufacture_id = FUJITSU_ID, - .model_id = FUJITSU_MBM29F400TC, .total_size = 512, .page_size = 64 * 1024, .feature_bits = FEATURE_ADDR_SHIFTED | FEATURE_EITHER_RESET, .tested = TEST_UNTESTED, - .probe = probe_m29f400bt, + {probe_m29f400bt, {2, {FUJITSU_ID, FUJITSU_MBM29F400TC} } }, .probe_timing = TIMING_IGNORED, /* routine doesn't use probe_timing (m29f400bt.c) */ .block_erasers = { @@ -4952,13 +4667,11 @@ .vendor = "Fujitsu", .name = "MBM29LV160BE", .bustype = BUS_PARALLEL, - .manufacture_id = FUJITSU_ID, - .model_id = FUJITSU_MBM29LV160BE, .total_size = 2 * 1024, .page_size = 0, .feature_bits = FEATURE_ADDR_SHIFTED | FEATURE_SHORT_RESET, .tested = TEST_UNTESTED, - .probe = probe_m29f400bt, + {probe_m29f400bt, {2, {FUJITSU_ID, FUJITSU_MBM29LV160BE} } }, .probe_timing = TIMING_IGNORED, .block_erasers = { @@ -4984,13 +4697,11 @@ .vendor = "Fujitsu", .name = "MBM29LV160TE", .bustype = BUS_PARALLEL, - .manufacture_id = FUJITSU_ID, - .model_id = FUJITSU_MBM29LV160TE, .total_size = 2 * 1024, .page_size = 0, .feature_bits = FEATURE_ADDR_SHIFTED | FEATURE_SHORT_RESET, .tested = TEST_UNTESTED, - .probe = probe_m29f400bt, + {probe_m29f400bt, {2, {FUJITSU_ID, FUJITSU_MBM29LV160TE} } }, .probe_timing = TIMING_IGNORED, .block_erasers = { @@ -5016,14 +4727,12 @@ .vendor = "GigaDevice", .name = "GD25LQ32", .bustype = BUS_SPI, - .manufacture_id = GIGADEVICE_ID, - .model_id = GIGADEVICE_GD25LQ32, .total_size = 4096, .page_size = 256, /* OTP: 1024B total, 256B reserved; read 0x48; write 0x42, erase 0x44 */ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP, .tested = TEST_OK_PREW, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {GIGADEVICE_ID, GIGADEVICE_GD25LQ32} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -5055,13 +4764,11 @@ .vendor = "GigaDevice", .name = "GD25Q512", .bustype = BUS_SPI, - .manufacture_id = GIGADEVICE_ID, - .model_id = GIGADEVICE_GD25Q512, .total_size = 64, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_UNTESTED, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {GIGADEVICE_ID, GIGADEVICE_GD25Q512} } }, .probe_timing = TIMING_ZERO, .block_erasers = { { @@ -5089,13 +4796,11 @@ .vendor = "GigaDevice", .name = "GD25Q10", .bustype = BUS_SPI, - .manufacture_id = GIGADEVICE_ID, - .model_id = GIGADEVICE_GD25Q10, .total_size = 128, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_UNTESTED, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {GIGADEVICE_ID, GIGADEVICE_GD25Q10} } }, .probe_timing = TIMING_ZERO, .block_erasers = { { @@ -5126,13 +4831,11 @@ .vendor = "GigaDevice", .name = "GD25Q20(B)", .bustype = BUS_SPI, - .manufacture_id = GIGADEVICE_ID, - .model_id = GIGADEVICE_GD25Q20, .total_size = 256, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_UNTESTED, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {GIGADEVICE_ID, GIGADEVICE_GD25Q20} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -5164,13 +4867,11 @@ .vendor = "GigaDevice", .name = "GD25Q40(B)", .bustype = BUS_SPI, - .manufacture_id = GIGADEVICE_ID, - .model_id = GIGADEVICE_GD25Q40, .total_size = 512, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_UNTESTED, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {GIGADEVICE_ID, GIGADEVICE_GD25Q40} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -5202,14 +4903,12 @@ .vendor = "GigaDevice", .name = "GD25Q80(B)", .bustype = BUS_SPI, - .manufacture_id = GIGADEVICE_ID, - .model_id = GIGADEVICE_GD25Q80, .total_size = 1024, .page_size = 256, /* OTP: 1024B total, 256B reserved; read 0x48; write 0x42, erase 0x44 (B version only) */ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP, .tested = TEST_OK_PREW, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {GIGADEVICE_ID, GIGADEVICE_GD25Q80} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -5241,14 +4940,12 @@ .vendor = "GigaDevice", .name = "GD25Q16(B)", .bustype = BUS_SPI, - .manufacture_id = GIGADEVICE_ID, - .model_id = GIGADEVICE_GD25Q16, .total_size = 2048, .page_size = 256, /* OTP: 1024B total, 256B reserved; read 0x48; write 0x42, erase 0x44 (B version only) */ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP, .tested = TEST_UNTESTED, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {GIGADEVICE_ID, GIGADEVICE_GD25Q16} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -5280,14 +4977,12 @@ .vendor = "GigaDevice", .name = "GD25Q32(B)", .bustype = BUS_SPI, - .manufacture_id = GIGADEVICE_ID, - .model_id = GIGADEVICE_GD25Q32, .total_size = 4096, .page_size = 256, /* OTP: 1024B total, 256B reserved; read 0x48; write 0x42, erase 0x44 */ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP, .tested = TEST_OK_PREW, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {GIGADEVICE_ID, GIGADEVICE_GD25Q32} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -5319,14 +5014,12 @@ .vendor = "GigaDevice", .name = "GD25Q64(B)", .bustype = BUS_SPI, - .manufacture_id = GIGADEVICE_ID, - .model_id = GIGADEVICE_GD25Q64, .total_size = 8192, .page_size = 256, /* OTP: 1024B total, 256B reserved; read 0x48; write 0x42, erase 0x44 */ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP, .tested = TEST_OK_PREW, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {GIGADEVICE_ID, GIGADEVICE_GD25Q64} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -5358,14 +5051,12 @@ .vendor = "GigaDevice", .name = "GD25Q128B", .bustype = BUS_SPI, - .manufacture_id = GIGADEVICE_ID, - .model_id = GIGADEVICE_GD25Q128, .total_size = 16384, .page_size = 256, /* OTP: 1024B total, 256B reserved; read 0x48; write 0x42, erase 0x44 */ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP, .tested = TEST_UNTESTED, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {GIGADEVICE_ID, GIGADEVICE_GD25Q128} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -5397,14 +5088,12 @@ .vendor = "GigaDevice", .name = "GD25T80", .bustype = BUS_SPI, - .manufacture_id = GIGADEVICE_ID, - .model_id = GIGADEVICE_GD25T80, .total_size = 1024, .page_size = 256, /* OTP: 256B total; enter 0x3A */ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP, .tested = TEST_UNTESTED, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {GIGADEVICE_ID, GIGADEVICE_GD25T80} } }, .probe_timing = TIMING_ZERO, .block_erasers = { { @@ -5435,13 +5124,11 @@ .vendor = "Hyundai", .name = "HY29F002T", .bustype = BUS_PARALLEL, - .manufacture_id = HYUNDAI_ID, - .model_id = HYUNDAI_HY29F002T, .total_size = 256, .page_size = 256 * 1024, .feature_bits = FEATURE_EITHER_RESET, /* Some revisions may need FEATURE_ADDR_2AA */ .tested = TEST_OK_PRE, - .probe = probe_jedec, + {probe_jedec, {2, {HYUNDAI_ID, HYUNDAI_HY29F002T} } }, .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */ .block_erasers = { @@ -5467,13 +5154,11 @@ .vendor = "Hyundai", .name = "HY29F002B", .bustype = BUS_PARALLEL, - .manufacture_id = HYUNDAI_ID, - .model_id = HYUNDAI_HY29F002B, .total_size = 256, .page_size = 256 * 1024, .feature_bits = FEATURE_EITHER_RESET, /* Some revisions may need FEATURE_ADDR_2AA */ .tested = TEST_UNTESTED, - .probe = probe_jedec, + {probe_jedec, {2, {HYUNDAI_ID, HYUNDAI_HY29F002B} } }, .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */ .block_erasers = { @@ -5499,13 +5184,11 @@ .vendor = "Hyundai", .name = "HY29F040A", .bustype = BUS_PARALLEL, - .manufacture_id = HYUNDAI_ID, - .model_id = HYUNDAI_HY29F040A, .total_size = 512, .page_size = 64 * 1024, .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET, .tested = TEST_UNTESTED, - .probe = probe_jedec, + {probe_jedec, {2, {HYUNDAI_ID, HYUNDAI_HY29F040A} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -5526,14 +5209,12 @@ .vendor = "Intel", .name = "25F160S33B8", .bustype = BUS_SPI, - .manufacture_id = INTEL_ID, - .model_id = INTEL_25F160S33B8, .total_size = 2048, .page_size = 256, /* OTP: 506B total (2x 8B, 30x 16B, 1x 10B); read 0x4B; write 0x42 */ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP, .tested = TEST_UNTESTED, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {INTEL_ID, INTEL_25F160S33B8} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -5565,14 +5246,12 @@ .vendor = "Intel", .name = "25F160S33T8", .bustype = BUS_SPI, - .manufacture_id = INTEL_ID, - .model_id = INTEL_25F160S33T8, .total_size = 2048, .page_size = 256, /* OTP: 506B total (2x 8B, 30x 16B, 1x 10B); read 0x4B; write 0x42 */ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP, .tested = TEST_UNTESTED, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {INTEL_ID, INTEL_25F160S33T8} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -5604,14 +5283,12 @@ .vendor = "Intel", .name = "25F320S33B8", .bustype = BUS_SPI, - .manufacture_id = INTEL_ID, - .model_id = INTEL_25F320S33B8, .total_size = 4096, .page_size = 256, /* OTP: 506B total (2x 8B, 30x 16B, 1x 10B); read 0x4B; write 0x42 */ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP, .tested = TEST_UNTESTED, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {INTEL_ID, INTEL_25F320S33B8} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -5643,14 +5320,12 @@ .vendor = "Intel", .name = "25F320S33T8", .bustype = BUS_SPI, - .manufacture_id = INTEL_ID, - .model_id = INTEL_25F320S33T8, .total_size = 4096, .page_size = 256, /* OTP: 506B total (2x 8B, 30x 16B, 1x 10B); read 0x4B; write 0x42 */ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP, .tested = TEST_UNTESTED, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {INTEL_ID, INTEL_25F320S33T8} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -5682,14 +5357,12 @@ .vendor = "Intel", .name = "25F640S33B8", .bustype = BUS_SPI, - .manufacture_id = INTEL_ID, - .model_id = INTEL_25F640S33B8, .total_size = 8192, .page_size = 256, /* OTP: 506B total (2x 8B, 30x 16B, 1x 10B); read 0x4B; write 0x42 */ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP, .tested = TEST_UNTESTED, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {INTEL_ID, INTEL_25F640S33B8} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -5721,14 +5394,12 @@ .vendor = "Intel", .name = "25F640S33T8", .bustype = BUS_SPI, - .manufacture_id = INTEL_ID, - .model_id = INTEL_25F640S33T8, .total_size = 8192, .page_size = 256, /* OTP: 506B total (2x 8B, 30x 16B, 1x 10B); read 0x4B; write 0x42 */ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP, .tested = TEST_UNTESTED, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {INTEL_ID, INTEL_25F640S33T8} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -5760,12 +5431,11 @@ .vendor = "Intel", .name = "28F001BN/BX-B", .bustype = BUS_PARALLEL, - .manufacture_id = INTEL_ID, - .model_id = INTEL_28F001B, .total_size = 128, .page_size = 128 * 1024, /* 8k + 2x4k + 112k */ + .feature_bits = 0, .tested = TEST_UNTESTED, - .probe = probe_jedec, + {probe_jedec, {2, {INTEL_ID, INTEL_28F001B} } }, .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */ .block_erasers = { @@ -5787,12 +5457,11 @@ .vendor = "Intel", .name = "28F001BN/BX-T", .bustype = BUS_PARALLEL, - .manufacture_id = INTEL_ID, - .model_id = INTEL_28F001T, .total_size = 128, .page_size = 128 * 1024, /* 112k + 2x4k + 8k */ + .feature_bits = 0, .tested = TEST_OK_PR, - .probe = probe_jedec, + {probe_jedec, {2, {INTEL_ID, INTEL_28F001T} } }, .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */ .block_erasers = { @@ -5814,12 +5483,11 @@ .vendor = "Intel", .name = "28F002BC/BL/BV/BX-T", .bustype = BUS_PARALLEL, - .manufacture_id = INTEL_ID, - .model_id = INTEL_28F002T, .total_size = 256, .page_size = 256 * 1024, + .feature_bits = 0, .tested = TEST_OK_PRE, - .probe = probe_82802ab, + {probe_82802ab, {2, {INTEL_ID, INTEL_28F002T} } }, .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */ .block_erasers = { @@ -5841,12 +5509,11 @@ .vendor = "Intel", .name = "28F008S3/S5/SC", .bustype = BUS_PARALLEL, - .manufacture_id = INTEL_ID, - .model_id = INTEL_28F004S3, .total_size = 512, .page_size = 256, + .feature_bits = 0, .tested = TEST_UNTESTED, - .probe = probe_82802ab, + {probe_82802ab, {2, {INTEL_ID, INTEL_28F004S3} } }, .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */ .block_erasers = { @@ -5864,12 +5531,11 @@ .vendor = "Intel", .name = "28F004B5/BE/BV/BX-B", .bustype = BUS_PARALLEL, - .manufacture_id = INTEL_ID, - .model_id = INTEL_28F004B, .total_size = 512, .page_size = 128 * 1024, /* maximal block size */ + .feature_bits = 0, .tested = TEST_UNTESTED, - .probe = probe_82802ab, + {probe_82802ab, {2, {INTEL_ID, INTEL_28F004B} } }, .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */ .block_erasers = { @@ -5891,12 +5557,11 @@ .vendor = "Intel", .name = "28F004B5/BE/BV/BX-T", .bustype = BUS_PARALLEL, - .manufacture_id = INTEL_ID, - .model_id = INTEL_28F004T, .total_size = 512, .page_size = 128 * 1024, /* maximal block size */ + .feature_bits = 0, .tested = TEST_UNTESTED, - .probe = probe_82802ab, + {probe_82802ab, {2, {INTEL_ID, INTEL_28F004T} } }, .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */ .block_erasers = { @@ -5918,13 +5583,11 @@ .vendor = "Intel", .name = "28F400BV/BX/CE/CV-B", .bustype = BUS_PARALLEL, - .manufacture_id = INTEL_ID, - .model_id = INTEL_28F400B, .total_size = 512, .page_size = 128 * 1024, /* maximal block size */ .feature_bits = FEATURE_ADDR_SHIFTED, .tested = TEST_UNTESTED, - .probe = probe_82802ab, + {probe_82802ab, {2, {INTEL_ID, INTEL_28F400B} } }, .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */ .block_erasers = { @@ -5946,13 +5609,11 @@ .vendor = "Intel", .name = "28F400BV/BX/CE/CV-T", .bustype = BUS_PARALLEL, - .manufacture_id = INTEL_ID, - .model_id = INTEL_28F400T, .total_size = 512, .page_size = 128 * 1024, /* maximal block size */ .feature_bits = FEATURE_ADDR_SHIFTED, .tested = TEST_UNTESTED, - .probe = probe_82802ab, + {probe_82802ab, {2, {INTEL_ID, INTEL_28F400T} } }, .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */ .block_erasers = { @@ -5974,13 +5635,11 @@ .vendor = "Intel", .name = "82802AB", .bustype = BUS_FWH, - .manufacture_id = INTEL_ID, - .model_id = INTEL_82802AB, .total_size = 512, .page_size = 64 * 1024, .feature_bits = FEATURE_REGISTERMAP, .tested = TEST_OK_PREW, - .probe = probe_82802ab, + {probe_82802ab, {2, {INTEL_ID, INTEL_82802AB} } }, .probe_timing = TIMING_IGNORED, /* routine does not use probe_timing (82802ab.c) */ .block_erasers = { @@ -5999,13 +5658,11 @@ .vendor = "Intel", .name = "82802AC", .bustype = BUS_FWH, - .manufacture_id = INTEL_ID, - .model_id = INTEL_82802AC, .total_size = 1024, .page_size = 64 * 1024, .feature_bits = FEATURE_REGISTERMAP, .tested = TEST_OK_PR, - .probe = probe_82802ab, + {probe_82802ab, {2, {INTEL_ID, INTEL_82802AC} } }, .probe_timing = TIMING_IGNORED, /* routine does not use probe_timing (82802ab.c) */ .block_erasers = { @@ -6024,12 +5681,11 @@ .vendor = "Macronix", .name = "MX23L3254", .bustype = BUS_SPI, - .manufacture_id = MACRONIX_ID, - .model_id = MACRONIX_MX23L3254, .total_size = 4096, .page_size = 256, + .feature_bits = 0, .tested = {.probe = OK, .read = OK, .erase = NA, .write = NA}, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {MACRONIX_ID, MACRONIX_MX23L3254} } }, .probe_timing = TIMING_ZERO, .write = NULL, /* MX23L3254 is a mask ROM, so it is read-only */ .read = spi_chip_read, /* Fast read (0x0B) supported */ @@ -6040,14 +5696,12 @@ .vendor = "Macronix", .name = "MX25L512(E)/MX25V512(C)", .bustype = BUS_SPI, - .manufacture_id = MACRONIX_ID, - .model_id = MACRONIX_MX25L512, .total_size = 64, .page_size = 256, /* MX25L512E supports SFDP */ .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_OK_PREW, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {MACRONIX_ID, MACRONIX_MX25L512} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -6079,14 +5733,12 @@ .vendor = "Macronix", .name = "MX25L1005(C)/MX25L1006E", .bustype = BUS_SPI, - .manufacture_id = MACRONIX_ID, - .model_id = MACRONIX_MX25L1005, .total_size = 128, .page_size = 256, /* MX25L1006E supports SFDP */ .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_OK_PREW, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {MACRONIX_ID, MACRONIX_MX25L1005} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -6115,13 +5767,11 @@ .vendor = "Macronix", .name = "MX25L2005(C)", .bustype = BUS_SPI, - .manufacture_id = MACRONIX_ID, - .model_id = MACRONIX_MX25L2005, .total_size = 256, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_OK_PREW, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {MACRONIX_ID, MACRONIX_MX25L2005} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -6153,13 +5803,11 @@ .vendor = "Macronix", .name = "MX25L4005(A/C)", .bustype = BUS_SPI, - .manufacture_id = MACRONIX_ID, - .model_id = MACRONIX_MX25L4005, .total_size = 512, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_OK_PREW, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {MACRONIX_ID, MACRONIX_MX25L4005} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -6191,13 +5839,11 @@ .vendor = "Macronix", .name = "MX25L8005/MX25V8005", .bustype = BUS_SPI, - .manufacture_id = MACRONIX_ID, - .model_id = MACRONIX_MX25L8005, .total_size = 1024, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_OK_PREW, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {MACRONIX_ID, MACRONIX_MX25L8005} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -6229,13 +5875,11 @@ .vendor = "Macronix", .name = "MX25L1605", .bustype = BUS_SPI, - .manufacture_id = MACRONIX_ID, - .model_id = MACRONIX_MX25L1605, .total_size = 2048, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_OK_PREW, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {MACRONIX_ID, MACRONIX_MX25L1605} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -6264,14 +5908,12 @@ .vendor = "Macronix", .name = "MX25L1605A/MX25L1606E", .bustype = BUS_SPI, - .manufacture_id = MACRONIX_ID, - .model_id = MACRONIX_MX25L1605, .total_size = 2048, .page_size = 256, /* OTP: 64B total; enter 0xB1, exit 0xC1 (MX25L1606E only) */ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP, .tested = TEST_OK_PREW, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {MACRONIX_ID, MACRONIX_MX25L1605} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -6303,13 +5945,11 @@ .vendor = "Macronix", .name = "MX25L1605D/MX25L1608D/MX25L1673E", .bustype = BUS_SPI, - .manufacture_id = MACRONIX_ID, - .model_id = MACRONIX_MX25L1605, .total_size = 2048, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_OK_PREW, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {MACRONIX_ID, MACRONIX_MX25L1605} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -6338,14 +5978,12 @@ .vendor = "Macronix", .name = "MX25L1635D", .bustype = BUS_SPI, - .manufacture_id = MACRONIX_ID, - .model_id = MACRONIX_MX25L1635D, .total_size = 2048, .page_size = 256, /* OTP: 64B total; enter 0xB1, exit 0xC1 */ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP, .tested = TEST_UNTESTED, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {MACRONIX_ID, MACRONIX_MX25L1635D} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -6374,14 +6012,12 @@ .vendor = "Macronix", .name = "MX25L1635E", .bustype = BUS_SPI, - .manufacture_id = MACRONIX_ID, - .model_id = MACRONIX_MX25L1635E, .total_size = 2048, .page_size = 256, /* OTP: 64B total; enter 0xB1, exit 0xC1 */ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP, .tested = TEST_UNTESTED, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {MACRONIX_ID, MACRONIX_MX25L1635E} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -6410,13 +6046,11 @@ .vendor = "Macronix", .name = "MX25L3205(A)", .bustype = BUS_SPI, - .manufacture_id = MACRONIX_ID, - .model_id = MACRONIX_MX25L3205, .total_size = 4096, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_OK_PREW, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {MACRONIX_ID, MACRONIX_MX25L3205} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -6445,14 +6079,12 @@ .vendor = "Macronix", .name = "MX25L3205D/MX25L3208D", .bustype = BUS_SPI, - .manufacture_id = MACRONIX_ID, - .model_id = MACRONIX_MX25L3205, .total_size = 4096, .page_size = 256, /* OTP: 64B total; enter 0xB1, exit 0xC1 */ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP, .tested = TEST_OK_PREW, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {MACRONIX_ID, MACRONIX_MX25L3205} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -6481,14 +6113,12 @@ .vendor = "Macronix", .name = "MX25L3206E", .bustype = BUS_SPI, - .manufacture_id = MACRONIX_ID, - .model_id = MACRONIX_MX25L3205, .total_size = 4096, .page_size = 256, /* OTP: 64B total; enter 0xB1, exit 0xC1 */ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP, .tested = TEST_OK_PREW, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {MACRONIX_ID, MACRONIX_MX25L3205} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -6520,14 +6150,12 @@ .vendor = "Macronix", .name = "MX25L3273E", .bustype = BUS_SPI, - .manufacture_id = MACRONIX_ID, - .model_id = MACRONIX_MX25L3205, .total_size = 4096, .page_size = 256, /* OTP: 64B total; enter 0xB1, exit 0xC1 */ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP, .tested = TEST_UNTESTED, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {MACRONIX_ID, MACRONIX_MX25L3205} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -6559,14 +6187,12 @@ .vendor = "Macronix", .name = "MX25L3235D", .bustype = BUS_SPI, - .manufacture_id = MACRONIX_ID, - .model_id = MACRONIX_MX25L3235D, .total_size = 4096, .page_size = 256, /* OTP: 256B total; enter 0xB1, exit 0xC1 */ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP, .tested = TEST_UNTESTED, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {MACRONIX_ID, MACRONIX_MX25L3235D} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -6595,14 +6221,12 @@ .vendor = "Macronix", .name = "MX25L6405(D)", .bustype = BUS_SPI, - .manufacture_id = MACRONIX_ID, - .model_id = MACRONIX_MX25L6405, .total_size = 8192, .page_size = 256, /* MX25L6405D has 64B of OTP; enter 0xB1, exit 0xC1 */ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP, .tested = TEST_OK_PREW, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {MACRONIX_ID, MACRONIX_MX25L6405} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -6631,14 +6255,12 @@ .vendor = "Macronix", .name = "MX25L6406E/MX25L6436E", .bustype = BUS_SPI, - .manufacture_id = MACRONIX_ID, - .model_id = MACRONIX_MX25L6405, .total_size = 8192, .page_size = 256, /* OTP: 06E 64B/36E 512B total; enter 0xB1, exit 0xC1 */ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP, .tested = TEST_OK_PREW, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {MACRONIX_ID, MACRONIX_MX25L6405} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -6667,15 +6289,13 @@ .vendor = "Macronix", .name = "MX25L6445E/MX25L6473E", .bustype = BUS_SPI, - .manufacture_id = MACRONIX_ID, - .model_id = MACRONIX_MX25L6405, .total_size = 8192, .page_size = 256, /* supports SFDP */ /* OTP: 512B total; enter 0xB1, exit 0xC1 */ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP, .tested = TEST_OK_PREW, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {MACRONIX_ID, MACRONIX_MX25L6405} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -6707,14 +6327,12 @@ .vendor = "Macronix", .name = "MX25L12805(D)", .bustype = BUS_SPI, - .manufacture_id = MACRONIX_ID, - .model_id = MACRONIX_MX25L12805, .total_size = 16384, .page_size = 256, /* MX25L12805D has 64B of OTP; enter 0xB1, exit 0xC1 */ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP, .tested = TEST_OK_PREW, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {MACRONIX_ID, MACRONIX_MX25L12805} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -6743,15 +6361,13 @@ .vendor = "Macronix", .name = "MX25U1635E", .bustype = BUS_SPI, - .manufacture_id = MACRONIX_ID, - .model_id = MACRONIX_MX25U1635E, .total_size = 2048, .page_size = 256, /* OTP: 512B total; enter 0xB1, exit 0xC1 */ /* QPI enable 0x35, disable 0xF5 (0xFF et al. work too) */ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_QPI, .tested = TEST_UNTESTED, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {MACRONIX_ID, MACRONIX_MX25U1635E} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -6784,8 +6400,6 @@ .vendor = "Macronix", .name = "MX25U3235E/F", .bustype = BUS_SPI, - .manufacture_id = MACRONIX_ID, - .model_id = MACRONIX_MX25U3235E, .total_size = 4096, .page_size = 256, /* F model supports SFDP */ @@ -6793,7 +6407,7 @@ /* QPI enable 0x35, disable 0xF5 (0xFF et al. work too) */ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_QPI, .tested = TEST_OK_PREW, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {MACRONIX_ID, MACRONIX_MX25U3235E} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -6826,8 +6440,6 @@ .vendor = "Macronix", .name = "MX25U6435E/F", .bustype = BUS_SPI, - .manufacture_id = MACRONIX_ID, - .model_id = MACRONIX_MX25U6435E, .total_size = 8192, .page_size = 256, /* F model supports SFDP */ @@ -6835,7 +6447,7 @@ /* QPI enable 0x35, disable 0xF5 (0xFF et al. work too) */ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_QPI, .tested = TEST_UNTESTED, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {MACRONIX_ID, MACRONIX_MX25U6435E} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -6868,13 +6480,11 @@ .vendor = "Macronix", .name = "MX29F001B", .bustype = BUS_PARALLEL, - .manufacture_id = MACRONIX_ID, - .model_id = MACRONIX_MX29F001B, .total_size = 128, .page_size = 32 * 1024, .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET, .tested = TEST_UNTESTED, - .probe = probe_jedec, + {probe_jedec, {2, {MACRONIX_ID, MACRONIX_MX29F001B} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -6901,13 +6511,11 @@ .vendor = "Macronix", .name = "MX29F001T", .bustype = BUS_PARALLEL, - .manufacture_id = MACRONIX_ID, - .model_id = MACRONIX_MX29F001T, .total_size = 128, .page_size = 32 * 1024, .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET, .tested = TEST_OK_PREW, - .probe = probe_jedec, + {probe_jedec, {2, {MACRONIX_ID, MACRONIX_MX29F001T} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -6934,13 +6542,11 @@ .vendor = "Macronix", .name = "MX29F002(N)B", .bustype = BUS_PARALLEL, - .manufacture_id = MACRONIX_ID, - .model_id = MACRONIX_MX29F002B, .total_size = 256, .page_size = 64 * 1024, .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET, .tested = TEST_UNTESTED, - .probe = probe_jedec, + {probe_jedec, {2, {MACRONIX_ID, MACRONIX_MX29F002B} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -6966,13 +6572,11 @@ .vendor = "Macronix", .name = "MX29F002(N)T", .bustype = BUS_PARALLEL, - .manufacture_id = MACRONIX_ID, - .model_id = MACRONIX_MX29F002T, .total_size = 256, .page_size = 64 * 1024, .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET, .tested = TEST_OK_PREW, - .probe = probe_jedec, + {probe_jedec, {2, {MACRONIX_ID, MACRONIX_MX29F002T} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -6998,13 +6602,11 @@ .vendor = "Macronix", .name = "MX29F040", .bustype = BUS_PARALLEL, - .manufacture_id = MACRONIX_ID, - .model_id = MACRONIX_MX29F040, .total_size = 512, .page_size = 64 * 1024, .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET, .tested = TEST_UNTESTED, - .probe = probe_jedec, + {probe_jedec, {2, {MACRONIX_ID, MACRONIX_MX29F040} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -7025,13 +6627,11 @@ .vendor = "Macronix", .name = "MX29LV040", .bustype = BUS_PARALLEL, - .manufacture_id = MACRONIX_ID, - .model_id = MACRONIX_MX29LV040, .total_size = 512, .page_size = 64 * 1024, .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET, .tested = TEST_UNTESTED, - .probe = probe_jedec, + {probe_jedec, {2, {MACRONIX_ID, MACRONIX_MX29LV040} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -7052,13 +6652,11 @@ .vendor = "Micron/Numonyx/ST", .name = "M25P05-A", .bustype = BUS_SPI, - .manufacture_id = ST_ID, - .model_id = ST_M25P05A, .total_size = 64, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_OK_PREW, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {ST_ID, ST_M25P05A} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -7086,13 +6684,11 @@ .vendor = "Micron/Numonyx/ST", .name = "M25P05", .bustype = BUS_SPI, - .manufacture_id = 0, /* Not used. */ - .model_id = ST_M25P05_RES, .total_size = 64, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_UNTESTED, - .probe = probe_spi_res1, + {probe_spi_res1, {1, {ST_M25P05_RES} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -7115,13 +6711,11 @@ .vendor = "Micron/Numonyx/ST", .name = "M25P10-A", .bustype = BUS_SPI, - .manufacture_id = ST_ID, - .model_id = ST_M25P10A, .total_size = 128, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_OK_PRE, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {ST_ID, ST_M25P10A} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -7145,13 +6739,11 @@ .vendor = "Micron/Numonyx/ST", .name = "M25P10", .bustype = BUS_SPI, - .manufacture_id = 0, /* Not used. */ - .model_id = ST_M25P10_RES, .total_size = 128, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_UNTESTED, - .probe = probe_spi_res1, + {probe_spi_res1, {1, {ST_M25P10_RES} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -7174,13 +6766,11 @@ .vendor = "Micron/Numonyx/ST", /* Numonyx */ .name = "M25P20", .bustype = BUS_SPI, - .manufacture_id = ST_ID, - .model_id = ST_M25P20, .total_size = 256, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_UNTESTED, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {ST_ID, ST_M25P20} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -7203,13 +6793,11 @@ .vendor = "Micron/Numonyx/ST", .name = "M25P20-old", .bustype = BUS_SPI, - .manufacture_id = 0, /* Not used. */ - .model_id = ST_M25P20_RES, .total_size = 256, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_OK_PREW, - .probe = probe_spi_res1, + {probe_spi_res1, {1, {ST_M25P20_RES} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -7232,13 +6820,11 @@ .vendor = "Micron/Numonyx/ST", /* Numonyx */ .name = "M25P40", .bustype = BUS_SPI, - .manufacture_id = ST_ID, - .model_id = ST_M25P40, .total_size = 512, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_OK_PREW, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {ST_ID, ST_M25P40} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -7261,13 +6847,11 @@ .vendor = "Micron/Numonyx/ST", .name = "M25P40-old", .bustype = BUS_SPI, - .manufacture_id = 0, /* Not used. */ - .model_id = ST_M25P40_RES, .total_size = 512, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_UNTESTED, - .probe = probe_spi_res1, + {probe_spi_res1, {1, {ST_M25P40_RES} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -7289,13 +6873,11 @@ .vendor = "Micron/Numonyx/ST", .name = "M25P80", .bustype = BUS_SPI, - .manufacture_id = ST_ID, - .model_id = ST_M25P80, .total_size = 1024, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_OK_PREW, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {ST_ID, ST_M25P80} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -7318,13 +6900,11 @@ .vendor = "Micron/Numonyx/ST", .name = "M25P16", .bustype = BUS_SPI, - .manufacture_id = ST_ID, - .model_id = ST_M25P16, .total_size = 2048, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_OK_PREW, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {ST_ID, ST_M25P16} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -7347,13 +6927,11 @@ .vendor = "Micron/Numonyx/ST", .name = "M25P32", .bustype = BUS_SPI, - .manufacture_id = ST_ID, - .model_id = ST_M25P32, .total_size = 4096, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_OK_PREW, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {ST_ID, ST_M25P32} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -7376,13 +6954,11 @@ .vendor = "Micron/Numonyx/ST", .name = "M25P64", .bustype = BUS_SPI, - .manufacture_id = ST_ID, - .model_id = ST_M25P64, .total_size = 8192, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_OK_PREW, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {ST_ID, ST_M25P64} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -7405,13 +6981,11 @@ .vendor = "Micron/Numonyx/ST", .name = "M25P128", .bustype = BUS_SPI, - .manufacture_id = ST_ID, - .model_id = ST_M25P128, .total_size = 16384, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_OK_PREW, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {ST_ID, ST_M25P128} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -7434,13 +7008,11 @@ .vendor = "Micron/Numonyx/ST", .name = "M25PE10", .bustype = BUS_SPI, - .manufacture_id = ST_ID, - .model_id = ST_M25PE10, .total_size = 128, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_UNTESTED, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {ST_ID, ST_M25PE10} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -7466,13 +7038,11 @@ .vendor = "Micron/Numonyx/ST", .name = "M25PE20", .bustype = BUS_SPI, - .manufacture_id = ST_ID, - .model_id = ST_M25PE20, .total_size = 256, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_UNTESTED, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {ST_ID, ST_M25PE20} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -7498,13 +7068,11 @@ .vendor = "Micron/Numonyx/ST", .name = "M25PE40", .bustype = BUS_SPI, - .manufacture_id = ST_ID, - .model_id = ST_M25PE40, .total_size = 512, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_UNTESTED, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {ST_ID, ST_M25PE40} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -7530,13 +7098,11 @@ .vendor = "Micron/Numonyx/ST", .name = "M25PE80", .bustype = BUS_SPI, - .manufacture_id = ST_ID, - .model_id = ST_M25PE80, .total_size = 1024, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_OK_PREW, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {ST_ID, ST_M25PE80} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -7562,13 +7128,11 @@ .vendor = "Micron/Numonyx/ST", .name = "M25PE16", .bustype = BUS_SPI, - .manufacture_id = ST_ID, - .model_id = ST_M25PE16, .total_size = 2048, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_UNTESTED, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {ST_ID, ST_M25PE16} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -7594,14 +7158,12 @@ .vendor = "Micron/Numonyx/ST", .name = "M25PX80", .bustype = BUS_SPI, - .manufacture_id = ST_ID, - .model_id = ST_M25PX80, .total_size = 1024, .page_size = 256, /* OTP: 64B total; read 0x4B, write 0x42 */ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP, .tested = TEST_OK_PREW, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {ST_ID, ST_M25PX80} } }, .probe_timing = TIMING_ZERO, .block_erasers = { { @@ -7626,14 +7188,12 @@ .vendor = "Micron/Numonyx/ST", .name = "M25PX16", .bustype = BUS_SPI, - .manufacture_id = ST_ID, - .model_id = ST_M25PX16, .total_size = 2048, .page_size = 256, /* OTP: 64B total; read 0x4B; write 0x42 */ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP, .tested = TEST_OK_PREW, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {ST_ID, ST_M25PX16} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -7659,14 +7219,12 @@ .vendor = "Micron/Numonyx/ST", .name = "M25PX32", .bustype = BUS_SPI, - .manufacture_id = ST_ID, - .model_id = ST_M25PX32, .total_size = 4096, .page_size = 256, /* OTP: 64B total; read 0x4B; write 0x42 */ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP, .tested = TEST_OK_PRE, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {ST_ID, ST_M25PX32} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -7692,14 +7250,12 @@ .vendor = "Micron/Numonyx/ST", .name = "M25PX64", .bustype = BUS_SPI, - .manufacture_id = ST_ID, - .model_id = ST_M25PX64, .total_size = 8192, .page_size = 256, /* OTP: 64B total; read 0x4B; write 0x42 */ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP, .tested = TEST_OK_PREW, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {ST_ID, ST_M25PX64} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -7725,12 +7281,11 @@ .vendor = "Micron/Numonyx/ST", .name = "M45PE10", .bustype = BUS_SPI, - .manufacture_id = ST_ID, - .model_id = ST_M45PE10, .total_size = 128, .page_size = 256, + .feature_bits = 0, .tested = TEST_UNTESTED, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {ST_ID, ST_M45PE10} } }, .probe_timing = TIMING_ZERO, .block_erasers = { { @@ -7752,12 +7307,11 @@ .vendor = "Micron/Numonyx/ST", .name = "M45PE20", .bustype = BUS_SPI, - .manufacture_id = ST_ID, - .model_id = ST_M45PE20, .total_size = 256, .page_size = 256, + .feature_bits = 0, .tested = TEST_UNTESTED, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {ST_ID, ST_M45PE20} } }, .probe_timing = TIMING_ZERO, .block_erasers = { { @@ -7779,12 +7333,11 @@ .vendor = "Micron/Numonyx/ST", .name = "M45PE40", .bustype = BUS_SPI, - .manufacture_id = ST_ID, - .model_id = ST_M45PE40, .total_size = 512, .page_size = 256, + .feature_bits = 0, .tested = TEST_UNTESTED, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {ST_ID, ST_M45PE40} } }, .probe_timing = TIMING_ZERO, .block_erasers = { { @@ -7806,12 +7359,11 @@ .vendor = "Micron/Numonyx/ST", .name = "M45PE80", .bustype = BUS_SPI, - .manufacture_id = ST_ID, - .model_id = ST_M45PE80, .total_size = 1024, .page_size = 256, + .feature_bits = 0, .tested = TEST_UNTESTED, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {ST_ID, ST_M45PE80} } }, .probe_timing = TIMING_ZERO, .block_erasers = { { @@ -7833,12 +7385,11 @@ .vendor = "Micron/Numonyx/ST", .name = "M45PE16", .bustype = BUS_SPI, - .manufacture_id = ST_ID, - .model_id = ST_M45PE16, .total_size = 2048, .page_size = 256, + .feature_bits = 0, .tested = TEST_UNTESTED, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {ST_ID, ST_M45PE16} } }, .probe_timing = TIMING_ZERO, .block_erasers = { { @@ -7860,15 +7411,13 @@ .vendor = "Micron/Numonyx/ST", .name = "N25Q016", .bustype = BUS_SPI, - .manufacture_id = ST_ID, - .model_id = ST_N25Q016__1E, .total_size = 2048, .page_size = 256, /* supports SFDP */ /* OTP: 64B total; read 0x4B, write 0x42 */ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP, .tested = TEST_UNTESTED, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {ST_ID, ST_N25Q016__1E} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -7897,15 +7446,13 @@ .vendor = "Micron/Numonyx/ST", .name = "N25Q032..1E", .bustype = BUS_SPI, - .manufacture_id = ST_ID, - .model_id = ST_N25Q032__1E, .total_size = 4096, .page_size = 256, /* supports SFDP */ /* OTP: 64B total; read 0x4B, write 0x42 */ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP, .tested = TEST_UNTESTED, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {ST_ID, ST_N25Q032__1E} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -7931,15 +7478,13 @@ .vendor = "Micron/Numonyx/ST", .name = "N25Q032..3E", .bustype = BUS_SPI, - .manufacture_id = ST_ID, - .model_id = ST_N25Q032__3E, .total_size = 4096, .page_size = 256, /* supports SFDP */ /* OTP: 64B total; read 0x4B, write 0x42 */ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP, .tested = TEST_OK_PREW, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {ST_ID, ST_N25Q032__3E} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -7965,15 +7510,13 @@ .vendor = "Micron/Numonyx/ST", .name = "N25Q064..1E", /* ..1E = 1.8V, uniform 64KB/4KB blocks/sectors */ .bustype = BUS_SPI, - .manufacture_id = ST_ID, - .model_id = ST_N25Q064__1E, .total_size = 8192, .page_size = 256, /* supports SFDP */ /* OTP: 64B total; read 0x4B, write 0x42 */ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP, .tested = TEST_OK_PREW, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {ST_ID, ST_N25Q064__1E} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -7999,15 +7542,13 @@ .vendor = "Micron/Numonyx/ST", .name = "N25Q064..3E", /* ..3E = 3V, uniform 64KB/4KB blocks/sectors */ .bustype = BUS_SPI, - .manufacture_id = ST_ID, - .model_id = ST_N25Q064__3E, .total_size = 8192, .page_size = 256, /* supports SFDP */ /* OTP: 64B total; read 0x4B, write 0x42 */ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP, .tested = TEST_OK_PREW, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {ST_ID, ST_N25Q064__3E} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -8033,15 +7574,13 @@ .vendor = "Micron/Numonyx/ST", .name = "N25Q128..1E", /* ..1E = 1.8V, uniform 64KB/4KB blocks/sectors */ .bustype = BUS_SPI, - .manufacture_id = ST_ID, - .model_id = ST_N25Q128__1E, .total_size = 16384, .page_size = 256, /* supports SFDP */ /* OTP: 64B total; read 0x4B, write 0x42 */ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP, .tested = TEST_UNTESTED, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {ST_ID, ST_N25Q128__1E} } }, .probe_timing = TIMING_ZERO, .block_erasers = { { @@ -8066,15 +7605,13 @@ .vendor = "Micron/Numonyx/ST", .name = "N25Q128..3E", /* ..3E = 3V, uniform 64KB/4KB blocks/sectors */ .bustype = BUS_SPI, - .manufacture_id = ST_ID, - .model_id = ST_N25Q128__3E, .total_size = 16384, .page_size = 256, /* supports SFDP */ /* OTP: 64B total; read 0x4B, write 0x42 */ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP, .tested = TEST_OK_PREW, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {ST_ID, ST_N25Q128__3E} } }, .probe_timing = TIMING_ZERO, .block_erasers = { { @@ -8099,13 +7636,11 @@ .vendor = "MoselVitelic", .name = "V29C51000B", .bustype = BUS_PARALLEL, - .manufacture_id = SYNCMOS_MVC_ID, - .model_id = MVC_V29C51000B, .total_size = 64, .page_size = 512, .feature_bits = FEATURE_EITHER_RESET, .tested = TEST_UNTESTED, - .probe = probe_jedec, + {probe_jedec, {2, {SYNCMOS_MVC_ID, MVC_V29C51000B} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -8126,13 +7661,11 @@ .vendor = "MoselVitelic", .name = "V29C51000T", .bustype = BUS_PARALLEL, - .manufacture_id = SYNCMOS_MVC_ID, - .model_id = MVC_V29C51000T, .total_size = 64, .page_size = 512, .feature_bits = FEATURE_EITHER_RESET, .tested = TEST_UNTESTED, - .probe = probe_jedec, + {probe_jedec, {2, {SYNCMOS_MVC_ID, MVC_V29C51000T} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -8153,13 +7686,11 @@ .vendor = "MoselVitelic", .name = "V29C51400B", .bustype = BUS_PARALLEL, - .manufacture_id = SYNCMOS_MVC_ID, - .model_id = MVC_V29C51400B, .total_size = 512, .page_size = 1024, .feature_bits = FEATURE_EITHER_RESET, .tested = TEST_UNTESTED, - .probe = probe_jedec, + {probe_jedec, {2, {SYNCMOS_MVC_ID, MVC_V29C51400B} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -8180,13 +7711,11 @@ .vendor = "MoselVitelic", .name = "V29C51400T", .bustype = BUS_PARALLEL, - .manufacture_id = SYNCMOS_MVC_ID, - .model_id = MVC_V29C51400T, .total_size = 512, .page_size = 1024, .feature_bits = FEATURE_EITHER_RESET, .tested = TEST_UNTESTED, - .probe = probe_jedec, + {probe_jedec, {2, {SYNCMOS_MVC_ID, MVC_V29C51400T} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -8207,13 +7736,11 @@ .vendor = "MoselVitelic", .name = "V29LC51000", .bustype = BUS_PARALLEL, - .manufacture_id = SYNCMOS_MVC_ID, - .model_id = MVC_V29LC51000, .total_size = 64, .page_size = 512, .feature_bits = FEATURE_EITHER_RESET, .tested = TEST_UNTESTED, - .probe = probe_jedec, + {probe_jedec, {2, {SYNCMOS_MVC_ID, MVC_V29LC51000} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -8234,13 +7761,11 @@ .vendor = "MoselVitelic", .name = "V29LC51001", .bustype = BUS_PARALLEL, - .manufacture_id = SYNCMOS_MVC_ID, - .model_id = MVC_V29LC51001, .total_size = 128, .page_size = 512, .feature_bits = FEATURE_EITHER_RESET, .tested = TEST_UNTESTED, - .probe = probe_jedec, + {probe_jedec, {2, {SYNCMOS_MVC_ID, MVC_V29LC51001} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -8261,13 +7786,11 @@ .vendor = "MoselVitelic", .name = "V29LC51002", .bustype = BUS_PARALLEL, - .manufacture_id = SYNCMOS_MVC_ID, - .model_id = MVC_V29LC51002, .total_size = 256, .page_size = 512, .feature_bits = FEATURE_EITHER_RESET, .tested = TEST_UNTESTED, - .probe = probe_jedec, + {probe_jedec, {2, {SYNCMOS_MVC_ID, MVC_V29LC51002} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -8288,13 +7811,11 @@ .vendor = "Nantronics", .name = "N25S10", .bustype = BUS_SPI, - .manufacture_id = NANTRONICS_ID_NOPREFIX, - .model_id = NANTRONICS_N25S10, .total_size = 128, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_UNTESTED, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {NANTRONICS_ID_NOPREFIX, NANTRONICS_N25S10} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -8329,13 +7850,11 @@ .vendor = "Nantronics", .name = "N25S20", .bustype = BUS_SPI, - .manufacture_id = NANTRONICS_ID_NOPREFIX, - .model_id = NANTRONICS_N25S20, .total_size = 256, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_UNTESTED, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {NANTRONICS_ID_NOPREFIX, NANTRONICS_N25S20} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -8370,13 +7889,11 @@ .vendor = "Nantronics", .name = "N25S40", .bustype = BUS_SPI, - .manufacture_id = NANTRONICS_ID_NOPREFIX, - .model_id = NANTRONICS_N25S40, .total_size = 512, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_UNTESTED, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {NANTRONICS_ID_NOPREFIX, NANTRONICS_N25S40} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -8411,13 +7928,11 @@ .vendor = "Nantronics", .name = "N25S80", .bustype = BUS_SPI, - .manufacture_id = NANTRONICS_ID_NOPREFIX, - .model_id = NANTRONICS_N25S80, .total_size = 1024, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_UNTESTED, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {NANTRONICS_ID_NOPREFIX, NANTRONICS_N25S80} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -8449,13 +7964,11 @@ .vendor = "Nantronics", .name = "N25S16", .bustype = BUS_SPI, - .manufacture_id = NANTRONICS_ID_NOPREFIX, - .model_id = NANTRONICS_N25S16, .total_size = 2048, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_UNTESTED, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {NANTRONICS_ID_NOPREFIX, NANTRONICS_N25S16} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -8484,13 +7997,11 @@ .vendor = "PMC", .name = "Pm25LD256C", .bustype = BUS_SPI, - .manufacture_id = PMC_ID, - .model_id = PMC_PM25LD256C, .total_size = 32, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_UNTESTED, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {PMC_ID, PMC_PM25LD256C} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -8521,13 +8032,11 @@ .vendor = "PMC", .name = "Pm25LD512(C)", .bustype = BUS_SPI, - .manufacture_id = PMC_ID, - .model_id = PMC_PM25LD512, .total_size = 64, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_OK_PREW, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {PMC_ID, PMC_PM25LD512} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -8559,13 +8068,11 @@ .vendor = "PMC", .name = "Pm25LD010(C)", .bustype = BUS_SPI, - .manufacture_id = PMC_ID, - .model_id = PMC_PM25LD010, .total_size = 128, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_OK_PREW, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {PMC_ID, PMC_PM25LD010} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -8597,13 +8104,11 @@ .vendor = "PMC", .name = "Pm25LD020(C)", .bustype = BUS_SPI, - .manufacture_id = PMC_ID, - .model_id = PMC_PM25LD020, .total_size = 256, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_UNTESTED, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {PMC_ID, PMC_PM25LD020} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -8635,13 +8140,11 @@ .vendor = "PMC", .name = "Pm25LD040(C)", .bustype = BUS_SPI, - .manufacture_id = PMC_ID, - .model_id = PMC_PM25LV040, .total_size = 512, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_UNTESTED, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {PMC_ID, PMC_PM25LV040} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -8673,13 +8176,11 @@ .vendor = "PMC", .name = "Pm25LV512(A)", .bustype = BUS_SPI, - .manufacture_id = PMC_ID_NOPREFIX, - .model_id = PMC_PM25LV512, .total_size = 64, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_UNTESTED, - .probe = probe_spi_res2, /* The continuation code is transferred as the 3rd byte m( */ + {probe_spi_res2, {2, {PMC_ID_NOPREFIX, PMC_PM25LV512} } }, /* The continuation code is transferred as the 3rd byte m( */ .probe_timing = TIMING_ZERO, .block_erasers = { @@ -8705,13 +8206,11 @@ .vendor = "PMC", .name = "Pm25LV010", .bustype = BUS_SPI, - .manufacture_id = PMC_ID_NOPREFIX, - .model_id = PMC_PM25LV010, .total_size = 128, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_OK_PREW, - .probe = probe_spi_res2, /* The continuation code is transferred as the 3rd byte m( */ + {probe_spi_res2, {2, {PMC_ID_NOPREFIX, PMC_PM25LV010} } }, /* The continuation code is transferred as the 3rd byte m( */ .probe_timing = TIMING_ZERO, .block_erasers = { @@ -8737,13 +8236,11 @@ .vendor = "PMC", .name = "Pm25LV010A", .bustype = BUS_SPI, - .manufacture_id = PMC_ID, - .model_id = PMC_PM25LV010, .total_size = 128, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_OK_PREW, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {PMC_ID, PMC_PM25LV010} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -8769,13 +8266,11 @@ .vendor = "PMC", .name = "Pm25LV020", .bustype = BUS_SPI, - .manufacture_id = PMC_ID, - .model_id = PMC_PM25LV020, .total_size = 256, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_UNTESTED, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {PMC_ID, PMC_PM25LV020} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -8801,13 +8296,11 @@ .vendor = "PMC", .name = "Pm25LV040", .bustype = BUS_SPI, - .manufacture_id = PMC_ID, - .model_id = PMC_PM25LV040, .total_size = 512, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_OK_PREW, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {PMC_ID, PMC_PM25LV040} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -8833,13 +8326,11 @@ .vendor = "PMC", .name = "Pm25LV080B", .bustype = BUS_SPI, - .manufacture_id = PMC_ID, - .model_id = PMC_PM25LV080B, .total_size = 1024, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_UNTESTED, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {PMC_ID, PMC_PM25LV080B} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -8871,13 +8362,11 @@ .vendor = "PMC", .name = "Pm25LV016B", .bustype = BUS_SPI, - .manufacture_id = PMC_ID, - .model_id = PMC_PM25LV016B, .total_size = 2048, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_UNTESTED, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {PMC_ID, PMC_PM25LV016B} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -8909,13 +8398,11 @@ .vendor = "PMC", .name = "Pm29F002T", .bustype = BUS_PARALLEL, - .manufacture_id = PMC_ID_NOPREFIX, - .model_id = PMC_PM29F002T, .total_size = 256, .page_size = 8 * 1024, .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET, .tested = TEST_OK_PREW, - .probe = probe_jedec, + {probe_jedec, {2, {PMC_ID_NOPREFIX, PMC_PM29F002T} } }, .probe_timing = TIMING_FIXME, .block_erasers = { @@ -8941,13 +8428,11 @@ .vendor = "PMC", .name = "Pm29F002B", .bustype = BUS_PARALLEL, - .manufacture_id = PMC_ID_NOPREFIX, - .model_id = PMC_PM29F002B, .total_size = 256, .page_size = 8 * 1024, .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET, .tested = TEST_UNTESTED, - .probe = probe_jedec, + {probe_jedec, {2, {PMC_ID_NOPREFIX, PMC_PM29F002B} } }, .probe_timing = TIMING_FIXME, .block_erasers = { @@ -8973,13 +8458,11 @@ .vendor = "PMC", .name = "Pm39LV010", .bustype = BUS_PARALLEL, - .manufacture_id = PMC_ID_NOPREFIX, - .model_id = PMC_PM39F010, /* Pm39LV010 and Pm39F010 have identical IDs but different voltage */ .total_size = 128, .page_size = 4096, .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET, .tested = TEST_OK_PREW, - .probe = probe_jedec, + {probe_jedec, {2, {PMC_ID_NOPREFIX, PMC_PM39F010 /* Pm39LV010 and Pm39F010 have identical IDs but different voltage */} } }, .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */ .block_erasers = { @@ -9003,13 +8486,11 @@ .vendor = "PMC", .name = "Pm39LV020", .bustype = BUS_PARALLEL, - .manufacture_id = PMC_ID_NOPREFIX, - .model_id = PMC_PM39LV020, .total_size = 256, .page_size = 4096, .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET, .tested = TEST_UNTESTED, - .probe = probe_jedec, + {probe_jedec, {2, {PMC_ID_NOPREFIX, PMC_PM39LV020} } }, .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */ .block_erasers = { @@ -9033,13 +8514,11 @@ .vendor = "PMC", .name = "Pm39LV040", .bustype = BUS_PARALLEL, - .manufacture_id = PMC_ID_NOPREFIX, - .model_id = PMC_PM39LV040, .total_size = 512, .page_size = 4096, .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET, .tested = TEST_OK_PR, - .probe = probe_jedec, + {probe_jedec, {2, {PMC_ID_NOPREFIX, PMC_PM39LV040} } }, .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */ .block_erasers = { @@ -9063,13 +8542,11 @@ .vendor = "PMC", .name = "Pm39LV512", .bustype = BUS_PARALLEL, - .manufacture_id = PMC_ID_NOPREFIX, - .model_id = PMC_PM39LV512, .total_size = 64, .page_size = 4096, .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET, .tested = TEST_OK_PREW, - .probe = probe_jedec, + {probe_jedec, {2, {PMC_ID_NOPREFIX, PMC_PM39LV512} } }, .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */ .block_erasers = { @@ -9093,13 +8570,11 @@ .vendor = "PMC", .name = "Pm49FL002", .bustype = BUS_LPC | BUS_FWH, /* A/A Mux */ - .manufacture_id = PMC_ID_NOPREFIX, - .model_id = PMC_PM49FL002, .total_size = 256, .page_size = 16 * 1024, .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET, .tested = TEST_OK_PREW, - .probe = probe_jedec, + {probe_jedec, {2, {PMC_ID_NOPREFIX, PMC_PM49FL002} } }, .probe_timing = TIMING_ZERO, /* routine is wrapper to probe_jedec (pm49fl00x.c) */ .block_erasers = { @@ -9124,13 +8599,11 @@ .vendor = "PMC", .name = "Pm49FL004", .bustype = BUS_LPC | BUS_FWH, /* A/A Mux */ - .manufacture_id = PMC_ID_NOPREFIX, - .model_id = PMC_PM49FL004, .total_size = 512, .page_size = 64 * 1024, .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET, .tested = TEST_OK_PREW, - .probe = probe_jedec, + {probe_jedec, {2, {PMC_ID_NOPREFIX, PMC_PM49FL004} } }, .probe_timing = TIMING_ZERO, /* routine is wrapper to probe_jedec (pm49fl00x.c) */ .block_erasers = { @@ -9155,13 +8628,11 @@ .vendor = "Sanyo", .name = "LE25FW106", .bustype = BUS_SPI, - .manufacture_id = SANYO_ID, - .model_id = SANYO_LE25FW106, .total_size = 128, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_OK_PREW, - .probe = probe_spi_res2, + {probe_spi_res2, {2, {SANYO_ID, SANYO_LE25FW106} } }, .probe_timing = TIMING_ZERO, .block_erasers = { { @@ -9186,13 +8657,11 @@ .vendor = "Sanyo", .name = "LE25FW406A", .bustype = BUS_SPI, - .manufacture_id = SANYO_ID, - .model_id = SANYO_LE25FW406A, .total_size = 512, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_OK_PREW, - .probe = probe_spi_res2, + {probe_spi_res2, {2, {SANYO_ID, SANYO_LE25FW406A} } }, .probe_timing = TIMING_ZERO, .block_erasers = { { @@ -9217,13 +8686,11 @@ .vendor = "Sanyo", .name = "LE25FU406B", .bustype = BUS_SPI, - .manufacture_id = SANYO_ID, - .model_id = SANYO_LE25FU406B, .total_size = 512, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_OK_PREW, - .probe = probe_spi_res2, + {probe_spi_res2, {2, {SANYO_ID, SANYO_LE25FU406B} } }, .probe_timing = TIMING_ZERO, .block_erasers = { { @@ -9248,12 +8715,11 @@ .vendor = "Sanyo", .name = "LE25FW203A", .bustype = BUS_SPI, - .manufacture_id = SANYO_ID, - .model_id = SANYO_LE25FW203A, .total_size = 256, .page_size = 256, + .feature_bits = 0, .tested = TEST_UNTESTED, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {SANYO_ID, SANYO_LE25FW203A} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -9279,12 +8745,11 @@ .vendor = "Sanyo", .name = "LE25FW403A", .bustype = BUS_SPI, - .manufacture_id = SANYO_ID, - .model_id = SANYO_LE25FW403A, .total_size = 512, .page_size = 256, + .feature_bits = 0, .tested = TEST_UNTESTED, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {SANYO_ID, SANYO_LE25FW403A} } }, .probe_timing = TIMING_ZERO, .block_erasers = { { @@ -9309,13 +8774,11 @@ .vendor = "Sanyo", .name = "LE25FW418A", .bustype = BUS_SPI, - .manufacture_id = SANYO_ID, - .model_id = SANYO_LE25FW418A, .total_size = 512, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_UNTESTED, - .probe = probe_spi_res2, + {probe_spi_res2, {2, {SANYO_ID, SANYO_LE25FW418A} } }, .probe_timing = TIMING_ZERO, .block_erasers = { { @@ -9340,13 +8803,11 @@ .vendor = "Sanyo", .name = "LE25FW806", .bustype = BUS_SPI, - .manufacture_id = SANYO_ID, - .model_id = SANYO_LE25FW806, .total_size = 1024, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_UNTESTED, - .probe = probe_spi_res2, + {probe_spi_res2, {2, {SANYO_ID, SANYO_LE25FW806} } }, .probe_timing = TIMING_ZERO, .block_erasers = { { @@ -9374,13 +8835,11 @@ .vendor = "Sanyo", .name = "LE25FW808", .bustype = BUS_SPI, - .manufacture_id = SANYO_ID, - .model_id = SANYO_LE25FW808, .total_size = 1024, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_UNTESTED, - .probe = probe_spi_res2, + {probe_spi_res2, {2, {SANYO_ID, SANYO_LE25FW808} } }, .probe_timing = TIMING_ZERO, .block_erasers = { { @@ -9405,12 +8864,11 @@ .vendor = "Sharp", .name = "LH28F008BJT-BTLZ1", .bustype = BUS_PARALLEL, - .manufacture_id = SHARP_ID, - .model_id = SHARP_LH28F008BJ__PB, .total_size = 1024, .page_size = 64 * 1024, + .feature_bits = 0, .tested = TEST_OK_PREW, - .probe = probe_82802ab, + {probe_82802ab, {2, {SHARP_ID, SHARP_LH28F008BJ__PB} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -9435,13 +8893,11 @@ .vendor = "Sharp", .name = "LHF00L04", .bustype = BUS_FWH, /* A/A Mux */ - .manufacture_id = SHARP_ID, - .model_id = SHARP_LHF00L04, .total_size = 1024, .page_size = 64 * 1024, .feature_bits = FEATURE_EITHER_RESET | FEATURE_REGISTERMAP, .tested = TEST_UNTESTED, - .probe = probe_82802ab, + {probe_82802ab, {2, {SHARP_ID, SHARP_LHF00L04} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -9468,13 +8924,11 @@ .vendor = "Spansion", .name = "S25FL004A", .bustype = BUS_SPI, - .manufacture_id = SPANSION_ID, - .model_id = SPANSION_S25FL004A, .total_size = 512, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_UNTESTED, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {SPANSION_ID, SPANSION_S25FL004A} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -9497,13 +8951,11 @@ .vendor = "Spansion", .name = "S25FL008A", .bustype = BUS_SPI, - .manufacture_id = SPANSION_ID, - .model_id = SPANSION_S25FL008A, .total_size = 1024, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_OK_PRE, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {SPANSION_ID, SPANSION_S25FL008A} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -9526,13 +8978,11 @@ .vendor = "Spansion", .name = "S25FL016A", .bustype = BUS_SPI, - .manufacture_id = SPANSION_ID, - .model_id = SPANSION_S25FL016A, .total_size = 2048, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_OK_PR, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {SPANSION_ID, SPANSION_S25FL016A} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -9555,13 +9005,11 @@ .vendor = "Spansion", .name = "S25FL032A/P", .bustype = BUS_SPI, - .manufacture_id = SPANSION_ID, - .model_id = SPANSION_S25FL032A, .total_size = 4096, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_OK_PREW, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {SPANSION_ID, SPANSION_S25FL032A} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -9584,13 +9032,11 @@ .vendor = "Spansion", .name = "S25FL064A/P", .bustype = BUS_SPI, - .manufacture_id = SPANSION_ID, - .model_id = SPANSION_S25FL064A, .total_size = 8192, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_OK_PREW, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {SPANSION_ID, SPANSION_S25FL064A} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -9613,13 +9059,11 @@ .vendor = "Spansion", .name = "S25FL204K", .bustype = BUS_SPI, - .manufacture_id = SPANSION_ID, - .model_id = SPANSION_S25FL204, .total_size = 512, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_UNTESTED, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {SPANSION_ID, SPANSION_S25FL204} } }, .probe_timing = TIMING_ZERO, .block_erasers = { { @@ -9647,13 +9091,11 @@ .vendor = "Spansion", .name = "S25FL208K", .bustype = BUS_SPI, - .manufacture_id = SPANSION_ID, - .model_id = SPANSION_S25FL208, .total_size = 1024, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_UNTESTED, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {SPANSION_ID, SPANSION_S25FL208} } }, .probe_timing = TIMING_ZERO, .block_erasers = { { @@ -9681,14 +9123,12 @@ .vendor = "Spansion", .name = "S25FL116K/S25FL216K", .bustype = BUS_SPI, - .manufacture_id = SPANSION_ID, - .model_id = SPANSION_S25FL216, .total_size = 2048, .page_size = 256, /* OTP: 1024B total, 256B reserved; read 0x48; write 0x42, erase 0x44 (S25FL116K only) */ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP, .tested = TEST_UNTESTED, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {SPANSION_ID, SPANSION_S25FL216} } }, .probe_timing = TIMING_ZERO, .block_erasers = { { @@ -9716,14 +9156,12 @@ .vendor = "Spansion", .name = "S25FL132K", .bustype = BUS_SPI, - .manufacture_id = SPANSION_ID, - .model_id = SPANSION_S25FL132K, .total_size = 4096, .page_size = 256, /* OTP: 768B total, 256B reserved; read 0x48; write 0x42, erase 0x44 */ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP, .tested = TEST_UNTESTED, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {SPANSION_ID, SPANSION_S25FL132K} } }, .probe_timing = TIMING_ZERO, .block_erasers = { { @@ -9751,14 +9189,12 @@ .vendor = "Spansion", .name = "S25FL164K", .bustype = BUS_SPI, - .manufacture_id = SPANSION_ID, - .model_id = SPANSION_S25FL164K, .total_size = 8192, .page_size = 256, /* OTP: 1024B total, 256B reserved; read 0x48; write 0x42, erase 0x44 */ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP, .tested = TEST_OK_PREW, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {SPANSION_ID, SPANSION_S25FL164K} } }, .probe_timing = TIMING_ZERO, .block_erasers = { { @@ -9786,15 +9222,13 @@ .vendor = "Spansion", .name = "S25FL128S......0", /* uniform 256kB sectors */ .bustype = BUS_SPI, - .manufacture_id = SPANSION_ID, - .model_id = SPANSION_S25FL128, .total_size = 16384, .page_size = 256, /* supports 4B addressing */ /* OTP: 1024B total, 32B reserved; read 0x4B; write 0x42 */ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP, .tested = TEST_UNTESTED, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {SPANSION_ID, SPANSION_S25FL128} } }, .probe_timing = TIMING_ZERO, .block_erasers = { { @@ -9822,13 +9256,11 @@ .vendor = "SST", .name = "SST25LF020A", .bustype = BUS_SPI, - .manufacture_id = SST_ID, - .model_id = SST_SST25VF020_REMS, .total_size = 256, .page_size = 256, .feature_bits = FEATURE_WRSR_EWSR, .tested = TEST_OK_PREW, - .probe = probe_spi_rems, + {probe_spi_rems, {2, {SST_ID, SST_SST25VF020_REMS} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -9854,13 +9286,11 @@ .vendor = "SST", .name = "SST25LF040A", .bustype = BUS_SPI, - .manufacture_id = SST_ID, - .model_id = SST_SST25VF040_REMS, .total_size = 512, .page_size = 256, .feature_bits = FEATURE_WRSR_EWSR, .tested = TEST_OK_PREW, - .probe = probe_spi_res2, + {probe_spi_res2, {2, {SST_ID, SST_SST25VF040_REMS} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -9886,13 +9316,11 @@ .vendor = "SST", .name = "SST25LF080(A)", .bustype = BUS_SPI, - .manufacture_id = SST_ID, - .model_id = SST_SST25VF080_REMS, .total_size = 1024, .page_size = 256, .feature_bits = FEATURE_WRSR_EITHER, .tested = TEST_UNTESTED, - .probe = probe_spi_res2, + {probe_spi_res2, {2, {SST_ID, SST_SST25VF080_REMS} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -9918,13 +9346,11 @@ .vendor = "SST", .name = "SST25VF512A", .bustype = BUS_SPI, - .manufacture_id = SST_ID, - .model_id = SST_SST25VF512A_REMS, .total_size = 64, .page_size = 256, .feature_bits = FEATURE_WRSR_EWSR, .tested = TEST_OK_PREW, - .probe = probe_spi_rems, + {probe_spi_rems, {2, {SST_ID, SST_SST25VF512A_REMS} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -9956,13 +9382,11 @@ .vendor = "SST", .name = "SST25VF010", .bustype = BUS_SPI, - .manufacture_id = SST_ID, - .model_id = SST_SST25VF010_REMS, .total_size = 128, .page_size = 256, .feature_bits = FEATURE_WRSR_EWSR, .tested = TEST_OK_PREW, - .probe = probe_spi_rems, + {probe_spi_rems, {2, {SST_ID, SST_SST25VF010_REMS} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -9994,13 +9418,11 @@ .vendor = "SST", .name = "SST25VF020", .bustype = BUS_SPI, - .manufacture_id = SST_ID, - .model_id = SST_SST25VF020_REMS, .total_size = 256, .page_size = 256, .feature_bits = FEATURE_WRSR_EWSR, .tested = TEST_UNTESTED, - .probe = probe_spi_rems, + {probe_spi_rems, {2, {SST_ID, SST_SST25VF020_REMS} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -10026,13 +9448,11 @@ .vendor = "SST", .name = "SST25VF020B", .bustype = BUS_SPI, - .manufacture_id = SST_ID, - .model_id = SST_SST25VF020B, .total_size = 256, .page_size = 256, .feature_bits = FEATURE_WRSR_EWSR, .tested = TEST_OK_PREW, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {SST_ID, SST_SST25VF020B} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -10064,13 +9484,11 @@ .vendor = "SST", .name = "SST25VF040", .bustype = BUS_SPI, - .manufacture_id = SST_ID, - .model_id = SST_SST25VF040_REMS, .total_size = 512, .page_size = 256, .feature_bits = FEATURE_WRSR_EWSR, .tested = TEST_OK_PR, - .probe = probe_spi_rems, + {probe_spi_rems, {2, {SST_ID, SST_SST25VF040_REMS} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -10096,13 +9514,11 @@ .vendor = "SST", .name = "SST25VF040B", .bustype = BUS_SPI, - .manufacture_id = SST_ID, - .model_id = SST_SST25VF040B, .total_size = 512, .page_size = 256, .feature_bits = FEATURE_WRSR_EWSR, .tested = TEST_OK_PREW, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {SST_ID, SST_SST25VF040B} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -10134,13 +9550,11 @@ .vendor = "SST", .name = "SST25VF040B.REMS", .bustype = BUS_SPI, - .manufacture_id = SST_ID, - .model_id = SST_SST25VF040B_REMS, .total_size = 512, .page_size = 256, .feature_bits = FEATURE_WRSR_EWSR, .tested = TEST_OK_PREW, - .probe = probe_spi_rems, + {probe_spi_rems, {2, {SST_ID, SST_SST25VF040B_REMS} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -10172,13 +9586,11 @@ .vendor = "SST", .name = "SST25VF080B", .bustype = BUS_SPI, - .manufacture_id = SST_ID, - .model_id = SST_SST25VF080B, .total_size = 1024, .page_size = 256, .feature_bits = FEATURE_WRSR_EWSR, .tested = TEST_OK_PREW, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {SST_ID, SST_SST25VF080B} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -10210,13 +9622,11 @@ .vendor = "SST", .name = "SST25VF016B", .bustype = BUS_SPI, - .manufacture_id = SST_ID, - .model_id = SST_SST25VF016B, .total_size = 2048, .page_size = 256, .feature_bits = FEATURE_WRSR_EITHER, .tested = TEST_OK_PREW, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {SST_ID, SST_SST25VF016B} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -10248,13 +9658,11 @@ .vendor = "SST", .name = "SST25VF032B", .bustype = BUS_SPI, - .manufacture_id = SST_ID, - .model_id = SST_SST25VF032B, .total_size = 4096, .page_size = 256, .feature_bits = FEATURE_WRSR_EWSR, .tested = TEST_OK_PREW, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {SST_ID, SST_SST25VF032B} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -10286,13 +9694,11 @@ .vendor = "SST", .name = "SST25VF064C", .bustype = BUS_SPI, - .manufacture_id = SST_ID, - .model_id = SST_SST25VF064C, .total_size = 8192, .page_size = 256, .feature_bits = FEATURE_WRSR_EWSR, .tested = TEST_OK_PREW, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {SST_ID, SST_SST25VF064C} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -10324,13 +9730,11 @@ .vendor = "SST", .name = "SST25WF512", .bustype = BUS_SPI, - .manufacture_id = SST_ID, - .model_id = SST_SST25WF512, .total_size = 64, .page_size = 256, .feature_bits = FEATURE_WRSR_EITHER, .tested = TEST_UNTESTED, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {SST_ID, SST_SST25WF512} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -10359,13 +9763,11 @@ .vendor = "SST", .name = "SST25WF010", .bustype = BUS_SPI, - .manufacture_id = SST_ID, - .model_id = SST_SST25WF010, .total_size = 128, .page_size = 256, .feature_bits = FEATURE_WRSR_EITHER, .tested = TEST_UNTESTED, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {SST_ID, SST_SST25WF010} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -10394,13 +9796,11 @@ .vendor = "SST", .name = "SST25WF020", .bustype = BUS_SPI, - .manufacture_id = SST_ID, - .model_id = SST_SST25WF020, .total_size = 256, .page_size = 256, .feature_bits = FEATURE_WRSR_EITHER, .tested = TEST_UNTESTED, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {SST_ID, SST_SST25WF020} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -10432,13 +9832,11 @@ .vendor = "SST", .name = "SST25WF040", .bustype = BUS_SPI, - .manufacture_id = SST_ID, - .model_id = SST_SST25WF040, .total_size = 512, .page_size = 256, .feature_bits = FEATURE_WRSR_EITHER, .tested = TEST_UNTESTED, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {SST_ID, SST_SST25WF040} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -10470,13 +9868,11 @@ .vendor = "SST", .name = "SST25WF080", .bustype = BUS_SPI, - .manufacture_id = SST_ID, - .model_id = SST_SST25WF080, .total_size = 1024, .page_size = 256, .feature_bits = FEATURE_WRSR_EITHER, .tested = TEST_OK_PREW, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {SST_ID, SST_SST25WF080} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -10508,13 +9904,11 @@ .vendor = "SST", .name = "SST28SF040A", .bustype = BUS_PARALLEL, - .manufacture_id = SST_ID, - .model_id = SST_SST28SF040, .total_size = 512, .page_size = 256, .feature_bits = 0, .tested = TEST_UNTESTED, - .probe = probe_82802ab, + {probe_82802ab, {2, {SST_ID, SST_SST28SF040} } }, .probe_timing = TIMING_IGNORED, /* routine doesn't use probe_timing (sst28sf040.c) */ .block_erasers = { @@ -10536,13 +9930,11 @@ .vendor = "SST", .name = "SST29EE010", .bustype = BUS_PARALLEL, - .manufacture_id = SST_ID, - .model_id = SST_SST29EE010, .total_size = 128, .page_size = 128, .feature_bits = FEATURE_LONG_RESET, .tested = TEST_OK_PR, - .probe = probe_jedec, + {probe_jedec, {2, {SST_ID, SST_SST29EE010} } }, .probe_timing = 10, .block_erasers = { @@ -10560,13 +9952,11 @@ .vendor = "SST", .name = "SST29LE010", .bustype = BUS_PARALLEL, - .manufacture_id = SST_ID, - .model_id = SST_SST29LE010, .total_size = 128, .page_size = 128, .feature_bits = FEATURE_LONG_RESET, .tested = TEST_UNTESTED, - .probe = probe_jedec, + {probe_jedec, {2, {SST_ID, SST_SST29LE010} } }, .probe_timing = 10, .block_erasers = { @@ -10584,13 +9974,11 @@ .vendor = "SST", .name = "SST29EE020A", .bustype = BUS_PARALLEL, - .manufacture_id = SST_ID, - .model_id = SST_SST29EE020A, .total_size = 256, .page_size = 128, .feature_bits = FEATURE_LONG_RESET, .tested = TEST_OK_PRE, - .probe = probe_jedec, + {probe_jedec, {2, {SST_ID, SST_SST29EE020A} } }, .probe_timing = 10, .block_erasers = { @@ -10608,13 +9996,11 @@ .vendor = "SST", .name = "SST29LE020", .bustype = BUS_PARALLEL, - .manufacture_id = SST_ID, - .model_id = SST_SST29LE020, .total_size = 256, .page_size = 128, .feature_bits = FEATURE_LONG_RESET, .tested = TEST_OK_PRE, - .probe = probe_jedec, + {probe_jedec, {2, {SST_ID, SST_SST29LE020} } }, .probe_timing = 10, .block_erasers = { @@ -10632,13 +10018,11 @@ .vendor = "SST", .name = "SST39SF512", .bustype = BUS_PARALLEL, - .manufacture_id = SST_ID, - .model_id = SST_SST39SF512, .total_size = 64, .page_size = 4096, .feature_bits = FEATURE_EITHER_RESET, .tested = TEST_OK_PREW, - .probe = probe_jedec, + {probe_jedec, {2, {SST_ID, SST_SST39SF512} } }, .probe_timing = 1, /* 150 ns */ .block_erasers = { @@ -10659,13 +10043,11 @@ .vendor = "SST", .name = "SST39SF010A", .bustype = BUS_PARALLEL, - .manufacture_id = SST_ID, - .model_id = SST_SST39SF010, .total_size = 128, .page_size = 4096, .feature_bits = FEATURE_EITHER_RESET, .tested = TEST_OK_PREW, - .probe = probe_jedec, + {probe_jedec, {2, {SST_ID, SST_SST39SF010} } }, .probe_timing = 1, /* 150 ns */ .block_erasers = { @@ -10686,13 +10068,11 @@ .vendor = "SST", .name = "SST39SF020A", .bustype = BUS_PARALLEL, - .manufacture_id = SST_ID, - .model_id = SST_SST39SF020, .total_size = 256, .page_size = 4096, .feature_bits = FEATURE_EITHER_RESET, .tested = TEST_OK_PREW, - .probe = probe_jedec, + {probe_jedec, {2, {SST_ID, SST_SST39SF020} } }, .probe_timing = 1, /* 150 ns */ .block_erasers = { @@ -10713,13 +10093,11 @@ .vendor = "SST", .name = "SST39SF040", .bustype = BUS_PARALLEL, - .manufacture_id = SST_ID, - .model_id = SST_SST39SF040, .total_size = 512, .page_size = 4096, .feature_bits = FEATURE_EITHER_RESET, .tested = TEST_OK_PREW, - .probe = probe_jedec, + {probe_jedec, {2, {SST_ID, SST_SST39SF040} } }, .probe_timing = 1, /* 150 ns */ .block_erasers = { @@ -10740,13 +10118,11 @@ .vendor = "SST", .name = "SST39VF512", .bustype = BUS_PARALLEL, - .manufacture_id = SST_ID, - .model_id = SST_SST39VF512, .total_size = 64, .page_size = 4096, .feature_bits = FEATURE_EITHER_RESET, .tested = TEST_OK_PREW, - .probe = probe_jedec, + {probe_jedec, {2, {SST_ID, SST_SST39VF512} } }, .probe_timing = 1, /* 150 ns */ .block_erasers = { @@ -10767,13 +10143,11 @@ .vendor = "SST", .name = "SST39VF010", .bustype = BUS_PARALLEL, - .manufacture_id = SST_ID, - .model_id = SST_SST39VF010, .total_size = 128, .page_size = 4096, .feature_bits = FEATURE_EITHER_RESET, .tested = TEST_OK_PREW, - .probe = probe_jedec, + {probe_jedec, {2, {SST_ID, SST_SST39VF010} } }, .probe_timing = 1, /* 150 ns */ .block_erasers = { @@ -10794,13 +10168,11 @@ .vendor = "SST", .name = "SST39VF020", .bustype = BUS_PARALLEL, - .manufacture_id = SST_ID, - .model_id = SST_SST39VF020, .total_size = 256, .page_size = 4096, .feature_bits = FEATURE_EITHER_RESET, .tested = TEST_UNTESTED, - .probe = probe_jedec, + {probe_jedec, {2, {SST_ID, SST_SST39VF020} } }, .probe_timing = 1, /* 150 ns */ .block_erasers = { @@ -10821,13 +10193,11 @@ .vendor = "SST", .name = "SST39VF040", .bustype = BUS_PARALLEL, - .manufacture_id = SST_ID, - .model_id = SST_SST39VF040, .total_size = 512, .page_size = 4096, .feature_bits = FEATURE_EITHER_RESET, .tested = TEST_UNTESTED, - .probe = probe_jedec, + {probe_jedec, {2, {SST_ID, SST_SST39VF040} } }, .probe_timing = 1, /* 150 ns */ .block_erasers = { @@ -10848,13 +10218,11 @@ .vendor = "SST", .name = "SST39VF080", .bustype = BUS_PARALLEL, - .manufacture_id = SST_ID, - .model_id = SST_SST39VF080, .total_size = 1024, .page_size = 4096, .feature_bits = FEATURE_EITHER_RESET, .tested = TEST_UNTESTED, - .probe = probe_jedec, + {probe_jedec, {2, {SST_ID, SST_SST39VF080} } }, .probe_timing = 1, /* 150 ns */ .block_erasers = { @@ -10878,13 +10246,11 @@ .vendor = "SST", .name = "SST49LF002A/B", .bustype = BUS_FWH, /* A/A Mux */ - .manufacture_id = SST_ID, - .model_id = SST_SST49LF002A, .total_size = 256, .page_size = 16 * 1024, .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET, .tested = TEST_OK_PREW, - .probe = probe_jedec, + {probe_jedec, {2, {SST_ID, SST_SST49LF002A} } }, .probe_timing = 1, /* 150 ns */ .block_erasers = { @@ -10910,13 +10276,11 @@ .vendor = "SST", .name = "SST49LF003A/B", .bustype = BUS_FWH, /* A/A Mux */ - .manufacture_id = SST_ID, - .model_id = SST_SST49LF003A, .total_size = 384, .page_size = 64 * 1024, .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET, .tested = TEST_OK_PREW, - .probe = probe_jedec, + {probe_jedec, {2, {SST_ID, SST_SST49LF003A} } }, .probe_timing = 1, /* 150 ns */ .block_erasers = { @@ -10945,13 +10309,11 @@ .vendor = "SST", .name = "SST49LF004A/B", .bustype = BUS_FWH, /* A/A Mux */ - .manufacture_id = SST_ID, - .model_id = SST_SST49LF004A, .total_size = 512, .page_size = 64 * 1024, .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET, .tested = TEST_OK_PREW, - .probe = probe_jedec, + {probe_jedec, {2, {SST_ID, SST_SST49LF004A} } }, .probe_timing = 1, /* 150 ns */ .block_erasers = { @@ -10977,13 +10339,11 @@ .vendor = "SST", .name = "SST49LF004C", .bustype = BUS_FWH, - .manufacture_id = SST_ID, - .model_id = SST_SST49LF004C, .total_size = 512, .page_size = 4 * 1024, .feature_bits = FEATURE_REGISTERMAP, .tested = TEST_UNTESTED, - .probe = probe_82802ab, + {probe_82802ab, {2, {SST_ID, SST_SST49LF004C} } }, .probe_timing = TIMING_IGNORED, /* routine doesn't use probe_timing (sst49lfxxxc.c) */ .block_erasers = { @@ -11010,13 +10370,11 @@ .vendor = "SST", .name = "SST49LF008A", .bustype = BUS_FWH, /* A/A Mux */ - .manufacture_id = SST_ID, - .model_id = SST_SST49LF008A, .total_size = 1024, .page_size = 64 * 1024, .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET, .tested = TEST_OK_PREW, - .probe = probe_jedec, + {probe_jedec, {2, {SST_ID, SST_SST49LF008A} } }, .probe_timing = 1, /* 150 ns */ .block_erasers = { @@ -11042,13 +10400,11 @@ .vendor = "SST", .name = "SST49LF008C", .bustype = BUS_FWH, - .manufacture_id = SST_ID, - .model_id = SST_SST49LF008C, .total_size = 1024, .page_size = 4 * 1024, .feature_bits = FEATURE_REGISTERMAP, .tested = TEST_UNTESTED, - .probe = probe_82802ab, + {probe_82802ab, {2, {SST_ID, SST_SST49LF008C} } }, .probe_timing = TIMING_IGNORED, /* routine doesn't use probe_timing (sst49lfxxxc.c) */ .block_erasers = { @@ -11075,13 +10431,11 @@ .vendor = "SST", .name = "SST49LF016C", .bustype = BUS_FWH, - .manufacture_id = SST_ID, - .model_id = SST_SST49LF016C, .total_size = 2048, .page_size = 4 * 1024, .feature_bits = FEATURE_REGISTERMAP, .tested = TEST_OK_PREW, - .probe = probe_82802ab, + {probe_82802ab, {2, {SST_ID, SST_SST49LF016C} } }, .probe_timing = TIMING_IGNORED, /* routine doesn't use probe_timing (sst49lfxxxc.c) */ .block_erasers = { @@ -11108,13 +10462,11 @@ .vendor = "SST", .name = "SST49LF020", .bustype = BUS_LPC, - .manufacture_id = SST_ID, - .model_id = SST_SST49LF020, .total_size = 256, .page_size = 16 * 1024, .feature_bits = FEATURE_EITHER_RESET, .tested = TEST_OK_PREW, - .probe = probe_jedec, + {probe_jedec, {2, {SST_ID, SST_SST49LF020} } }, .probe_timing = 1, /* 150 ns */ .block_erasers = { @@ -11138,13 +10490,11 @@ .vendor = "SST", .name = "SST49LF020A", .bustype = BUS_LPC, - .manufacture_id = SST_ID, - .model_id = SST_SST49LF020A, .total_size = 256, .page_size = 4 * 1024, .feature_bits = FEATURE_EITHER_RESET, .tested = TEST_OK_PRE, - .probe = probe_jedec, + {probe_jedec, {2, {SST_ID, SST_SST49LF020A} } }, .probe_timing = 1, /* 150 ns */ .block_erasers = { @@ -11168,13 +10518,11 @@ .vendor = "SST", .name = "SST49LF040", .bustype = BUS_LPC, - .manufacture_id = SST_ID, - .model_id = SST_SST49LF040, .total_size = 512, .page_size = 4096, .feature_bits = FEATURE_EITHER_RESET, .tested = TEST_OK_PREW, - .probe = probe_jedec, + {probe_jedec, {2, {SST_ID, SST_SST49LF040} } }, .probe_timing = 1, /* 150 ns */ .block_erasers = { @@ -11198,13 +10546,11 @@ .vendor = "SST", .name = "SST49LF040B", .bustype = BUS_LPC, /* A/A Mux */ - .manufacture_id = SST_ID, - .model_id = SST_SST49LF040B, .total_size = 512, .page_size = 64 * 1024, .feature_bits = FEATURE_EITHER_RESET | FEATURE_REGISTERMAP, .tested = TEST_OK_PREW, - .probe = probe_jedec, + {probe_jedec, {2, {SST_ID, SST_SST49LF040B} } }, .probe_timing = 1, /* 150ns */ .block_erasers = { @@ -11229,13 +10575,11 @@ .vendor = "SST", .name = "SST49LF080A", .bustype = BUS_LPC, /* A/A Mux */ - .manufacture_id = SST_ID, - .model_id = SST_SST49LF080A, .total_size = 1024, .page_size = 4096, .feature_bits = FEATURE_EITHER_RESET, .tested = TEST_OK_PREW, - .probe = probe_jedec, + {probe_jedec, {2, {SST_ID, SST_SST49LF080A} } }, .probe_timing = TIMING_FIXME, .block_erasers = { @@ -11259,13 +10603,11 @@ .vendor = "SST", .name = "SST49LF160C", .bustype = BUS_LPC, - .manufacture_id = SST_ID, - .model_id = SST_SST49LF160C, .total_size = 2048, .page_size = 4 * 1024, .feature_bits = FEATURE_REGISTERMAP, .tested = TEST_OK_PRE, - .probe = probe_82802ab, + {probe_82802ab, {2, {SST_ID, SST_SST49LF160C} } }, .probe_timing = TIMING_IGNORED, /* routine doesn't use probe_timing (sst49lfxxxc.c) */ .block_erasers = { @@ -11292,13 +10634,11 @@ .vendor = "ST", .name = "M29F002B", .bustype = BUS_PARALLEL, - .manufacture_id = ST_ID, - .model_id = ST_M29F002B, .total_size = 256, .page_size = 64 * 1024, .feature_bits = FEATURE_ADDR_AAA | FEATURE_EITHER_RESET, .tested = TEST_UNTESTED, - .probe = probe_jedec, + {probe_jedec, {2, {ST_ID, ST_M29F002B} } }, .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */ .block_erasers = { @@ -11324,13 +10664,11 @@ .vendor = "ST", .name = "M29F002T/NT", .bustype = BUS_PARALLEL, - .manufacture_id = ST_ID, - .model_id = ST_M29F002T, .total_size = 256, .page_size = 64 * 1024, .feature_bits = FEATURE_ADDR_AAA | FEATURE_EITHER_RESET, .tested = TEST_OK_PREW, - .probe = probe_jedec, + {probe_jedec, {2, {ST_ID, ST_M29F002T} } }, .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */ .block_erasers = { @@ -11356,13 +10694,11 @@ .vendor = "ST", .name = "M29F040B", .bustype = BUS_PARALLEL, - .manufacture_id = ST_ID, - .model_id = ST_M29F040B, .total_size = 512, .page_size = 64 * 1024, .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET, .tested = TEST_UNTESTED, - .probe = probe_jedec, + {probe_jedec, {2, {ST_ID, ST_M29F040B} } }, .probe_timing = TIMING_ZERO, /* datasheet specifies no timing */ .block_erasers = { @@ -11384,13 +10720,11 @@ .vendor = "ST", .name = "M29F400BB", .bustype = BUS_PARALLEL, - .manufacture_id = ST_ID, - .model_id = ST_M29F400BB, .total_size = 512, .page_size = 64 * 1024, .feature_bits = FEATURE_ADDR_SHIFTED | FEATURE_EITHER_RESET, .tested = TEST_UNTESTED, - .probe = probe_m29f400bt, + {probe_m29f400bt, {2, {ST_ID, ST_M29F400BB} } }, .probe_timing = TIMING_IGNORED, /* routine doesn't use probe_timing (m29f400bt.c) */ .block_erasers = { @@ -11416,13 +10750,11 @@ .vendor = "ST", .name = "M29F400BT", .bustype = BUS_PARALLEL, - .manufacture_id = ST_ID, - .model_id = ST_M29F400BT, .total_size = 512, .page_size = 64 * 1024, .feature_bits = FEATURE_ADDR_SHIFTED | FEATURE_EITHER_RESET, .tested = TEST_UNTESTED, - .probe = probe_m29f400bt, + {probe_m29f400bt, {2, {ST_ID, ST_M29F400BT} } }, .probe_timing = TIMING_IGNORED, /* routine doesn't use probe_timing (m29f400bt.c) */ .block_erasers = { @@ -11448,13 +10780,11 @@ .vendor = "ST", .name = "M29W010B", .bustype = BUS_PARALLEL, - .manufacture_id = ST_ID, - .model_id = ST_M29W010B, .total_size = 128, .page_size = 16 * 1024, .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET, .tested = TEST_UNTESTED, - .probe = probe_jedec, + {probe_jedec, {2, {ST_ID, ST_M29W010B} } }, .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */ .block_erasers = { @@ -11475,13 +10805,11 @@ .vendor = "ST", .name = "M29W040B", .bustype = BUS_PARALLEL, - .manufacture_id = ST_ID, - .model_id = ST_M29W040B, .total_size = 512, .page_size = 64 * 1024, .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET, .tested = TEST_UNTESTED, - .probe = probe_jedec, + {probe_jedec, {2, {ST_ID, ST_M29W040B} } }, .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */ .block_erasers = { @@ -11502,13 +10830,11 @@ .vendor = "ST", .name = "M29W512B", .bustype = BUS_PARALLEL, - .manufacture_id = ST_ID, - .model_id = ST_M29W512B, .total_size = 64, .page_size = 64 * 1024, .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET, .tested = TEST_OK_PREW, - .probe = probe_jedec, + {probe_jedec, {2, {ST_ID, ST_M29W512B} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -11526,13 +10852,11 @@ .vendor = "ST", .name = "M50FLW040A", .bustype = BUS_FWH | BUS_LPC, /* A/A Mux */ - .manufacture_id = ST_ID, - .model_id = ST_M50FLW040A, .total_size = 512, .page_size = 0, .feature_bits = FEATURE_REGISTERMAP, .tested = TEST_UNTESTED, - .probe = probe_82802ab, + {probe_82802ab, {2, {ST_ID, ST_M50FLW040A} } }, .probe_timing = TIMING_FIXME, .block_erasers = { @@ -11559,13 +10883,11 @@ .vendor = "ST", .name = "M50FLW040B", .bustype = BUS_FWH | BUS_LPC, /* A/A Mux */ - .manufacture_id = ST_ID, - .model_id = ST_M50FLW040B, .total_size = 512, .page_size = 0, .feature_bits = FEATURE_REGISTERMAP, .tested = TEST_UNTESTED, - .probe = probe_82802ab, + {probe_82802ab, {2, {ST_ID, ST_M50FLW040B} } }, .probe_timing = TIMING_FIXME, .block_erasers = { @@ -11592,13 +10914,11 @@ .vendor = "ST", .name = "M50FLW080A", .bustype = BUS_FWH | BUS_LPC, /* A/A Mux */ - .manufacture_id = ST_ID, - .model_id = ST_M50FLW080A, .total_size = 1024, .page_size = 0, .feature_bits = FEATURE_REGISTERMAP, .tested = TEST_OK_PRE, - .probe = probe_82802ab, + {probe_82802ab, {2, {ST_ID, ST_M50FLW080A} } }, .probe_timing = TIMING_FIXME, .block_erasers = { @@ -11625,13 +10945,11 @@ .vendor = "ST", .name = "M50FLW080B", .bustype = BUS_FWH | BUS_LPC, /* A/A Mux */ - .manufacture_id = ST_ID, - .model_id = ST_M50FLW080B, .total_size = 1024, .page_size = 0, .feature_bits = FEATURE_REGISTERMAP, .tested = TEST_UNTESTED, - .probe = probe_82802ab, + {probe_82802ab, {2, {ST_ID, ST_M50FLW080B} } }, .probe_timing = TIMING_FIXME, .block_erasers = { @@ -11658,13 +10976,11 @@ .vendor = "ST", .name = "M50FW002", .bustype = BUS_FWH, /* A/A Mux */ - .manufacture_id = ST_ID, - .model_id = ST_M50FW002, .total_size = 256, .page_size = 0, .feature_bits = FEATURE_REGISTERMAP, .tested = TEST_UNTESTED, - .probe = probe_82802ab, + {probe_82802ab, {2, {ST_ID, ST_M50FW002} } }, .probe_timing = TIMING_IGNORED, /* routine doesn't use probe_timing (sst49lfxxxc.c) */ .block_erasers = { @@ -11688,13 +11004,11 @@ .vendor = "ST", .name = "M50FW016", .bustype = BUS_FWH, /* A/A Mux */ - .manufacture_id = ST_ID, - .model_id = ST_M50FW016, .total_size = 2048, .page_size = 0, .feature_bits = FEATURE_REGISTERMAP, .tested = TEST_UNTESTED, - .probe = probe_82802ab, + {probe_82802ab, {2, {ST_ID, ST_M50FW016} } }, .probe_timing = TIMING_IGNORED, /* routine doesn't use probe_timing (82802ab.c) */ .block_erasers = { @@ -11713,13 +11027,11 @@ .vendor = "ST", .name = "M50FW040", .bustype = BUS_FWH, /* A/A Mux */ - .manufacture_id = ST_ID, - .model_id = ST_M50FW040, .total_size = 512, .page_size = 0, .feature_bits = FEATURE_REGISTERMAP, .tested = TEST_OK_PR, - .probe = probe_82802ab, + {probe_82802ab, {2, {ST_ID, ST_M50FW040} } }, .probe_timing = TIMING_IGNORED, /* routine doesn't use probe_timing (82802ab.c) */ .block_erasers = { @@ -11738,13 +11050,11 @@ .vendor = "ST", .name = "M50FW080", .bustype = BUS_FWH, /* A/A Mux */ - .manufacture_id = ST_ID, - .model_id = ST_M50FW080, .total_size = 1024, .page_size = 0, .feature_bits = FEATURE_REGISTERMAP, .tested = TEST_OK_PREW, - .probe = probe_82802ab, + {probe_82802ab, {2, {ST_ID, ST_M50FW080} } }, .probe_timing = TIMING_IGNORED, /* routine doesn't use probe_timing (82802ab.c) */ .block_erasers = { @@ -11763,13 +11073,11 @@ .vendor = "ST", .name = "M50LPW080", .bustype = BUS_LPC, /* A/A Mux */ - .manufacture_id = ST_ID, - .model_id = ST_M50LPW080, .total_size = 1024, .page_size = 0, .feature_bits = FEATURE_REGISTERMAP, .tested = TEST_UNTESTED, - .probe = probe_82802ab, + {probe_82802ab, {2, {ST_ID, ST_M50LPW080} } }, .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */ .block_erasers = { @@ -11788,13 +11096,11 @@ .vendor = "ST", .name = "M50LPW116", .bustype = BUS_LPC, /* A/A Mux */ - .manufacture_id = ST_ID, - .model_id = ST_M50LPW116, .total_size = 2048, .page_size = 0, .feature_bits = FEATURE_REGISTERMAP, .tested = TEST_UNTESTED, - .probe = probe_82802ab, + {probe_82802ab, {2, {ST_ID, ST_M50LPW116} } }, .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */ .block_erasers = { @@ -11819,13 +11125,11 @@ .vendor = "SyncMOS/MoselVitelic", .name = "{F,S,V}29C51001B", .bustype = BUS_PARALLEL, - .manufacture_id = SYNCMOS_MVC_ID, - .model_id = SM_MVC_29C51001B, .total_size = 128, .page_size = 512, .feature_bits = FEATURE_EITHER_RESET, .tested = TEST_UNTESTED, - .probe = probe_jedec, + {probe_jedec, {2, {SYNCMOS_MVC_ID, SM_MVC_29C51001B} } }, .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */ .block_erasers = { @@ -11846,13 +11150,11 @@ .vendor = "SyncMOS/MoselVitelic", .name = "{F,S,V}29C51001T", .bustype = BUS_PARALLEL, - .manufacture_id = SYNCMOS_MVC_ID, - .model_id = SM_MVC_29C51001T, .total_size = 128, .page_size = 512, .feature_bits = FEATURE_EITHER_RESET, .tested = TEST_UNTESTED, - .probe = probe_jedec, + {probe_jedec, {2, {SYNCMOS_MVC_ID, SM_MVC_29C51001T} } }, .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */ .block_erasers = { @@ -11873,13 +11175,11 @@ .vendor = "SyncMOS/MoselVitelic", .name = "{F,S,V}29C51002B", .bustype = BUS_PARALLEL, - .manufacture_id = SYNCMOS_MVC_ID, - .model_id = SM_MVC_29C51002B, .total_size = 256, .page_size = 512, .feature_bits = FEATURE_EITHER_RESET, .tested = TEST_UNTESTED, - .probe = probe_jedec, + {probe_jedec, {2, {SYNCMOS_MVC_ID, SM_MVC_29C51002B} } }, .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */ .block_erasers = { @@ -11899,13 +11199,11 @@ .vendor = "SyncMOS/MoselVitelic", .name = "{F,S,V}29C51002T", .bustype = BUS_PARALLEL, - .manufacture_id = SYNCMOS_MVC_ID, - .model_id = SM_MVC_29C51002T, .total_size = 256, .page_size = 512, .feature_bits = FEATURE_EITHER_RESET, .tested = TEST_OK_PREW, - .probe = probe_jedec, + {probe_jedec, {2, {SYNCMOS_MVC_ID, SM_MVC_29C51002T} } }, .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */ .block_erasers = { @@ -11925,13 +11223,11 @@ .vendor = "SyncMOS/MoselVitelic", .name = "{F,S,V}29C51004B", .bustype = BUS_PARALLEL, - .manufacture_id = SYNCMOS_MVC_ID, - .model_id = SM_MVC_29C51004B, .total_size = 512, .page_size = 1024, .feature_bits = FEATURE_EITHER_RESET, .tested = TEST_UNTESTED, - .probe = probe_jedec, + {probe_jedec, {2, {SYNCMOS_MVC_ID, SM_MVC_29C51004B} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -11952,13 +11248,11 @@ .vendor = "SyncMOS/MoselVitelic", .name = "{F,S,V}29C51004T", .bustype = BUS_PARALLEL, - .manufacture_id = SYNCMOS_MVC_ID, - .model_id = SM_MVC_29C51004T, .total_size = 512, .page_size = 1024, .feature_bits = FEATURE_EITHER_RESET, .tested = TEST_UNTESTED, - .probe = probe_jedec, + {probe_jedec, {2, {SYNCMOS_MVC_ID, SM_MVC_29C51004T} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -11979,13 +11273,11 @@ .vendor = "SyncMOS/MoselVitelic", .name = "{S,V}29C31004B", .bustype = BUS_PARALLEL, - .manufacture_id = SYNCMOS_MVC_ID, - .model_id = SM_MVC_29C31004B, .total_size = 512, .page_size = 1024, .feature_bits = FEATURE_EITHER_RESET, .tested = TEST_UNTESTED, - .probe = probe_jedec, + {probe_jedec, {2, {SYNCMOS_MVC_ID, SM_MVC_29C31004B} } }, .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */ .block_erasers = { @@ -12006,13 +11298,11 @@ .vendor = "SyncMOS/MoselVitelic", .name = "{S,V}29C31004T", .bustype = BUS_PARALLEL, - .manufacture_id = SYNCMOS_MVC_ID, - .model_id = SM_MVC_29C31004T, .total_size = 512, .page_size = 1024, .feature_bits = FEATURE_EITHER_RESET, .tested = TEST_UNTESTED, - .probe = probe_jedec, + {probe_jedec, {2, {SYNCMOS_MVC_ID, SM_MVC_29C31004T} } }, .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */ .block_erasers = { @@ -12033,13 +11323,11 @@ .vendor = "TI", .name = "TMS29F002RB", .bustype = BUS_PARALLEL, - .manufacture_id = TI_OLD_ID, - .model_id = TI_TMS29F002RB, .total_size = 256, .page_size = 16384, /* Non-uniform sectors */ .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET, .tested = TEST_UNTESTED, - .probe = probe_jedec, + {probe_jedec, {2, {TI_OLD_ID, TI_TMS29F002RB} } }, .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */ .block_erasers = { @@ -12065,13 +11353,11 @@ .vendor = "TI", .name = "TMS29F002RT", .bustype = BUS_PARALLEL, - .manufacture_id = TI_OLD_ID, - .model_id = TI_TMS29F002RT, .total_size = 256, .page_size = 16384, /* Non-uniform sectors */ .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET, .tested = TEST_UNTESTED, - .probe = probe_jedec, + {probe_jedec, {2, {TI_OLD_ID, TI_TMS29F002RT} } }, .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */ .block_erasers = { @@ -12097,15 +11383,13 @@ .vendor = "Winbond", .name = "W25Q80.V", .bustype = BUS_SPI, - .manufacture_id = WINBOND_NEX_ID, - .model_id = WINBOND_NEX_W25Q80_V, .total_size = 1024, .page_size = 256, /* supports SFDP */ /* OTP: 1024B total, 256B reserved; read 0x48; write 0x42, erase 0x44, read ID 0x4B */ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP, .tested = TEST_OK_PREW, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {WINBOND_NEX_ID, WINBOND_NEX_W25Q80_V} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -12137,15 +11421,13 @@ .vendor = "Winbond", .name = "W25Q16.V", .bustype = BUS_SPI, - .manufacture_id = WINBOND_NEX_ID, - .model_id = WINBOND_NEX_W25Q16_V, .total_size = 2048, .page_size = 256, /* supports SFDP */ /* OTP: 1024B total, 256B reserved; read 0x48; write 0x42, erase 0x44, read ID 0x4B */ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP, .tested = TEST_OK_PREW, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {WINBOND_NEX_ID, WINBOND_NEX_W25Q16_V} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -12177,15 +11459,13 @@ .vendor = "Winbond", .name = "W25Q32.V", .bustype = BUS_SPI, - .manufacture_id = WINBOND_NEX_ID, - .model_id = WINBOND_NEX_W25Q32_V, .total_size = 4096, .page_size = 256, /* supports SFDP */ /* OTP: 1024B total, 256B reserved; read 0x48; write 0x42, erase 0x44, read ID 0x4B */ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP, .tested = TEST_OK_PREW, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {WINBOND_NEX_ID, WINBOND_NEX_W25Q32_V} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -12217,15 +11497,13 @@ .vendor = "Winbond", .name = "W25Q64.V", .bustype = BUS_SPI, - .manufacture_id = WINBOND_NEX_ID, - .model_id = WINBOND_NEX_W25Q64_V, .total_size = 8192, .page_size = 256, /* supports SFDP */ /* OTP: 1024B total, 256B reserved; read 0x48; write 0x42, erase 0x44, read ID 0x4B */ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP, .tested = TEST_OK_PREW, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {WINBOND_NEX_ID, WINBOND_NEX_W25Q64_V} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -12257,15 +11535,13 @@ .vendor = "Winbond", .name = "W25Q128.V", .bustype = BUS_SPI, - .manufacture_id = WINBOND_NEX_ID, - .model_id = WINBOND_NEX_W25Q128_V, .total_size = 16384, .page_size = 256, /* supports SFDP */ /* OTP: 1024B total, 256B reserved; read 0x48; write 0x42, erase 0x44, read ID 0x4B */ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP, .tested = TEST_OK_PREW, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {WINBOND_NEX_ID, WINBOND_NEX_W25Q128_V} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -12297,14 +11573,12 @@ .vendor = "Winbond", .name = "W25Q20.W", .bustype = BUS_SPI, - .manufacture_id = WINBOND_NEX_ID, - .model_id = WINBOND_NEX_W25Q20_W, .total_size = 256, .page_size = 256, /* OTP: 256B total; read 0x48; write 0x42, erase 0x44, read ID 0x4B */ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP, .tested = TEST_UNTESTED, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {WINBOND_NEX_ID, WINBOND_NEX_W25Q20_W} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -12336,14 +11610,12 @@ .vendor = "Winbond", .name = "W25Q40.W", .bustype = BUS_SPI, - .manufacture_id = WINBOND_NEX_ID, - .model_id = WINBOND_NEX_W25Q40_W, .total_size = 512, .page_size = 256, /* OTP: 256B total; read 0x48; write 0x42, erase 0x44, read ID 0x4B */ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP, .tested = TEST_UNTESTED, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {WINBOND_NEX_ID, WINBOND_NEX_W25Q40_W} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -12375,14 +11647,12 @@ .vendor = "Winbond", .name = "W25Q80.W", .bustype = BUS_SPI, - .manufacture_id = WINBOND_NEX_ID, - .model_id = WINBOND_NEX_W25Q80_W, .total_size = 1024, .page_size = 256, /* OTP: 256B total; read 0x48; write 0x42, erase 0x44, read ID 0x4B */ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP, .tested = TEST_UNTESTED, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {WINBOND_NEX_ID, WINBOND_NEX_W25Q80_W} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -12414,15 +11684,13 @@ .vendor = "Winbond", .name = "W25Q16.W", .bustype = BUS_SPI, - .manufacture_id = WINBOND_NEX_ID, - .model_id = WINBOND_NEX_W25Q16_W, .total_size = 2048, .page_size = 256, /* OTP: 256B total; read 0x48; write 0x42, erase 0x44, read ID 0x4B */ /* QPI enable 0x38, disable 0xFF */ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_QPI, .tested = TEST_UNTESTED, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {WINBOND_NEX_ID, WINBOND_NEX_W25Q16_W} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -12454,15 +11722,13 @@ .vendor = "Winbond", .name = "W25Q32.W", .bustype = BUS_SPI, - .manufacture_id = WINBOND_NEX_ID, - .model_id = WINBOND_NEX_W25Q32_W, .total_size = 4096, .page_size = 256, /* OTP: 256B total; read 0x48; write 0x42, erase 0x44, read ID 0x4B */ /* QPI enable 0x38, disable 0xFF */ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_QPI, .tested = TEST_OK_PREW, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {WINBOND_NEX_ID, WINBOND_NEX_W25Q32_W} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -12494,15 +11760,13 @@ .vendor = "Winbond", .name = "W25Q64.W", .bustype = BUS_SPI, - .manufacture_id = WINBOND_NEX_ID, - .model_id = WINBOND_NEX_W25Q64_W, .total_size = 8192, .page_size = 256, /* OTP: 256B total; read 0x48; write 0x42, erase 0x44, read ID 0x4B */ /* QPI enable 0x38, disable 0xFF */ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_QPI, .tested = TEST_OK_PREW, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {WINBOND_NEX_ID, WINBOND_NEX_W25Q64_W} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -12534,13 +11798,11 @@ .vendor = "Winbond", .name = "W25X10", .bustype = BUS_SPI, - .manufacture_id = WINBOND_NEX_ID, - .model_id = WINBOND_NEX_W25X10, .total_size = 128, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_OK_PREW, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {WINBOND_NEX_ID, WINBOND_NEX_W25X10} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -12566,13 +11828,11 @@ .vendor = "Winbond", .name = "W25X20", .bustype = BUS_SPI, - .manufacture_id = WINBOND_NEX_ID, - .model_id = WINBOND_NEX_W25X20, .total_size = 256, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_OK_PREW, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {WINBOND_NEX_ID, WINBOND_NEX_W25X20} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -12598,13 +11858,11 @@ .vendor = "Winbond", .name = "W25X40", .bustype = BUS_SPI, - .manufacture_id = WINBOND_NEX_ID, - .model_id = WINBOND_NEX_W25X40, .total_size = 512, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_OK_PREW, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {WINBOND_NEX_ID, WINBOND_NEX_W25X40} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -12630,13 +11888,11 @@ .vendor = "Winbond", .name = "W25X80", .bustype = BUS_SPI, - .manufacture_id = WINBOND_NEX_ID, - .model_id = WINBOND_NEX_W25X80, .total_size = 1024, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_OK_PREW, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {WINBOND_NEX_ID, WINBOND_NEX_W25X80} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -12662,13 +11918,11 @@ .vendor = "Winbond", .name = "W25X16", .bustype = BUS_SPI, - .manufacture_id = WINBOND_NEX_ID, - .model_id = WINBOND_NEX_W25X16, .total_size = 2048, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_OK_PREW, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {WINBOND_NEX_ID, WINBOND_NEX_W25X16} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -12700,13 +11954,11 @@ .vendor = "Winbond", .name = "W25X32", .bustype = BUS_SPI, - .manufacture_id = WINBOND_NEX_ID, - .model_id = WINBOND_NEX_W25X32, .total_size = 4096, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_OK_PREW, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {WINBOND_NEX_ID, WINBOND_NEX_W25X32} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -12738,13 +11990,11 @@ .vendor = "Winbond", .name = "W25X64", .bustype = BUS_SPI, - .manufacture_id = WINBOND_NEX_ID, - .model_id = WINBOND_NEX_W25X64, .total_size = 8192, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_OK_PROBE, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {WINBOND_NEX_ID, WINBOND_NEX_W25X64} } }, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -12776,13 +12026,11 @@ .vendor = "Winbond", .name = "W29C010(M)/W29C011A/W29EE011/W29EE012-old", .bustype = BUS_PARALLEL, - .manufacture_id = WINBOND_ID, - .model_id = WINBOND_W29C010, .total_size = 128, .page_size = 128, .feature_bits = FEATURE_LONG_RESET, .tested = TEST_OK_PREW, - .probe = probe_w29ee011, + {probe_w29ee011, {2, {WINBOND_ID, WINBOND_W29C010} } }, .probe_timing = TIMING_IGNORED, /* routine doesn't use probe_timing (w29ee011.c) */ .block_erasers = { @@ -12799,13 +12047,11 @@ .vendor = "Winbond", .name = "W29C010(M)/W29C011A/W29EE011/W29EE012", .bustype = BUS_PARALLEL, - .manufacture_id = WINBOND_ID, - .model_id = WINBOND_W29C010, .total_size = 128, .page_size = 128, .feature_bits = FEATURE_LONG_RESET, .tested = TEST_OK_PREW, - .probe = probe_jedec, + {probe_jedec, {2, {WINBOND_ID, WINBOND_W29C010} } }, .probe_timing = 10, /* used datasheet for the W29C011A */ .block_erasers = { @@ -12822,13 +12068,11 @@ .vendor = "Winbond", .name = "W29C020(C)/W29C022", .bustype = BUS_PARALLEL, - .manufacture_id = WINBOND_ID, - .model_id = WINBOND_W29C020, .total_size = 256, .page_size = 128, .feature_bits = FEATURE_LONG_RESET, .tested = TEST_OK_PREW, - .probe = probe_jedec, + {probe_jedec, {2, {WINBOND_ID, WINBOND_W29C020} } }, .probe_timing = 10, .block_erasers = { @@ -12846,13 +12090,11 @@ .vendor = "Winbond", .name = "W29C040/P", .bustype = BUS_PARALLEL, - .manufacture_id = WINBOND_ID, - .model_id = WINBOND_W29C040, .total_size = 512, .page_size = 256, .feature_bits = FEATURE_LONG_RESET, .tested = TEST_UNTESTED, - .probe = probe_jedec, + {probe_jedec, {2, {WINBOND_ID, WINBOND_W29C040} } }, .probe_timing = 10, .block_erasers = { @@ -12870,13 +12112,11 @@ .vendor = "Winbond", .name = "W39F010", .bustype = BUS_PARALLEL, - .manufacture_id = WINBOND_ID, - .model_id = WINBOND_W39F010, .total_size = 128, .page_size = 4 * 1024, .feature_bits = FEATURE_EITHER_RESET, .tested = TEST_OK_PREW, - .probe = probe_jedec, + {probe_jedec, {2, {WINBOND_ID, WINBOND_W39F010} } }, .probe_timing = 10, .block_erasers = { @@ -12898,13 +12138,11 @@ .vendor = "Winbond", .name = "W39L010", .bustype = BUS_PARALLEL, - .manufacture_id = WINBOND_ID, - .model_id = WINBOND_W39L010, .total_size = 128, .page_size = 4 * 1024, .feature_bits = FEATURE_EITHER_RESET, .tested = TEST_UNTESTED, - .probe = probe_jedec, + {probe_jedec, {2, {WINBOND_ID, WINBOND_W39L010} } }, .probe_timing = 10, .block_erasers = { @@ -12926,13 +12164,11 @@ .vendor = "Winbond", .name = "W39L020", .bustype = BUS_PARALLEL, - .manufacture_id = WINBOND_ID, - .model_id = WINBOND_W39L020, .total_size = 256, .page_size = 4 * 1024, .feature_bits = FEATURE_EITHER_RESET, .tested = TEST_UNTESTED, - .probe = probe_jedec, + {probe_jedec, {2, {WINBOND_ID, WINBOND_W39L020} } }, .probe_timing = 10, .block_erasers = { @@ -12957,13 +12193,11 @@ .vendor = "Winbond", .name = "W39L040", .bustype = BUS_PARALLEL, - .manufacture_id = WINBOND_ID, - .model_id = WINBOND_W39L040, .total_size = 512, .page_size = 64 * 1024, .feature_bits = FEATURE_EITHER_RESET, .tested = TEST_OK_PR, - .probe = probe_jedec, + {probe_jedec, {2, {WINBOND_ID, WINBOND_W39L040} } }, .probe_timing = 10, .block_erasers = { @@ -12988,13 +12222,11 @@ .vendor = "Winbond", .name = "W39V040A", .bustype = BUS_LPC, - .manufacture_id = WINBOND_ID, - .model_id = WINBOND_W39V040A, .total_size = 512, .page_size = 64 * 1024, .feature_bits = FEATURE_EITHER_RESET, .tested = TEST_OK_PREW, - .probe = probe_jedec, + {probe_jedec, {2, {WINBOND_ID, WINBOND_W39V040A} } }, .probe_timing = 10, .block_erasers = { @@ -13016,13 +12248,11 @@ .vendor = "Winbond", .name = "W39V040B", .bustype = BUS_LPC, - .manufacture_id = WINBOND_ID, - .model_id = WINBOND_W39V040B, .total_size = 512, .page_size = 64 * 1024, .feature_bits = FEATURE_EITHER_RESET, .tested = TEST_OK_PREW, - .probe = probe_jedec, + {probe_jedec, {2, {WINBOND_ID, WINBOND_W39V040B} } }, .probe_timing = 10, .block_erasers = { @@ -13044,13 +12274,11 @@ .vendor = "Winbond", .name = "W39V040C", .bustype = BUS_LPC, - .manufacture_id = WINBOND_ID, - .model_id = WINBOND_W39V040C, .total_size = 512, .page_size = 64 * 1024, .feature_bits = FEATURE_EITHER_RESET, .tested = TEST_OK_PREW, - .probe = probe_jedec, + {probe_jedec, {2, {WINBOND_ID, WINBOND_W39V040C} } }, .probe_timing = 10, .block_erasers = { @@ -13072,13 +12300,11 @@ .vendor = "Winbond", .name = "W39V040FA", .bustype = BUS_FWH, - .manufacture_id = WINBOND_ID, - .model_id = WINBOND_W39V040FA, .total_size = 512, .page_size = 64 * 1024, .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET, .tested = TEST_OK_PREW, - .probe = probe_jedec, + {probe_jedec, {2, {WINBOND_ID, WINBOND_W39V040FA} } }, .probe_timing = 10, .block_erasers = { @@ -13104,13 +12330,11 @@ .vendor = "Winbond", .name = "W39V040FB", .bustype = BUS_FWH, - .manufacture_id = WINBOND_ID, - .model_id = WINBOND_W39V040B, .total_size = 512, .page_size = 64 * 1024, .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET, .tested = TEST_OK_PREW, - .probe = probe_jedec, + {probe_jedec, {2, {WINBOND_ID, WINBOND_W39V040B} } }, .probe_timing = 10, .block_erasers = { @@ -13133,13 +12357,11 @@ .vendor = "Winbond", .name = "W39V040FC", .bustype = BUS_FWH, - .manufacture_id = WINBOND_ID, - .model_id = WINBOND_W39V040C, .total_size = 512, .page_size = 64 * 1024, .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET, .tested = TEST_OK_PREW, - .probe = probe_jedec, + {probe_jedec, {2, {WINBOND_ID, WINBOND_W39V040C} } }, .probe_timing = 10, .block_erasers = { @@ -13161,13 +12383,11 @@ .vendor = "Winbond", .name = "W39V080A", .bustype = BUS_LPC, - .manufacture_id = WINBOND_ID, - .model_id = WINBOND_W39V080A, .total_size = 1024, .page_size = 64 * 1024, .feature_bits = FEATURE_EITHER_RESET, .tested = TEST_OK_PREW, - .probe = probe_jedec, + {probe_jedec, {2, {WINBOND_ID, WINBOND_W39V080A} } }, .probe_timing = 10, .block_erasers = { @@ -13189,13 +12409,11 @@ .vendor = "Winbond", .name = "W49F002U/N", .bustype = BUS_PARALLEL, - .manufacture_id = WINBOND_ID, - .model_id = WINBOND_W49F002U, .total_size = 256, .page_size = 128, .feature_bits = FEATURE_EITHER_RESET, .tested = TEST_OK_PREW, - .probe = probe_jedec, + {probe_jedec, {2, {WINBOND_ID, WINBOND_W49F002U} } }, .probe_timing = 10, .block_erasers = { @@ -13221,13 +12439,11 @@ .vendor = "Winbond", .name = "W49F020", .bustype = BUS_PARALLEL, - .manufacture_id = WINBOND_ID, - .model_id = WINBOND_W49F020, .total_size = 256, .page_size = 128, .feature_bits = FEATURE_EITHER_RESET, .tested = TEST_OK_PROBE, - .probe = probe_jedec, + {probe_jedec, {2, {WINBOND_ID, WINBOND_W49F020} } }, .probe_timing = 10, .block_erasers = { @@ -13245,13 +12461,11 @@ .vendor = "Winbond", .name = "W49V002A", .bustype = BUS_LPC, - .manufacture_id = WINBOND_ID, - .model_id = WINBOND_W49V002A, .total_size = 256, .page_size = 128, .feature_bits = FEATURE_EITHER_RESET, .tested = TEST_OK_PREW, - .probe = probe_jedec, + {probe_jedec, {2, {WINBOND_ID, WINBOND_W49V002A} } }, .probe_timing = 10, .block_erasers = { @@ -13277,13 +12491,11 @@ .vendor = "Winbond", .name = "W49V002FA", .bustype = BUS_FWH, - .manufacture_id = WINBOND_ID, - .model_id = WINBOND_W49V002FA, .total_size = 256, .page_size = 128, .feature_bits = FEATURE_EITHER_RESET, .tested = TEST_OK_PREW, - .probe = probe_jedec, + {probe_jedec, {2, {WINBOND_ID, WINBOND_W49V002FA} } }, .probe_timing = 10, .block_erasers = { @@ -13309,13 +12521,11 @@ .vendor = "Winbond", .name = "W39V080FA", .bustype = BUS_FWH, - .manufacture_id = WINBOND_ID, - .model_id = WINBOND_W39V080FA, .total_size = 1024, .page_size = 64 * 1024, .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET, .tested = TEST_OK_PREW, - .probe = probe_jedec, + {probe_jedec, {2, {WINBOND_ID, WINBOND_W39V080FA} } }, .probe_timing = 10, .block_erasers = { @@ -13338,13 +12548,11 @@ .vendor = "Winbond", .name = "W39V080FA (dual mode)", .bustype = BUS_FWH, - .manufacture_id = WINBOND_ID, - .model_id = WINBOND_W39V080FA_DM, .total_size = 512, .page_size = 64 * 1024, .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET, .tested = TEST_UNTESTED, - .probe = probe_jedec, + {probe_jedec, {2, {WINBOND_ID, WINBOND_W39V080FA_DM} } }, .probe_timing = 10, .block_erasers = { @@ -13366,13 +12574,11 @@ .vendor = "Unknown", .name = "SFDP-capable chip", .bustype = BUS_SPI, - .manufacture_id = GENERIC_MANUF_ID, - .model_id = SFDP_DEVICE_ID, /* We present our own "report this" text hence we do not * want the default "This flash part has status UNTESTED..." * text to be printed. */ .tested = TEST_OK_PREW, - .probe = probe_spi_sfdp, + {probe_spi_sfdp, {FIXME, {GENERIC_MANUF_ID, SFDP_DEVICE_ID} } }, .unlock = spi_disable_blockprotect, /* is this safe? */ .read = spi_chip_read, /* FIXME: some vendor extensions define this */ @@ -13389,13 +12595,11 @@ .vendor = "Programmer", .name = "Opaque flash chip", .bustype = BUS_PROG, - .manufacture_id = PROGMANUF_ID, - .model_id = PROGDEV_ID, .total_size = 0, .page_size = 256, /* probe is assumed to work, rest will be filled in by probe */ .tested = TEST_OK_PROBE, - .probe = probe_opaque, + {probe_opaque, {FIXME, {PROGMANUF_ID, PROGDEV_ID} } }, /* eraseblock sizes will be set by the probing function */ .block_erasers = { @@ -13411,12 +12615,11 @@ .vendor = "AMIC", .name = "unknown AMIC SPI chip", .bustype = BUS_SPI, - .manufacture_id = AMIC_ID, - .model_id = GENERIC_DEVICE_ID, .total_size = 0, .page_size = 256, + .feature_bits = 0, .tested = TEST_BAD_PREW, - .probe = probe_spi_rdid4, + {probe_spi_rdid4, {4, {AMIC_ID, GENERIC_DEVICE_ID} } }, .probe_timing = TIMING_ZERO, .write = NULL, .read = NULL, @@ -13426,12 +12629,11 @@ .vendor = "Atmel", .name = "unknown Atmel SPI chip", .bustype = BUS_SPI, - .manufacture_id = ATMEL_ID, - .model_id = GENERIC_DEVICE_ID, .total_size = 0, .page_size = 256, + .feature_bits = 0, .tested = TEST_BAD_PREW, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {ATMEL_ID, GENERIC_DEVICE_ID} } }, .probe_timing = TIMING_ZERO, .write = NULL, .read = NULL, @@ -13441,12 +12643,11 @@ .vendor = "Eon", .name = "unknown Eon SPI chip", .bustype = BUS_SPI, - .manufacture_id = EON_ID_NOPREFIX, - .model_id = GENERIC_DEVICE_ID, .total_size = 0, .page_size = 256, + .feature_bits = 0, .tested = TEST_BAD_PREW, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {EON_ID_NOPREFIX, GENERIC_DEVICE_ID} } }, .probe_timing = TIMING_ZERO, .write = NULL, .read = NULL, @@ -13456,12 +12657,11 @@ .vendor = "Macronix", .name = "unknown Macronix SPI chip", .bustype = BUS_SPI, - .manufacture_id = MACRONIX_ID, - .model_id = GENERIC_DEVICE_ID, .total_size = 0, .page_size = 256, + .feature_bits = 0, .tested = TEST_BAD_PREW, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {MACRONIX_ID, GENERIC_DEVICE_ID} } }, .probe_timing = TIMING_ZERO, .write = NULL, .read = NULL, @@ -13471,12 +12671,11 @@ .vendor = "PMC", .name = "unknown PMC SPI chip", .bustype = BUS_SPI, - .manufacture_id = PMC_ID, - .model_id = GENERIC_DEVICE_ID, .total_size = 0, .page_size = 256, + .feature_bits = 0, .tested = TEST_BAD_PREW, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {PMC_ID, GENERIC_DEVICE_ID} } }, .probe_timing = TIMING_ZERO, .write = NULL, .read = NULL, @@ -13486,12 +12685,11 @@ .vendor = "SST", .name = "unknown SST SPI chip", .bustype = BUS_SPI, - .manufacture_id = SST_ID, - .model_id = GENERIC_DEVICE_ID, .total_size = 0, .page_size = 256, + .feature_bits = 0, .tested = TEST_BAD_PREW, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {SST_ID, GENERIC_DEVICE_ID} } }, .probe_timing = TIMING_ZERO, .write = NULL, .read = NULL, @@ -13501,12 +12699,11 @@ .vendor = "ST", .name = "unknown ST SPI chip", .bustype = BUS_SPI, - .manufacture_id = ST_ID, - .model_id = GENERIC_DEVICE_ID, .total_size = 0, .page_size = 256, + .feature_bits = 0, .tested = TEST_BAD_PREW, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {ST_ID, GENERIC_DEVICE_ID} } }, .probe_timing = TIMING_ZERO, .write = NULL, .read = NULL, @@ -13516,12 +12713,11 @@ .vendor = "Sanyo", .name = "unknown Sanyo SPI chip", .bustype = BUS_SPI, - .manufacture_id = SANYO_ID, - .model_id = GENERIC_DEVICE_ID, .total_size = 0, .page_size = 256, + .feature_bits = 0, .tested = TEST_BAD_PREW, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {SANYO_ID, GENERIC_DEVICE_ID} } }, .probe_timing = TIMING_ZERO, .write = NULL, .read = NULL, @@ -13531,12 +12727,11 @@ .vendor = "Winbond", .name = "unknown Winbond (ex Nexcom) SPI chip", .bustype = BUS_SPI, - .manufacture_id = WINBOND_NEX_ID, - .model_id = GENERIC_DEVICE_ID, .total_size = 0, .page_size = 256, + .feature_bits = 0, .tested = TEST_BAD_PREW, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {WINBOND_NEX_ID, GENERIC_DEVICE_ID} } }, .probe_timing = TIMING_ZERO, .write = NULL, .read = NULL, @@ -13546,12 +12741,11 @@ .vendor = "Generic", .name = "unknown SPI chip (RDID)", .bustype = BUS_SPI, - .manufacture_id = GENERIC_MANUF_ID, - .model_id = GENERIC_DEVICE_ID, .total_size = 0, .page_size = 256, + .feature_bits = 0, .tested = TEST_BAD_PREW, - .probe = probe_spi_rdid, + {probe_spi_rdid, {3, {GENERIC_MANUF_ID, GENERIC_DEVICE_ID} } }, .write = NULL, },
@@ -13559,12 +12753,11 @@ .vendor = "Generic", .name = "unknown SPI chip (REMS)", .bustype = BUS_SPI, - .manufacture_id = GENERIC_MANUF_ID, - .model_id = GENERIC_DEVICE_ID, .total_size = 0, .page_size = 256, + .feature_bits = 0, .tested = TEST_BAD_PREW, - .probe = probe_spi_rems, + {probe_spi_rems, {2, {GENERIC_MANUF_ID, GENERIC_DEVICE_ID} } }, .write = NULL, },