github.com/u-root/u-root@v7.0.1-0.20200915234505-ad7babab0a8e+incompatible/pkg/mount/mtd/dat.go (about)

     1  // Copyright 2019 the u-root Authors. All rights reserved
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  package mtd
     6  
     7  var vendors = []vendor{
     8  	{names: []VendorName{"ZETTADEVICE", "Zetta"}, id: 0xBA},
     9  	{names: []VendorName{"WINBOND"}, id: 0xDA},
    10  	{names: []VendorName{"WINBOND", "NEX", "Nexcom", "Winbond (ex Nexcom) serial flashes,"}, id: 0xEF},
    11  	// {names: []VendorName{"TI_OLD",}, id: 0x01, "TI chips from last century,"},
    12  	{names: []VendorName{"TI", "Texas Instruments"}, id: 0x97},
    13  	{names: []VendorName{"TENX", "Tenx", "Tenx Technologies"}, id: 0x7F7F5E},
    14  	{names: []VendorName{"SYNCMOS", "MVC"}, id: 0x40},
    15  	{names: []VendorName{"Micron", "ST", "SGS/Thomson", "Numonyx"}, id: 0x20},
    16  	{names: []VendorName{"SST"}, id: 0xBF},
    17  	{names: []VendorName{"SPANSION", "AMD"}, id: 0x01},
    18  	{names: []VendorName{"SHARP"}, id: 0xB0},
    19  	{names: []VendorName{"SANYO"}, id: 0x62},
    20  	{names: []VendorName{"PMC", "Chingis Technology Corporation"}, id: 0x7F9D},
    21  	{names: []VendorName{"NANTRONICS"}, id: 0x7F7F7F7F7F7FD5},
    22  	{names: []VendorName{"MACRONIX", "MX", "Generalplus"}, id: 0xC2},
    23  	//ISSI Integrated Silicon Solutions, disjoint overlap with PMC
    24  	{names: []VendorName{"ISSI"}, id: 0xD5},
    25  	{names: []VendorName{"INTEL"}, id: 0x89},
    26  	{names: []VendorName{"IMT", "Integrated Memory Technologies"}, id: 0x7F1F},
    27  	{names: []VendorName{"HYUNDAI"}, id: 0xAD},
    28  	{names: []VendorName{"GIGADEVICE"}, id: 0xC8},
    29  	{names: []VendorName{"FUJITSU"}, id: 0x04},
    30  	{names: []VendorName{"FIDELIX"}, id: 0xF8},
    31  	{names: []VendorName{"EXCEL", "Excel Semiconductor Inc. (ESI) resides in bank 5"}, id: 0x7F7F7F7F4A},
    32  	{names: []VendorName{"EON", "EON Silicon Devices"}, id: 0x7F1C},
    33  	{names: []VendorName{"ESMT", "Elite Semiconductor Memory Technology (ESMT) / EFST Elite Flash Storage"}, id: 0x8C},
    34  	{names: []VendorName{"CATALYST"}, id: 0x31},
    35  	{names: []VendorName{"BRIGHT", "Bright Microelectronics"}, id: 0xAD},
    36  	{names: []VendorName{"Adesto", "ATMEL"}, id: 0x1F},
    37  	{names: []VendorName{"AMIC"}, id: 0x7F37},
    38  	{names: []VendorName{"ALLIANCE", "Alliance", "Alliance Semiconductor,"}, id: 0x52},
    39  }
    40  
    41  // Devices are the individual devices. Each device has a few properties
    42  // that vary with the device, and a few that do not. For example, many
    43  // devices have the same basic block sizes, erase patterns, and so on;
    44  // they differ only in size. Hence we can save space if we have
    45  // per-device data and per-family data.
    46  // Flashrom supported a lot of oldjunk. For now, we're just
    47  // going to worry about those things /dev/mtd can support.
    48  // TODO: figure out what defining common data.
    49  var (
    50  	devices = []ChipDevice{
    51  		{vendor: "ALLIANCE", devices: []ChipName{"AS29F002B"}, id: 0x34},
    52  		{vendor: "ALLIANCE", devices: []ChipName{"AS29F002T"}, id: 0xB0},
    53  		{vendor: "ALLIANCE", devices: []ChipName{"AS29F010"}, id: 0x04},
    54  		{vendor: "ALLIANCE", devices: []ChipName{"AS29F040"}, id: 0xA4},
    55  		{vendor: "ALLIANCE", devices: []ChipName{"AS29F200B"}, id: 0x57},
    56  		{vendor: "ALLIANCE", devices: []ChipName{"AS29F200T"}, id: 0x51},
    57  		{vendor: "ALLIANCE", devices: []ChipName{"AS29LV160B"}, id: 0x49},
    58  		{vendor: "ALLIANCE", devices: []ChipName{"AS29LV160T"}, id: 0xCA},
    59  		{vendor: "ALLIANCE", devices: []ChipName{"AS29LV400B"}, id: 0xBA},
    60  		{vendor: "ALLIANCE", devices: []ChipName{"AS29LV400T"}, id: 0xB9},
    61  		{vendor: "ALLIANCE", devices: []ChipName{"AS29LV800B"}, id: 0x5B},
    62  		{vendor: "ALLIANCE", devices: []ChipName{"AS29LV800T"}, id: 0xDA},
    63  		{vendor: "AMD", devices: []ChipName{"AM29DL400BT"}, id: 0x0C},
    64  		{vendor: "AMD", devices: []ChipName{"AM29DL400BB"}, id: 0x0F},
    65  		{vendor: "AMD", devices: []ChipName{"AM29DL800BT"}, id: 0x4A},
    66  		{vendor: "AMD", devices: []ChipName{"AM29DL800BB"}, id: 0xCB},
    67  		{vendor: "AMD", devices: []ChipName{"AM29F002BB"}, id: 0x34, remarks: "	/* Same as Am29F002NBB */"},
    68  		{vendor: "AMD", devices: []ChipName{"AM29F002BT"}, id: 0xB0, remarks: "	/* Same as Am29F002NBT */"},
    69  		{vendor: "AMD", devices: []ChipName{"AM29F004BB"}, id: 0x7B},
    70  		{vendor: "AMD", devices: []ChipName{"AM29F004BT"}, id: 0x77},
    71  		{vendor: "AMD", devices: []ChipName{"AM29F016D"}, id: 0xAD},
    72  		{vendor: "AMD", devices: []ChipName{"AM29F010"}, id: 0x20, remarks: "	/* Same as Am29F010A and Am29F010B */"},
    73  		{vendor: "AMD", devices: []ChipName{"AM29F040"}, id: 0xA4, remarks: "	/* Same as AM29F040B */"},
    74  		{vendor: "AMD", devices: []ChipName{"AM29F080"}, id: 0xD5, remarks: "	/* Same as Am29F080B */"},
    75  		{vendor: "AMD", devices: []ChipName{"AM29F200BB"}, id: 0x57},
    76  		{vendor: "AMD", devices: []ChipName{"AM29F200BT"}, id: 0x51},
    77  		{vendor: "AMD", devices: []ChipName{"AM29F400BB"}, id: 0xAB},
    78  		{vendor: "AMD", devices: []ChipName{"AM29F400BT"}, id: 0x23},
    79  		{vendor: "AMD", devices: []ChipName{"AM29F800BB"}, id: 0x58},
    80  		{vendor: "AMD", devices: []ChipName{"AM29F800BT"}, id: 0xD6},
    81  		{vendor: "AMD", devices: []ChipName{"AM29LV001BB"}, id: 0x6D},
    82  		{vendor: "AMD", devices: []ChipName{"AM29LV001BT"}, id: 0xED},
    83  		{vendor: "AMD", devices: []ChipName{"AM29LV010B"}, id: 0x6E, remarks: "	/* 1Mb, uniform */"},
    84  		{vendor: "AMD", devices: []ChipName{"AM29LV002BB"}, id: 0xC2},
    85  		{vendor: "AMD", devices: []ChipName{"AM29LV002BT"}, id: 0x40},
    86  		{vendor: "AMD", devices: []ChipName{"AM29LV004BB"}, id: 0xB6},
    87  		{vendor: "AMD", devices: []ChipName{"AM29LV004BT"}, id: 0xB5},
    88  		{vendor: "AMD", devices: []ChipName{"AM29LV008BB"}, id: 0x37},
    89  		{vendor: "AMD", devices: []ChipName{"AM29LV008BT"}, id: 0x3E},
    90  		{vendor: "AMD", devices: []ChipName{"AM29LV040B"}, id: 0x4F},
    91  		{vendor: "AMD", devices: []ChipName{"AM29LV080B"}, id: 0x38, remarks: "	/* Same as Am29LV081B */"},
    92  		{vendor: "AMD", devices: []ChipName{"AM29LV200BB"}, id: 0xBF},
    93  		{vendor: "AMD", devices: []ChipName{"AM29LV200BT"}, id: 0x3B},
    94  		{vendor: "AMD", devices: []ChipName{"AM29LV800BB"}, id: 0x5B, remarks: "	/* Same as Am29LV800DB */"},
    95  		{vendor: "AMD", devices: []ChipName{"AM29LV400BT"}, id: 0xB9},
    96  		{vendor: "AMD", devices: []ChipName{"AM29LV400BB"}, id: 0xBA},
    97  		{vendor: "AMD", devices: []ChipName{"AM29LV800BT"}, id: 0xDA, remarks: "	/* Same as Am29LV800DT */"},
    98  		{vendor: "AMIC", devices: []ChipName{"A25L05PT"}, id: 0x2020},
    99  		{vendor: "AMIC", devices: []ChipName{"A25L05PU"}, id: 0x2010},
   100  		{vendor: "AMIC", devices: []ChipName{"A25L10PT"}, id: 0x2021},
   101  		{vendor: "AMIC", devices: []ChipName{"A25L10PU"}, id: 0x2011},
   102  		{vendor: "AMIC", devices: []ChipName{"A25L20PT"}, id: 0x2022},
   103  		{vendor: "AMIC", devices: []ChipName{"A25L20PU"}, id: 0x2012},
   104  		{vendor: "AMIC", devices: []ChipName{"A25L40PT"}, id: 0x2013, remarks: "	/* Datasheet says T and U have"},
   105  		{vendor: "AMIC", devices: []ChipName{"A25L40PU"}, id: 0x2013},
   106  		{vendor: "AMIC", devices: []ChipName{"A25L80P"}, id: 0x2014, remarks: "	/* Seems that no A25L80PT exists */"},
   107  		{vendor: "AMIC", devices: []ChipName{"A25L16PT"}, id: 0x2025},
   108  		{vendor: "AMIC", devices: []ChipName{"A25L16PU"}, id: 0x2015},
   109  		{vendor: "AMIC", devices: []ChipName{"A25L512"}, id: 0x3010},
   110  		{vendor: "AMIC", devices: []ChipName{"A25L010"}, id: 0x3011},
   111  		{vendor: "AMIC", devices: []ChipName{"A25L020"}, id: 0x3012},
   112  		{vendor: "AMIC", devices: []ChipName{"A25L040"}, id: 0x3013},
   113  		{vendor: "AMIC", devices: []ChipName{"A25L080"}, id: 0x3014},
   114  		{vendor: "AMIC", devices: []ChipName{"A25L016"}, id: 0x3015},
   115  		{vendor: "AMIC", devices: []ChipName{"A25L032"}, id: 0x3016},
   116  		{vendor: "AMIC", devices: []ChipName{"A25LQ16"}, id: 0x4015},
   117  		{vendor: "AMIC", devices: []ChipName{"A25LQ032"}, id: 0x4016, remarks: "	/* Same as A25LQ32A, but the latter supports SFDP */"},
   118  		{vendor: "AMIC", devices: []ChipName{"A25LQ64"}, id: 0x4017},
   119  		{vendor: "AMIC", devices: []ChipName{"A29002B"}, id: 0x0, remarks: "d"},
   120  		{vendor: "AMIC", devices: []ChipName{"A29002T"}, id: 0x8C, remarks: "	/* Same as A290021T */"},
   121  		{vendor: "AMIC", devices: []ChipName{"A29040B"}, id: 0x86},
   122  		{vendor: "AMIC", devices: []ChipName{"A29400T"}, id: 0xB0, remarks: "	/* Same as 294001T */"},
   123  		{vendor: "AMIC", devices: []ChipName{"A29400U"}, id: 0x31, remarks: "	/* Same as A294001U */"},
   124  		{vendor: "AMIC", devices: []ChipName{"A29800T"}, id: 0x0E},
   125  		{vendor: "AMIC", devices: []ChipName{"A29800U"}, id: 0x8F},
   126  		{vendor: "AMIC", devices: []ChipName{"A29L004T"}, id: 0x34, remarks: "	/* Same as A29L400T */"},
   127  		{vendor: "AMIC", devices: []ChipName{"A29L004U"}, id: 0xB5, remarks: "	/* Same as A29L400U */"},
   128  		{vendor: "AMIC", devices: []ChipName{"A29L008T"}, id: 0x1A, remarks: "	/* Same as A29L800T */"},
   129  		{vendor: "AMIC", devices: []ChipName{"A29L008U"}, id: 0x9B, remarks: "	/* Same as A29L800U */"},
   130  		{vendor: "AMIC", devices: []ChipName{"A29L040"}, id: 0x92},
   131  		{vendor: "AMIC", devices: []ChipName{"A49LF040A"}, id: 0x9, remarks: "d"},
   132  		{vendor: "ATMEL", devices: []ChipName{"AT25DF021"}, id: 0x4300},
   133  		{vendor: "ATMEL", devices: []ChipName{"AT25DF021A"}, id: 0x4301},
   134  		{vendor: "ATMEL", devices: []ChipName{"AT25DF041A"}, id: 0x4401},
   135  		{vendor: "ATMEL", devices: []ChipName{"AT25DF081"}, id: 0x4502, remarks: "	/* EDI 0x00. AT25DL081 has same ID + EDI 0x0100 */"},
   136  		{vendor: "ATMEL", devices: []ChipName{"AT25DF081A"}, id: 0x4501, remarks: "	/* Yes, 81A has a lower number than 81 */"},
   137  		{vendor: "ATMEL", devices: []ChipName{"AT25DF161"}, id: 0x4602},
   138  		{vendor: "ATMEL", devices: []ChipName{"AT25DF321"}, id: 0x4700, remarks: "	/* Same as 26DF321 */"},
   139  		{vendor: "ATMEL", devices: []ChipName{"AT25DF321A"}, id: 0x4701},
   140  		{vendor: "ATMEL", devices: []ChipName{"AT25DF641"}, id: 0x4800},
   141  		{vendor: "ATMEL", devices: []ChipName{"AT25DL161"}, id: 0x4603, remarks: "	/* EDI 0x0100 */"},
   142  		{vendor: "ATMEL", devices: []ChipName{"AT25DQ161"}, id: 0x8600, remarks: "	/* EDI 0x0100 */"},
   143  		{vendor: "ATMEL", devices: []ChipName{"AT25DQ321"}, id: 0x8700, remarks: "	/* EDI 0x0100 */"},
   144  		{vendor: "ATMEL", devices: []ChipName{"AT25F512"}, id: 0x60, remarks: "	/* Needs AT25F_RDID. ID from PCN and actual HW. Seems to be a relabeled AT25F1024. */"},
   145  		{vendor: "ATMEL", devices: []ChipName{"AT25F512A"}, id: 0x65, remarks: "	/* Needs AT25F_RDID */"},
   146  		{vendor: "ATMEL", devices: []ChipName{"AT25F512B"}, id: 0x6500},
   147  		{vendor: "ATMEL", devices: []ChipName{"AT25F1024"}, id: 0x60, remarks: "	/* Needs AT25F_RDID */"},
   148  		{vendor: "ATMEL", devices: []ChipName{"AT25F2048"}, id: 0x63, remarks: "	/* Needs AT25F_RDID */"},
   149  		{vendor: "ATMEL", devices: []ChipName{"AT25F4096"}, id: 0x64, remarks: "	/* Needs AT25F_RDID */"},
   150  		{vendor: "ATMEL", devices: []ChipName{"AT25FS010"}, id: 0x6601},
   151  		{vendor: "ATMEL", devices: []ChipName{"AT25FS040"}, id: 0x6604},
   152  		{vendor: "ATMEL", devices: []ChipName{"AT25SF041"}, id: 0x8401},
   153  		{vendor: "ATMEL", devices: []ChipName{"AT25SF081"}, id: 0x8501},
   154  		{vendor: "ATMEL", devices: []ChipName{"AT25SF161"}, id: 0x8601},
   155  		{vendor: "ATMEL", devices: []ChipName{"AT25SL128A"}, id: 0x4218},
   156  		{vendor: "ATMEL", devices: []ChipName{"AT26DF041"}, id: 0x4400},
   157  		{vendor: "ATMEL", devices: []ChipName{"AT26DF081"}, id: 0x4500, remarks: "	/* guessed, no datasheet available */"},
   158  		{vendor: "ATMEL", devices: []ChipName{"AT26DF081A"}, id: 0x4501},
   159  		{vendor: "ATMEL", devices: []ChipName{"AT26DF161"}, id: 0x4600},
   160  		{vendor: "ATMEL", devices: []ChipName{"AT26DF161A"}, id: 0x4601},
   161  		{vendor: "ATMEL", devices: []ChipName{"AT26F004"}, id: 0x0400},
   162  		{vendor: "ATMEL", devices: []ChipName{"AT29LV512"}, id: 0x3D},
   163  		{vendor: "ATMEL", devices: []ChipName{"AT29LV010A"}, id: 0x35, remarks: "	/* Same as AT29BV010A, the latter works down to 2.7V */"},
   164  		{vendor: "ATMEL", devices: []ChipName{"AT29LV020"}, id: 0xBA},
   165  		{vendor: "ATMEL", devices: []ChipName{"AT29BV040A"}, id: 0xC4},
   166  		{vendor: "ATMEL", devices: []ChipName{"AT29C040A"}, id: 0xA4},
   167  		{vendor: "ATMEL", devices: []ChipName{"AT29C010A"}, id: 0xD5},
   168  		{vendor: "ATMEL", devices: []ChipName{"AT29C020"}, id: 0xDA},
   169  		{vendor: "ATMEL", devices: []ChipName{"AT29C512"}, id: 0x5D},
   170  		{vendor: "ATMEL", devices: []ChipName{"AT45CS1282"}, id: 0x2920},
   171  		{vendor: "ATMEL", devices: []ChipName{"AT45DB011D"}, id: 0x2200},
   172  		{vendor: "ATMEL", devices: []ChipName{"AT45DB021D"}, id: 0x2300},
   173  		{vendor: "ATMEL", devices: []ChipName{"AT45DB041D"}, id: 0x2400},
   174  		{vendor: "ATMEL", devices: []ChipName{"AT45DB081D"}, id: 0x2500},
   175  		{vendor: "ATMEL", devices: []ChipName{"AT45DB081E	/*"}, id: 0x0100, remarks: "*/"},
   176  		{vendor: "ATMEL", devices: []ChipName{"AT45DB161D"}, id: 0x2600},
   177  		{vendor: "ATMEL", devices: []ChipName{"AT45DB161E	/*"}, id: 0x0100, remarks: "*/"},
   178  		{vendor: "ATMEL", devices: []ChipName{"AT45DB321C"}, id: 0x2700},
   179  		{vendor: "ATMEL", devices: []ChipName{"AT45DB321E	/*"}, id: 0x0100, remarks: "*/"},
   180  		{vendor: "ATMEL", devices: []ChipName{"AT45DB321D"}, id: 0x2701, remarks: "/* Buggy data sheet */"},
   181  		{vendor: "ATMEL", devices: []ChipName{"AT45DB642D"}, id: 0x2800},
   182  		{vendor: "ATMEL", devices: []ChipName{"AT49BV512"}, id: 0x03, remarks: "	/* Same as AT49F512 */"},
   183  		{vendor: "ATMEL", devices: []ChipName{"AT49F001N"}, id: 0x05, remarks: "	/* Same as AT49F001 */"},
   184  		{vendor: "ATMEL", devices: []ChipName{"AT49F001NT"}, id: 0x04, remarks: "	/* Same as AT49F001T */"},
   185  		{vendor: "ATMEL", devices: []ChipName{"AT49F002N"}, id: 0x07, remarks: "	/* for AT49F002(N)  */"},
   186  		{vendor: "ATMEL", devices: []ChipName{"AT49LH002"}, id: 0xE9},
   187  		{vendor: "ATMEL", devices: []ChipName{"AT49LH00B4"}, id: 0xED},
   188  		{vendor: "ATMEL", devices: []ChipName{"AT49LH004"}, id: 0xEE},
   189  		{vendor: "ATMEL", devices: []ChipName{"AT49F002NT"}, id: 0x08, remarks: "	/* for AT49F002(N)T */"},
   190  		{vendor: "ATMEL", devices: []ChipName{"AT49F010"}, id: 0x17, remarks: "	/* Same as AT49HF010 (some erroneous datasheets say 0x87), AT49BV010, AT49HBV010, AT49HLV010 */"},
   191  		{vendor: "ATMEL", devices: []ChipName{"AT49F020"}, id: 0x0B},
   192  		{vendor: "ATMEL", devices: []ChipName{"AT49F040"}, id: 0x13},
   193  		{vendor: "ATMEL", devices: []ChipName{"AT49F080"}, id: 0x23},
   194  		{vendor: "ATMEL", devices: []ChipName{"AT49F080T"}, id: 0x27},
   195  		/* Bright Microelectronics has the same manufacturer ID as Hyundai... */
   196  		{vendor: "BRIGHT", devices: []ChipName{"BM29F040"}, id: 0x40},
   197  		{vendor: "BRIGHT", devices: []ChipName{"BM29F400B"}, id: 0xAB},
   198  		{vendor: "BRIGHT", devices: []ChipName{"BM29F400T"}, id: 0xAD},
   199  		{vendor: "CATALYST", devices: []ChipName{"CAT28F512"}, id: 0xB8},
   200  		{vendor: "ESMT", devices: []ChipName{"F25L008A"}, id: 0x2014},
   201  		{vendor: "ESMT", devices: []ChipName{"F25L32PA"}, id: 0x2016},
   202  		{vendor: "ESMT", devices: []ChipName{"F25D08QA"}, id: 0x2534},
   203  		{vendor: "ESMT", devices: []ChipName{"F25L16QA2S"}, id: 0x4015},
   204  		{vendor: "ESMT", devices: []ChipName{"F25L32QA"}, id: 0x4016},
   205  		{vendor: "ESMT", devices: []ChipName{"F25L32QA2S"}, id: 0x4116},
   206  		{vendor: "ESMT", devices: []ChipName{"F25L64QA"}, id: 0x4117},
   207  		{vendor: "ESMT", devices: []ChipName{"F25L128QA"}, id: 0x4118},
   208  		{vendor: "ESMT", devices: []ChipName{"F49B002UA"}, id: 0x00},
   209  		// /*
   210  		//  * EN25 chips are SPI, first byte of device ID is memory type,
   211  		//  * second byte of device ID is log(bitsize)-9.
   212  		//  * Vendor and device ID of EN29 series are both prefixed with 0x7F, which
   213  		//  * is the continuation code for IDs in bank 2.
   214  		//  * Vendor ID of EN25 series is NOT prefixed with 0x7F, this results in
   215  		//  * a collision with Mitsubishi. Mitsubishi once manufactured flash chips.
   216  		//  * Let's hope they are not manufacturing SPI flash chips as well.
   217  		//  */
   218  		{vendor: "EON", devices: []ChipName{"EN25B05"}, id: 0x2010, remarks: "	/* Same as EN25P05, can be distinguished by RES/REMS: */"},
   219  		{vendor: "EON", devices: []ChipName{"EN25P05"}, id: 0x05},
   220  		{vendor: "EON", devices: []ChipName{"EN25B05T"}, id: 0x25},
   221  		{vendor: "EON", devices: []ChipName{"EN25B05B"}, id: 0x95},
   222  		{vendor: "EON", devices: []ChipName{"EN25B10"}, id: 0x2011, remarks: "	/* Same as EN25P10, can be distinguished by RES/REMS: */"},
   223  		{vendor: "EON", devices: []ChipName{"EN25P10"}, id: 0x10},
   224  		{vendor: "EON", devices: []ChipName{"EN25B10T"}, id: 0x40},
   225  		{vendor: "EON", devices: []ChipName{"EN25B10B"}, id: 0x30},
   226  		{vendor: "EON", devices: []ChipName{"EN25B20"}, id: 0x2012, remarks: "	/* Same as EN25P20, can be distinguished by RES/REMS: */"},
   227  		{vendor: "EON", devices: []ChipName{"EN25P20"}, id: 0x11},
   228  		{vendor: "EON", devices: []ChipName{"EN25B20T"}, id: 0x41},
   229  		{vendor: "EON", devices: []ChipName{"EN25B20B"}, id: 0x31},
   230  		{vendor: "EON", devices: []ChipName{"EN25B40"}, id: 0x2013, remarks: "	/* Same as EN25P40, can be distinguished by RES/REMS: */"},
   231  		{vendor: "EON", devices: []ChipName{"EN25P40"}, id: 0x12},
   232  		{vendor: "EON", devices: []ChipName{"EN25B40T"}, id: 0x42},
   233  		{vendor: "EON", devices: []ChipName{"EN25B40B"}, id: 0x32},
   234  		{vendor: "EON", devices: []ChipName{"EN25B80"}, id: 0x2014, remarks: "	/* Same as EN25P80, can be distinguished by RES/REMS: */"},
   235  		{vendor: "EON", devices: []ChipName{"EN25P80"}, id: 0x13},
   236  		{vendor: "EON", devices: []ChipName{"EN25B80T"}, id: 0x43},
   237  		{vendor: "EON", devices: []ChipName{"EN25B80B"}, id: 0x33},
   238  		{vendor: "EON", devices: []ChipName{"EN25B16"}, id: 0x2015, remarks: "	/* Same as EN25P16, can be distinguished by RES/REMS: */"},
   239  		{vendor: "EON", devices: []ChipName{"EN25P16"}, id: 0x14},
   240  		{vendor: "EON", devices: []ChipName{"EN25B16T"}, id: 0x44},
   241  		{vendor: "EON", devices: []ChipName{"EN25B16B"}, id: 0x34},
   242  		{vendor: "EON", devices: []ChipName{"EN25B32"}, id: 0x2016, remarks: "	/* Same as EN25P32, can be distinguished by RES/REMS: */"},
   243  		{vendor: "EON", devices: []ChipName{"EN25P32"}, id: 0x15},
   244  		{vendor: "EON", devices: []ChipName{"EN25B32T"}, id: 0x45},
   245  		{vendor: "EON", devices: []ChipName{"EN25B32B"}, id: 0x35},
   246  		{vendor: "EON", devices: []ChipName{"EN25B64"}, id: 0x2017, remarks: "	/* Same as EN25P64, can be distinguished by RES/REMS: */"},
   247  		{vendor: "EON", devices: []ChipName{"EN25P64"}, id: 0x16},
   248  		{vendor: "EON", devices: []ChipName{"EN25B64T"}, id: 0x46},
   249  		{vendor: "EON", devices: []ChipName{"EN25B64B"}, id: 0x36},
   250  		{vendor: "EON", devices: []ChipName{"EN25F05"}, id: 0x3110},
   251  		{vendor: "EON", devices: []ChipName{"EN25F10"}, id: 0x3111},
   252  		{vendor: "EON", devices: []ChipName{"EN25F20"}, id: 0x3112},
   253  		{vendor: "EON", devices: []ChipName{"EN25F40"}, id: 0x3113},
   254  		{vendor: "EON", devices: []ChipName{"EN25F80"}, id: 0x3114},
   255  		{vendor: "EON", devices: []ChipName{"EN25F16"}, id: 0x3115},
   256  		{vendor: "EON", devices: []ChipName{"EN25F32"}, id: 0x3116},
   257  		{vendor: "EON", devices: []ChipName{"EN25F64"}, id: 0x3117},
   258  		{vendor: "EON", devices: []ChipName{"EN25Q40"}, id: 0x3013},
   259  		{vendor: "EON", devices: []ChipName{"EN25Q80"}, id: 0x3014},
   260  		{vendor: "EON", devices: []ChipName{"EN25Q16"}, id: 0x3015, remarks: "	/* Same as EN25D16 */"},
   261  		{vendor: "EON", devices: []ChipName{"EN25Q32"}, id: 0x3016, remarks: "	/* Same as EN25Q32A and EN25Q32B */"},
   262  		{vendor: "EON", devices: []ChipName{"EN25Q64"}, id: 0x3017},
   263  		{vendor: "EON", devices: []ChipName{"EN25Q128"}, id: 0x3018},
   264  		{vendor: "EON", devices: []ChipName{"EN25QH16"}, id: 0x7015},
   265  		{vendor: "EON", devices: []ChipName{"EN25QH32"}, id: 0x7016},
   266  		{vendor: "EON", devices: []ChipName{"EN25QH64"}, id: 0x7017},
   267  		{vendor: "EON", devices: []ChipName{"EN25QH128"}, id: 0x7018},
   268  		{vendor: "EON", devices: []ChipName{"EN25QH256"}, id: 0x7019},
   269  		{vendor: "EON", devices: []ChipName{"EN25S10"}, id: 0x3811},
   270  		{vendor: "EON", devices: []ChipName{"EN25S20"}, id: 0x3812},
   271  		{vendor: "EON", devices: []ChipName{"EN25S40"}, id: 0x3813},
   272  		{vendor: "EON", devices: []ChipName{"EN25S80"}, id: 0x3814},
   273  		{vendor: "EON", devices: []ChipName{"EN25S16"}, id: 0x3815},
   274  		{vendor: "EON", devices: []ChipName{"EN25S32"}, id: 0x3816},
   275  		{vendor: "EON", devices: []ChipName{"EN25S64"}, id: 0x3817},
   276  		{vendor: "EON", devices: []ChipName{"EN25T80"}, id: 0x5114},
   277  		{vendor: "EON", devices: []ChipName{"EN25T16"}, id: 0x5115},
   278  		{vendor: "EON", devices: []ChipName{"EN29F512"}, id: 0x7F21},
   279  		{vendor: "EON", devices: []ChipName{"EN29F010"}, id: 0x20},
   280  		{vendor: "EON", devices: []ChipName{"EN29F040A"}, id: 0x7F04},
   281  		{vendor: "EON", devices: []ChipName{"EN29LV010"}, id: 0x7F6E},
   282  		{vendor: "EON", devices: []ChipName{"EN29LV040"}, id: 0x4F, remarks: "	/* Same as EN29LV040A */"},
   283  		{vendor: "EON", devices: []ChipName{"EN29LV640B"}, id: 0xCB},
   284  		{vendor: "EON", devices: []ChipName{"EN29LV640T"}, id: 0xC9},
   285  		{vendor: "EON", devices: []ChipName{"EN29LV640U"}, id: 0x7E},
   286  		{vendor: "EON", devices: []ChipName{"EN29F002T"}, id: 0x7F92, remarks: "	/* Same as EN29F002A */"},
   287  		{vendor: "EON", devices: []ChipName{"EN29F002B"}, id: 0x7F97, remarks: "	/* Same as EN29F002AN */"},
   288  		{vendor: "EON", devices: []ChipName{"EN29GL064HL"}, id: 0x7E0C01, remarks: "	/* Uniform Sectors, WP protects Top OR Bottom sector */"},
   289  		{vendor: "EON", devices: []ChipName{"EN29GL064T"}, id: 0x7E1001, remarks: "	/* Same ID as EN29GL064AT */"},
   290  		{vendor: "EON", devices: []ChipName{"EN29GL064B"}, id: 0x7E1000, remarks: "	/* Same ID as EN29GL064AB */"},
   291  		{vendor: "EON", devices: []ChipName{"EN29GL128HL"}, id: 0x7F2101, remarks: "	/* Uniform Sectors, WP protects Top OR Bottom sector */"},
   292  		{vendor: "EON", devices: []ChipName{"EN29GL256HL"}, id: 0x7F2201, remarks: "	/* Uniform Sectors, WP protects Top OR Bottom sector */"},
   293  		{vendor: "EXCEL", devices: []ChipName{"ES25P40"}, id: 0x2013},
   294  		{vendor: "EXCEL", devices: []ChipName{"ES25P80"}, id: 0x2014},
   295  		{vendor: "EXCEL", devices: []ChipName{"ES25P16"}, id: 0x2015},
   296  		{vendor: "FIDELIX", devices: []ChipName{"FM25M16"}, id: 0x4215},
   297  		{vendor: "FIDELIX", devices: []ChipName{"FM25M32"}, id: 0x4216},
   298  		{vendor: "FIDELIX", devices: []ChipName{"FM25M64"}, id: 0x4217},
   299  		{vendor: "FIDELIX", devices: []ChipName{"FM25Q08"}, id: 0x3214},
   300  		{vendor: "FIDELIX", devices: []ChipName{"FM25Q16"}, id: 0x3215, remarks: "	/* Same as FM25S16 (which is apparently single I/O only) */"},
   301  		{vendor: "FIDELIX", devices: []ChipName{"FM25Q32"}, id: 0x3216},
   302  		{vendor: "FIDELIX", devices: []ChipName{"FM25Q64"}, id: 0x3217},
   303  		{vendor: "FUJITSU", devices: []ChipName{"MBM29DL400BC"}, id: 0x0F},
   304  		{vendor: "FUJITSU", devices: []ChipName{"MBM29DL400TC"}, id: 0x0C},
   305  		{vendor: "FUJITSU", devices: []ChipName{"MBM29DL800BA"}, id: 0xCB},
   306  		{vendor: "FUJITSU", devices: []ChipName{"MBM29DL800TA"}, id: 0x4A},
   307  		{vendor: "FUJITSU", devices: []ChipName{"MBM29F002BC"}, id: 0x34},
   308  		{vendor: "FUJITSU", devices: []ChipName{"MBM29F002TC"}, id: 0xB0},
   309  		{vendor: "FUJITSU", devices: []ChipName{"MBM29F004BC"}, id: 0x7B},
   310  		{vendor: "FUJITSU", devices: []ChipName{"MBM29F004TC"}, id: 0x77},
   311  		{vendor: "FUJITSU", devices: []ChipName{"MBM29F040C"}, id: 0xA4},
   312  		{vendor: "FUJITSU", devices: []ChipName{"MBM29F080A"}, id: 0xD5},
   313  		{vendor: "FUJITSU", devices: []ChipName{"MBM29F200BC"}, id: 0x57},
   314  		{vendor: "FUJITSU", devices: []ChipName{"MBM29F200TC"}, id: 0x51},
   315  		{vendor: "FUJITSU", devices: []ChipName{"MBM29F400BC"}, id: 0xAB},
   316  		{vendor: "FUJITSU", devices: []ChipName{"MBM29F400TC"}, id: 0x23},
   317  		{vendor: "FUJITSU", devices: []ChipName{"MBM29F800BA"}, id: 0x58},
   318  		{vendor: "FUJITSU", devices: []ChipName{"MBM29F800TA"}, id: 0xD6},
   319  		{vendor: "FUJITSU", devices: []ChipName{"MBM29LV002BC"}, id: 0xC2},
   320  		{vendor: "FUJITSU", devices: []ChipName{"MBM29LV002TC"}, id: 0x40},
   321  		{vendor: "FUJITSU", devices: []ChipName{"MBM29LV004BC"}, id: 0xB6},
   322  		{vendor: "FUJITSU", devices: []ChipName{"MBM29LV004TC"}, id: 0xB5},
   323  		{vendor: "FUJITSU", devices: []ChipName{"MBM29LV008BA"}, id: 0x37},
   324  		{vendor: "FUJITSU", devices: []ChipName{"MBM29LV008TA"}, id: 0x3E},
   325  		{vendor: "FUJITSU", devices: []ChipName{"MBM29LV080A"}, id: 0x38},
   326  		{vendor: "FUJITSU", devices: []ChipName{"MBM29LV200BC"}, id: 0xBF},
   327  		{vendor: "FUJITSU", devices: []ChipName{"MBM29LV200TC"}, id: 0x3B},
   328  		{vendor: "FUJITSU", devices: []ChipName{"MBM29LV400BC"}, id: 0xBA},
   329  		{vendor: "FUJITSU", devices: []ChipName{"MBM29LV400TC"}, id: 0xB9},
   330  		{vendor: "FUJITSU", devices: []ChipName{"MBM29LV800BA"}, id: 0x5B, remarks: "	/* Same as MBM29LV800BE */"},
   331  		{vendor: "FUJITSU", devices: []ChipName{"MBM29LV800TA"}, id: 0xDA, remarks: "	/* Same as MBM29LV800TE */"},
   332  		{vendor: "FUJITSU", devices: []ChipName{"MBM29LV160BE"}, id: 0x49, remarks: "	/* 16 b mode 0x2249 */"},
   333  		{vendor: "FUJITSU", devices: []ChipName{"MBM29LV160TE"}, id: 0xC4, remarks: "	/* 16 b mode 0x22C4 */"},
   334  		{vendor: "GIGADEVICE", devices: []ChipName{"GD25T80"}, id: 0x3114},
   335  		{vendor: "GIGADEVICE", devices: []ChipName{"GD25Q512"}, id: 0x4010},
   336  		{vendor: "GIGADEVICE", devices: []ChipName{"GD25Q10"}, id: 0x4011},
   337  		{vendor: "GIGADEVICE", devices: []ChipName{"GD25Q20"}, id: 0x4012, remarks: "	/* Same as GD25QB */"},
   338  		{vendor: "GIGADEVICE", devices: []ChipName{"GD25Q40"}, id: 0x4013, remarks: "	/* Same as GD25QB */"},
   339  		{vendor: "GIGADEVICE", devices: []ChipName{"GD25Q80"}, id: 0x4014, remarks: "	/* Same as GD25Q80B (which has OTP) */"},
   340  		{vendor: "GIGADEVICE", devices: []ChipName{"GD25Q16"}, id: 0x4015, remarks: "	/* Same as GD25Q16B (which has OTP) */"},
   341  		{vendor: "GIGADEVICE", devices: []ChipName{"GD25Q32"}, id: 0x4016, remarks: "	/* Same as GD25Q32B */"},
   342  		{vendor: "GIGADEVICE", devices: []ChipName{"GD25Q64"}, id: 0x4017, remarks: "	/* Same as GD25Q64B */"},
   343  		{vendor: "GIGADEVICE", devices: []ChipName{"GD25Q128"}, id: 0x4018, remarks: "	/* GD25Q128B and GD25Q128C only, can be distinguished by SFDP */"},
   344  		{vendor: "GIGADEVICE", devices: []ChipName{"GD25VQ21B"}, id: 0x4212},
   345  		{vendor: "GIGADEVICE", devices: []ChipName{"GD25VQ41B"}, id: 0x4213, remarks: "/* Same as GD25VQ40C, can be distinguished by SFDP */"},
   346  		{vendor: "GIGADEVICE", devices: []ChipName{"GD25VQ80C"}, id: 0x4214},
   347  		{vendor: "GIGADEVICE", devices: []ChipName{"GD25VQ16C"}, id: 0x4215},
   348  		{vendor: "GIGADEVICE", devices: []ChipName{"GD25LQ40"}, id: 0x6013},
   349  		{vendor: "GIGADEVICE", devices: []ChipName{"GD25LQ80"}, id: 0x6014},
   350  		{vendor: "GIGADEVICE", devices: []ChipName{"GD25LQ16"}, id: 0x6015},
   351  		{vendor: "GIGADEVICE", devices: []ChipName{"GD25LQ32"}, id: 0x6016},
   352  		{vendor: "GIGADEVICE", devices: []ChipName{"GD25LQ64"}, id: 0x6017, remarks: "	/* Same as GD25LQ64B (which is faster) */"},
   353  		{vendor: "GIGADEVICE", devices: []ChipName{"GD25LQ128"}, id: 0x6018},
   354  		{vendor: "GIGADEVICE", devices: []ChipName{"GD29GL064CAB"}, id: 0x7E0601},
   355  		{vendor: "HYUNDAI", devices: []ChipName{"HY29F400T"}, id: 0x23, remarks: "	/* Same as HY29F400AT */"},
   356  		{vendor: "HYUNDAI", devices: []ChipName{"HY29F800B"}, id: 0x58, remarks: "	/* Same as HY29F800AB */"},
   357  		{vendor: "HYUNDAI", devices: []ChipName{"HY29LV800B"}, id: 0x5B},
   358  		{vendor: "HYUNDAI", devices: []ChipName{"HY29F040A"}, id: 0xA4},
   359  		{vendor: "HYUNDAI", devices: []ChipName{"HY29F400B"}, id: 0xAB, remarks: "	/* Same as HY29F400AB */"},
   360  		{vendor: "HYUNDAI", devices: []ChipName{"HY29F002B"}, id: 0x34},
   361  		{vendor: "HYUNDAI", devices: []ChipName{"HY29F002T"}, id: 0xB0},
   362  		{vendor: "HYUNDAI", devices: []ChipName{"HY29LV400T"}, id: 0xB9},
   363  		{vendor: "HYUNDAI", devices: []ChipName{"HY29LV400B"}, id: 0xBA},
   364  		{vendor: "HYUNDAI", devices: []ChipName{"HY29F080"}, id: 0xD5},
   365  		{vendor: "HYUNDAI", devices: []ChipName{"HY29F800T"}, id: 0xD6, remarks: "	/* Same as HY29F800AT */"},
   366  		{vendor: "HYUNDAI", devices: []ChipName{"HY29LV800T"}, id: 0xDA},
   367  		{vendor: "IMT", devices: []ChipName{"IM29F004B"}, id: 0xAE},
   368  		{vendor: "IMT", devices: []ChipName{"IM29F004T"}, id: 0xAF},
   369  		{vendor: "INTEL", devices: []ChipName{"28F320J5"}, id: 0x14},
   370  		{vendor: "INTEL", devices: []ChipName{"28F640J5"}, id: 0x15},
   371  		{vendor: "INTEL", devices: []ChipName{"28F320J3"}, id: 0x16},
   372  		{vendor: "INTEL", devices: []ChipName{"28F640J3"}, id: 0x17},
   373  		{vendor: "INTEL", devices: []ChipName{"28F128J3"}, id: 0x18},
   374  		{vendor: "INTEL", devices: []ChipName{"28F256J3"}, id: 0x1D},
   375  		{vendor: "INTEL", devices: []ChipName{"28F400T"}, id: 0x70, remarks: "	/* 28F400BV/BX/CE/CV-T */"},
   376  		{vendor: "INTEL", devices: []ChipName{"28F400B"}, id: 0x71, remarks: "	/* 28F400BV/BX/CE/CV-B */"},
   377  		{vendor: "INTEL", devices: []ChipName{"28F200T"}, id: 0x74, remarks: "	/* 28F200BL/BV/BX/CV-T */"},
   378  		{vendor: "INTEL", devices: []ChipName{"28F200B"}, id: 0x75, remarks: "	/* 28F200BL/BV/BX/CV-B */"},
   379  		{vendor: "INTEL", devices: []ChipName{"28F004T"}, id: 0x78, remarks: "	/* 28F004B5/BE/BV/BX-T */"},
   380  		{vendor: "INTEL", devices: []ChipName{"28F004B"}, id: 0x79, remarks: "	/* 28F004B5/BE/BV/BX-B */"},
   381  		{vendor: "INTEL", devices: []ChipName{"28F002T"}, id: 0x7C, remarks: "	/* 28F002BC/BL/BV/BX-T */"},
   382  		{vendor: "INTEL", devices: []ChipName{"28F002B"}, id: 0x7D, remarks: "	/* 28F002BL/BV/BX-B */"},
   383  		{vendor: "INTEL", devices: []ChipName{"28F001T"}, id: 0x94, remarks: "	/* 28F001BN/BX-T */"},
   384  		{vendor: "INTEL", devices: []ChipName{"28F001B"}, id: 0x95, remarks: "	/* 28F001BN/BX-B */"},
   385  		{vendor: "INTEL", devices: []ChipName{"28F008T"}, id: 0x98, remarks: "	/* 28F008BE/BV-T */"},
   386  		{vendor: "INTEL", devices: []ChipName{"28F008B"}, id: 0x99, remarks: "	/* 28F008BE/BV-B */"},
   387  		{vendor: "INTEL", devices: []ChipName{"28F800T"}, id: 0x9C, remarks: "	/* 28F800B5/BV/CE/CV-T */"},
   388  		{vendor: "INTEL", devices: []ChipName{"28F800B"}, id: 0x9D, remarks: "	/* 28F800B5/BV/CE/CV-B */"},
   389  		{vendor: "INTEL", devices: []ChipName{"28F016SV"}, id: 0xA0, remarks: "	/* 28F016SA/SV */"},
   390  		{vendor: "INTEL", devices: []ChipName{"28F008SA"}, id: 0xA2},
   391  		{vendor: "INTEL", devices: []ChipName{"28F008S3"}, id: 0xA6, remarks: "	/* 28F008S3/S5/SC */"},
   392  		{vendor: "INTEL", devices: []ChipName{"28F004S3"}, id: 0xA7, remarks: "	/* 28F008S3/S5/SC */"},
   393  		{vendor: "INTEL", devices: []ChipName{"28F016XS"}, id: 0xA8},
   394  		{vendor: "INTEL", devices: []ChipName{"28F016S3"}, id: 0xAA, remarks: "	/* 28F016S3/S5/SC */"},
   395  		{vendor: "INTEL", devices: []ChipName{"82802AC"}, id: 0xAC},
   396  		{vendor: "INTEL", devices: []ChipName{"82802AB"}, id: 0xAD},
   397  		{vendor: "INTEL", devices: []ChipName{"28F010"}, id: 0xB4},
   398  		{vendor: "INTEL", devices: []ChipName{"28F512"}, id: 0xB8},
   399  		{vendor: "INTEL", devices: []ChipName{"28F256A"}, id: 0xB9},
   400  		{vendor: "INTEL", devices: []ChipName{"28F020"}, id: 0xBD},
   401  		{vendor: "INTEL", devices: []ChipName{"28F016B3T"}, id: 0xD0, remarks: "	/* 28F016B3-T */"},
   402  		{vendor: "INTEL", devices: []ChipName{"28F016B3B"}, id: 0xD1, remarks: "	/* 28F016B3-B */"},
   403  		{vendor: "INTEL", devices: []ChipName{"28F008B3T"}, id: 0xD2, remarks: "	/* 28F008B3-T */"},
   404  		{vendor: "INTEL", devices: []ChipName{"28F008B3B"}, id: 0xD3, remarks: "	/* 28F008B3-B */"},
   405  		{vendor: "INTEL", devices: []ChipName{"28F004B3T"}, id: 0xD4, remarks: "	/* 28F004B3-T */"},
   406  		{vendor: "INTEL", devices: []ChipName{"28F004B3B"}, id: 0xD5, remarks: "	/* 28F004B3-B */"},
   407  		{vendor: "INTEL", devices: []ChipName{"25F160S33B8"}, id: 0x8911, remarks: "	/* Same as 25F016S33B8 */"},
   408  		{vendor: "INTEL", devices: []ChipName{"25F320S33B8"}, id: 0x8912},
   409  		{vendor: "INTEL", devices: []ChipName{"25F640S33B8"}, id: 0x8913},
   410  		{vendor: "INTEL", devices: []ChipName{"25F160S33T8"}, id: 0x8915, remarks: "	/* Same as 25F016S33T8 */"},
   411  		{vendor: "INTEL", devices: []ChipName{"25F320S33T8"}, id: 0x8916},
   412  		{vendor: "INTEL", devices: []ChipName{"25F640S33T8"}, id: 0x8917},
   413  		{vendor: "SHARP", devices: []ChipName{"LH28F008SA"}, id: 0xA2, remarks: "	/* Sharp chip, Intel Vendor ID */"},
   414  		{vendor: "SHARP", devices: []ChipName{"LH28F008SC"}, id: 0xA6, remarks: "	/* Sharp chip, Intel Vendor ID */"},
   415  		{vendor: "ISSI", devices: []ChipName{"IS25LP064"}, id: 0x6017},
   416  		{vendor: "ISSI", devices: []ChipName{"IS25LP128"}, id: 0x6018},
   417  		{vendor: "ISSI", devices: []ChipName{"IS25LP256"}, id: 0x6019},
   418  		{vendor: "ISSI", devices: []ChipName{"IS25WP032"}, id: 0x7016},
   419  		{vendor: "ISSI", devices: []ChipName{"IS25WP064"}, id: 0x7017},
   420  		{vendor: "ISSI", devices: []ChipName{"IS25WP128"}, id: 0x7018},
   421  		{vendor: "ISSI", devices: []ChipName{"IS25WP256"}, id: 0x7019},
   422  		{vendor: "ISSI", devices: []ChipName{"PMC_"}, id: 0xF9},
   423  		{vendor: "ISSI", devices: []ChipName{"PMC_"}, id: 0xF6},
   424  		{vendor: "ISSI", devices: []ChipName{"PMC_"}, id: 0x7E1000},
   425  		{vendor: "ISSI", devices: []ChipName{"PMC_"}, id: 0x7E1001},
   426  		{vendor: "ISSI", devices: []ChipName{"PMC_"}, id: 0x7E0C01},
   427  		{vendor: "ISSI", devices: []ChipName{"PMC_"}, id: 0x7E2101},
   428  		{vendor: "ISSI", devices: []ChipName{"PMC_"}, id: 0x7E2201},
   429  		/* Mask ROMs */
   430  		{vendor: "MACRONIX", devices: []ChipName{"MX23L1654"}, id: 0x0515},
   431  		{vendor: "MACRONIX", devices: []ChipName{"MX23L3254"}, id: 0x0516},
   432  		{vendor: "MACRONIX", devices: []ChipName{"MX23L6454"}, id: 0x0517},
   433  		{vendor: "MACRONIX", devices: []ChipName{"MX23L12854"}, id: 0x0518},
   434  		/* MX25 chips are SPI, first byte of device ID is memory type,
   435  		 * second byte of device ID is log(bitsize)-9.
   436  		 * Generalplus SPI chips seem to be compatible with Macronix
   437  		 * and use the same set of IDs. */
   438  		{vendor: "MACRONIX", devices: []ChipName{"MX25L512"}, id: 0x2010, remarks: "	/* Same as MX25L512E, MX25V512, MX25V512C */"},
   439  		{vendor: "MACRONIX", devices: []ChipName{"MX25L1005"}, id: 0x2011, remarks: "	/* Same as MX25L1005C, MX25L1006E */"},
   440  		{vendor: "MACRONIX", devices: []ChipName{"MX25L2005"}, id: 0x2012, remarks: "	/* Same as MX25L2005C, MX25L2006E */"},
   441  		{vendor: "MACRONIX", devices: []ChipName{"MX25L4005"}, id: 0x2013, remarks: "	/* Same as MX25L4005A, MX25L4005C, MX25L4006E */"},
   442  		{vendor: "MACRONIX", devices: []ChipName{"MX25L8005"}, id: 0x2014, remarks: "	/* Same as MX25V8005, MX25L8006E, MX25L8008E, FIXME: MX25L8073E (4k 0x20) */"},
   443  		{vendor: "MACRONIX", devices: []ChipName{"MX25L1605"}, id: 0x2015, remarks: "	/* MX25L1605 (64k 0x20); MX25L1605A/MX25L1606E/MX25L1608E (4k 0x20, 64k 0x52); MX25L1605D/MX25L1608D/MX25L1673E (4k 0x20) */"},
   444  		{vendor: "MACRONIX", devices: []ChipName{"MX25L3205"}, id: 0x2016, remarks: "	/* MX25L3205, MX25L3205A (64k 0x20); MX25L3205D/MX25L3208D (4k 0x20); MX25L3206E/MX25L3208E (4k 0x20, 64k 0x52); MX25L3273E (4k 0x20, 32k 0x52) */"},
   445  		{vendor: "MACRONIX", devices: []ChipName{"MX25L6405"}, id: 0x2017, remarks: "	/* MX25L6405, MX25L6405D (64k 0x20); MX25L6406E/MX25L6408E (4k 0x20); MX25L6436E/MX25L6445E/MX25L6465E/MX25L6473E (4k 0x20, 32k 0x52) */"},
   446  		{vendor: "MACRONIX", devices: []ChipName{"MX25L12805D"}, id: 0x2018, remarks: "	/* MX25L12805D (no 32k); MX25L12865E, MX25L12835F, MX25L12845E (32k 0x52) */"},
   447  		{vendor: "MACRONIX", devices: []ChipName{"MX25L25635F"}, id: 0x2019, remarks: "	/* Same as MX25L25639F, but the latter seems to not support REMS */"},
   448  		{vendor: "MACRONIX", devices: []ChipName{"MX25L1635D"}, id: 0x2415},
   449  		{vendor: "MACRONIX", devices: []ChipName{"MX25L1635E"}, id: 0x2515, remarks: "	/* MX25L1635{E} */"},
   450  		{vendor: "MACRONIX", devices: []ChipName{"MX66L51235F"}, id: 0x201, remarks: "a	/* MX66L51235F, MX25L51245G */"},
   451  		{vendor: "MACRONIX", devices: []ChipName{"MX25U8032E"}, id: 0x2534},
   452  		{vendor: "MACRONIX", devices: []ChipName{"MX25U1635E"}, id: 0x2535},
   453  		{vendor: "MACRONIX", devices: []ChipName{"MX25U3235E"}, id: 0x2536, remarks: "	/* Same as MX25U6435F */"},
   454  		{vendor: "MACRONIX", devices: []ChipName{"MX25U6435E"}, id: 0x2537, remarks: "	/* Same as MX25U6435F */"},
   455  		{vendor: "MACRONIX", devices: []ChipName{"MX25U12835E"}, id: 0x2538, remarks: "	/* Same as MX25U12835F */"},
   456  		{vendor: "MACRONIX", devices: []ChipName{"MX25U25635F"}, id: 0x2539},
   457  		{vendor: "MACRONIX", devices: []ChipName{"MX25U51245G"}, id: 0x253, remarks: "a"},
   458  		{vendor: "MACRONIX", devices: []ChipName{"MX25L3235D"}, id: 0x5E16, remarks: "	/* MX25L3225D/MX25L3235D/MX25L3237D */"},
   459  		{vendor: "MACRONIX", devices: []ChipName{"MX25L6495F"}, id: 0x9517},
   460  		{vendor: "MACRONIX", devices: []ChipName{"MX25R6435F"}, id: 0x2817},
   461  		{vendor: "MACRONIX", devices: []ChipName{"MX29F001B"}, id: 0x19},
   462  		{vendor: "MACRONIX", devices: []ChipName{"MX29F001T"}, id: 0x18},
   463  		{vendor: "MACRONIX", devices: []ChipName{"MX29F002B"}, id: 0x34, remarks: "	/* Same as MX29F002NB; N has reset pin n/c. */"},
   464  		{vendor: "MACRONIX", devices: []ChipName{"MX29F002T"}, id: 0xB0, remarks: "	/* Same as MX29F002NT; N has reset pin n/c. */"},
   465  		{vendor: "MACRONIX", devices: []ChipName{"MX29F004B"}, id: 0x46},
   466  		{vendor: "MACRONIX", devices: []ChipName{"MX29F004T"}, id: 0x45},
   467  		{vendor: "MACRONIX", devices: []ChipName{"MX29F022B"}, id: 0x37, remarks: "	/* Same as MX29F022NB */"},
   468  		{vendor: "MACRONIX", devices: []ChipName{"MX29F022T"}, id: 0x36, remarks: "	/* Same as MX29F022NT */"},
   469  		{vendor: "MACRONIX", devices: []ChipName{"MX29F040"}, id: 0xA4, remarks: "	/* Same as MX29F040C */"},
   470  		{vendor: "MACRONIX", devices: []ChipName{"MX29F080"}, id: 0xD5},
   471  		{vendor: "MACRONIX", devices: []ChipName{"MX29F200B"}, id: 0x57, remarks: "	/* Same as MX29F200CB */"},
   472  		{vendor: "MACRONIX", devices: []ChipName{"MX29F200T"}, id: 0x51, remarks: "	/* Same as MX29F200CT */"},
   473  		{vendor: "MACRONIX", devices: []ChipName{"MX29F400B"}, id: 0xAB, remarks: "	/* Same as MX29F400CB */"},
   474  		{vendor: "MACRONIX", devices: []ChipName{"MX29F400T"}, id: 0x23, remarks: "	/* Same as MX29F400CT */"},
   475  		{vendor: "MACRONIX", devices: []ChipName{"MX29F800B"}, id: 0x58},
   476  		{vendor: "MACRONIX", devices: []ChipName{"MX29F800T"}, id: 0xD6},
   477  		{vendor: "MACRONIX", devices: []ChipName{"MX29GL320EB"}, id: 0x7E1A00},
   478  		{vendor: "MACRONIX", devices: []ChipName{"MX29GL320ET"}, id: 0x7E1A01},
   479  		{vendor: "MACRONIX", devices: []ChipName{"MX29GL320EHL"}, id: 0x7E1D00},
   480  		{vendor: "MACRONIX", devices: []ChipName{"MX29GL640EB"}, id: 0x7E1000},
   481  		{vendor: "MACRONIX", devices: []ChipName{"MX29GL640ET"}, id: 0x7E1001},
   482  		{vendor: "MACRONIX", devices: []ChipName{"MX29GL640EHL"}, id: 0x7E0C01},
   483  		{vendor: "MACRONIX", devices: []ChipName{"MX29GL128F"}, id: 0x7E2101, remarks: "/* Same as MX29GL128E */"},
   484  		{vendor: "MACRONIX", devices: []ChipName{"MX29GL256F"}, id: 0x7E2201, remarks: "/* Same as MX29GL256E */"},
   485  		{vendor: "MACRONIX", devices: []ChipName{"MX29GL512F"}, id: 0x7E2301},
   486  		{vendor: "MACRONIX", devices: []ChipName{"MX68GL1G0F"}, id: 0x7E2801},
   487  		{vendor: "MACRONIX", devices: []ChipName{"MX29LV002CB"}, id: 0x5A},
   488  		{vendor: "MACRONIX", devices: []ChipName{"MX29LV002CT"}, id: 0x59},
   489  		{vendor: "MACRONIX", devices: []ChipName{"MX29LV004B"}, id: 0xB6, remarks: "	/* Same as MX29LV004CB */"},
   490  		{vendor: "MACRONIX", devices: []ChipName{"MX29LV004T"}, id: 0xB5, remarks: "	/* Same as MX29LV004CT */"},
   491  		{vendor: "MACRONIX", devices: []ChipName{"MX29LV008B"}, id: 0x37, remarks: "	/* Same as MX29LV008CB */"},
   492  		{vendor: "MACRONIX", devices: []ChipName{"MX29LV008T"}, id: 0x3E, remarks: "	/* Same as MX29LV008CT */"},
   493  		{vendor: "MACRONIX", devices: []ChipName{"MX29LV040"}, id: 0x4F, remarks: "	/* Same as MX29LV040C */"},
   494  		{vendor: "MACRONIX", devices: []ChipName{"MX29LV081"}, id: 0x38},
   495  		{vendor: "MACRONIX", devices: []ChipName{"MX29LV128DB"}, id: 0x7A},
   496  		{vendor: "MACRONIX", devices: []ChipName{"MX29LV128DT"}, id: 0x7E},
   497  		{vendor: "MACRONIX", devices: []ChipName{"MX29LV160DB"}, id: 0x49, remarks: "	/* Same as MX29LV161DB/MX29LV160CB */"},
   498  		{vendor: "MACRONIX", devices: []ChipName{"MX29LV160DT"}, id: 0xC4, remarks: "	/* Same as MX29LV161DT/MX29LV160CT */"},
   499  		{vendor: "MACRONIX", devices: []ChipName{"MX29LV320DB"}, id: 0xA8, remarks: "	/* Same as MX29LV321DB */"},
   500  		{vendor: "MACRONIX", devices: []ChipName{"MX29LV320DT"}, id: 0xA7, remarks: "	/* Same as MX29LV321DT */"},
   501  		{vendor: "MACRONIX", devices: []ChipName{"MX29LV400B"}, id: 0xBA, remarks: "	/* Same as MX29LV400CB */"},
   502  		{vendor: "MACRONIX", devices: []ChipName{"MX29LV400T"}, id: 0xB9, remarks: "	/* Same as MX29LV400CT */"},
   503  		{vendor: "MACRONIX", devices: []ChipName{"MX29LV640DB"}, id: 0xCB, remarks: "	/* Same as MX29LV640EB */"},
   504  		{vendor: "MACRONIX", devices: []ChipName{"MX29LV640DT"}, id: 0xC9, remarks: "	/* Same as MX29LV640ET */"},
   505  		{vendor: "MACRONIX", devices: []ChipName{"MX29LV800B"}, id: 0x5B, remarks: "	/* Same as MX29LV800CB */"},
   506  		{vendor: "MACRONIX", devices: []ChipName{"MX29LV800T"}, id: 0xDA, remarks: "	/* Same as MX29LV800CT */"},
   507  		{vendor: "MACRONIX", devices: []ChipName{"MX29SL402CB"}, id: 0xF1},
   508  		{vendor: "MACRONIX", devices: []ChipName{"MX29SL402CT"}, id: 0x70},
   509  		{vendor: "MACRONIX", devices: []ChipName{"MX29SL800CB"}, id: 0x6B, remarks: "	/* Same as MX29SL802CB */"},
   510  		{vendor: "MACRONIX", devices: []ChipName{"MX29SL800CT"}, id: 0xEA, remarks: "	/* Same as MX29SL802CT */"},
   511  		/* Nantronics Semiconductors is listed in JEP106AJ in bank 7, so it should have 6 continuation codes in front
   512  		 * of the manufacturer ID of 0xD5. httpName://www.nantronicssemi.com */
   513  		{vendor: "NANTRONICS", devices: []ChipName{"N25S10"}, id: 0x3011},
   514  		{vendor: "NANTRONICS", devices: []ChipName{"N25S20"}, id: 0x3012},
   515  		{vendor: "NANTRONICS", devices: []ChipName{"N25S40"}, id: 0x3013},
   516  		{vendor: "NANTRONICS", devices: []ChipName{"N25S80"}, id: 0x3014},
   517  		{vendor: "NANTRONICS", devices: []ChipName{"N25S16"}, id: 0x3015},
   518  		/*
   519  		 * Programmable Micro Corp is listed in JEP106W in bank 2, so it should
   520  		 * have a 0x7F continuation code prefix.
   521  		 * Apparently PMC was renamed to "Chingis Technology Corporation"httpName://www.chingistek.com which is now a
   522  		 * subsidiary of ISSI. They continue to use the PMC manufacturer ID (instead of ISSI's) nevertheless, even for
   523  		 * new chips with IS* model numbers.
   524  		 */
   525  		{vendor: "PMC", devices: []ChipName{"PM25LD256C"}, id: 0x2F},
   526  		{vendor: "PMC", devices: []ChipName{"PM25LD512"}, id: 0x20, remarks: "	/* Same as Pm25LD512C, but the latter has more locking options. */"},
   527  		{vendor: "PMC", devices: []ChipName{"PM25LD010"}, id: 0x21, remarks: "	/* Same as Pm25LD010C, but the latter has more locking options. */"},
   528  		{vendor: "PMC", devices: []ChipName{"PM25LD020"}, id: 0x22, remarks: "	/* Same as Pm25LD020C, but the latter has more locking options. */"},
   529  		{vendor: "PMC", devices: []ChipName{"PM25LQ020"}, id: 0x42},
   530  		{vendor: "PMC", devices: []ChipName{"PM25LQ040"}, id: 0x43},
   531  		{vendor: "PMC", devices: []ChipName{"PM25LQ080"}, id: 0x44},
   532  		{vendor: "PMC", devices: []ChipName{"PM25LQ016"}, id: 0x45},
   533  		{vendor: "PMC", devices: []ChipName{"PM25LQ032C"}, id: 0x46},
   534  		{vendor: "PMC", devices: []ChipName{"PM25LV512"}, id: 0x7B, remarks: "	/* Same as Pm25LV512A */"},
   535  		{vendor: "PMC", devices: []ChipName{"PM25LV010"}, id: 0x7C, remarks: "	/* Same as Pm25LV010A, but the former does not support RDID but RES3 only. */"},
   536  		{vendor: "PMC", devices: []ChipName{"PM25LV020"}, id: 0x7D},
   537  		{vendor: "PMC", devices: []ChipName{"PM25LV040"}, id: 0x7E, remarks: "	/* Same as PM25LD040(C), but the latter supports more features. */"},
   538  		{vendor: "PMC", devices: []ChipName{"PM25LV080B"}, id: 0x13},
   539  		{vendor: "PMC", devices: []ChipName{"PM25LV016B"}, id: 0x14},
   540  		{vendor: "PMC", devices: []ChipName{"PM29F002T"}, id: 0x1D},
   541  		{vendor: "PMC", devices: []ChipName{"PM29F002B"}, id: 0x2D},
   542  		{vendor: "PMC", devices: []ChipName{"PM39LV512"}, id: 0x1B, remarks: "	/* Same as IS39LV512 */"},
   543  		{vendor: "PMC", devices: []ChipName{"PM39F010"}, id: 0x1C, remarks: "	/* Same as Pm39LV010, IS39LV010 */"},
   544  		{vendor: "PMC", devices: []ChipName{"PM39LV020"}, id: 0x3D},
   545  		{vendor: "PMC", devices: []ChipName{"PM39LV040"}, id: 0x3E, remarks: "	/* Same as IS39LV040 */"},
   546  		{vendor: "PMC", devices: []ChipName{"PM39F020"}, id: 0x4D},
   547  		{vendor: "PMC", devices: []ChipName{"PM39F040"}, id: 0x4E},
   548  		{vendor: "PMC", devices: []ChipName{"PM49FL002"}, id: 0x6D},
   549  		{vendor: "PMC", devices: []ChipName{"PM49FL004"}, id: 0x6E},
   550  		/*
   551  		 * The Sanyo chip found so far uses SPI, first byte is manufacture code,
   552  		 * second byte is the device code,
   553  		 * third byte is a placeholder byte.
   554  		 */
   555  		{vendor: "SANYO", devices: []ChipName{"LE25FW203A"}, id: 0x1600},
   556  		{vendor: "SANYO", devices: []ChipName{"LE25FW403A"}, id: 0x1100},
   557  		{vendor: "SANYO", devices: []ChipName{"LE25FW106"}, id: 0x15},
   558  		{vendor: "SANYO", devices: []ChipName{"LE25FW406"}, id: 0x07, remarks: "	/* RES2 */"},
   559  		{vendor: "SANYO", devices: []ChipName{"LE25FW418A"}, id: 0x10, remarks: "	/* RES2 and some weird 1 byte RDID variant */"},
   560  		{vendor: "SANYO", devices: []ChipName{"LE25FW406A"}, id: 0x1A, remarks: "	/* RES2, no datasheet */"},
   561  		{vendor: "SANYO", devices: []ChipName{"LE25FU106B"}, id: 0x1D},
   562  		{vendor: "SANYO", devices: []ChipName{"LE25FU206"}, id: 0x44},
   563  		{vendor: "SANYO", devices: []ChipName{"LE25FU206A"}, id: 0x0612},
   564  		{vendor: "SANYO", devices: []ChipName{"LE25FU406B"}, id: 0x1E, remarks: "	/* LE25FW418A without HD_READ mode option variant */"},
   565  		{vendor: "SANYO", devices: []ChipName{"LE25FU406C"}, id: 0x0613, remarks: "	/* Also known as LE25U40CMC apparently */"},
   566  		{vendor: "SANYO", devices: []ChipName{"LE25FW806"}, id: 0x26, remarks: "	/* RES2 and some weird 1 byte RDID variant */"},
   567  		{vendor: "SANYO", devices: []ChipName{"LE25FW808"}, id: 0x20, remarks: "	/* RES2 and some weird 1 byte RDID variant */"},
   568  		{vendor: "SHARP_LH28F008BJ_", devices: []ChipName{"PT"}, id: 0xEC},
   569  		{vendor: "SHARP_LH28F008BJ_", devices: []ChipName{"PB"}, id: 0xED},
   570  		{vendor: "SHARP_LH28F800BV_", devices: []ChipName{"BTL"}, id: 0x4B},
   571  		{vendor: "SHARP_LH28F800BV_", devices: []ChipName{"BV"}, id: 0x4D},
   572  		{vendor: "SHARP_LH28F800BV_", devices: []ChipName{"TV"}, id: 0x4C},
   573  		{vendor: "SHARP", devices: []ChipName{"LHF00L02"}, id: 0xC9, remarks: "	/* Same as LHF00L06/LHF00L07 */"},
   574  		{vendor: "SHARP", devices: []ChipName{"LHF00L04"}, id: 0xCF, remarks: "	/* Same as LHF00L03/LHF00L05 */"},
   575  		/* Spansion was previously a joint venture of AMD and Fujitsu. */
   576  		/* S25 chips are SPI. The first device ID byte is memory type and
   577  		 * the second device ID byte is memory capacity. */
   578  		{vendor: "SPANSION", devices: []ChipName{"S25FL004A"}, id: 0x0212},
   579  		{vendor: "SPANSION", devices: []ChipName{"S25FL008A"}, id: 0x0213},
   580  		{vendor: "SPANSION", devices: []ChipName{"S25FL016A"}, id: 0x0214},
   581  		{vendor: "SPANSION", devices: []ChipName{"S25FL032A"}, id: 0x0215, remarks: "	/* Same as S25FL032P, but the latter supports EDI and CFI */"},
   582  		{vendor: "SPANSION", devices: []ChipName{"S25FL064A"}, id: 0x0216, remarks: "	/* Same as S25FL064P, but the latter supports EDI and CFI */"},
   583  		{vendor: "SPANSION", devices: []ChipName{"S25FL128"}, id: 0x2018, remarks: "	/* Same ID for various S25FL127S, S25FL128P, S25FL128S and S25FL129P (including dual-die S70FL256P) variants (EDI supported) */"},
   584  		{vendor: "SPANSION", devices: []ChipName{"S25FL256"}, id: 0x0219},
   585  		{vendor: "SPANSION", devices: []ChipName{"S25FL512"}, id: 0x0220},
   586  		{vendor: "SPANSION", devices: []ChipName{"S25FL204"}, id: 0x4013},
   587  		{vendor: "SPANSION", devices: []ChipName{"S25FL208"}, id: 0x4014},
   588  		{vendor: "SPANSION", devices: []ChipName{"S25FL216"}, id: 0x4015, remarks: "	/* Same as S25FL216K, but the latter supports OTP, 3 status regs, quad I/O, SFDP etc. */"},
   589  		{vendor: "SPANSION", devices: []ChipName{"S25FL132K"}, id: 0x4016},
   590  		{vendor: "SPANSION", devices: []ChipName{"S25FL164K"}, id: 0x4017},
   591  		/* Spansion 29GL families got a suffix indicating the process technology but share the same 3-Byte IDs. They can
   592  		 * however be differentiated by CFI byte 45h. Some versions exist which have special top or bottom boot sectors
   593  		 * and various WP configurations (not heeded in the table below).
   594  		 *
   595  		 * Suf.  Process Sector Sz  Rd Page  Wr Page  Data Width  OTP Sz   Min Size     Max Size
   596  		 *  A     200 nm    64 kB      8 B     32 B     x8/x16     256 B   16Mb/ 2MB   64Mb/  8MB
   597  		 *  M     230 nm    64 kB      8 B     32 B     x8/x16     256 B   32Mb/ 4MB  256Mb/ 32MB
   598  		 *  N*    110 nm    64 kB     16 B     32 B     x8/x16     256 B   32Mb/ 4MB   64Mb/  8MB
   599  		 *  N*    110 nm   128 kB     16 B     32 B     x8/x16     256 B  128Mb/16MB  256Mb/ 64MB
   600  		 *  P      90 nm   128 kB     16 B     64 B     x8/x16     256 B  128Mb/16MB    2Gb/256MB
   601  		 *  S      65 nm   128 kB     32 B    512 B     x8 only    512 B  128Mb/16MB    2Gb/256MB
   602  		 *
   603  		 * For the N series there are two subgroupsName: the 4 and 8MB devices (S29GL032N, S29GL064N) have 64 kB erase
   604  		 * sectors while the bigger chips got 128 kB sectors.
   605  		 * Each series includes multiple models varying in speedgrade, boot block configurations etc.
   606  		 */
   607  		{vendor: "SPANSION_S29GL016", devices: []ChipName{"1"}, id: 0xC4, remarks: "	/* Top Boot Sector, WP protects Top 2 sectors */"},
   608  		{vendor: "SPANSION_S29GL016", devices: []ChipName{"2"}, id: 0x49, remarks: "	/* Bottom Boot Sector, WP protects Bottom 2 sectors */"},
   609  		/* Same IDs for S29GL032A, S29GL032M, S29GL032N (variations) */
   610  		{vendor: "SPANSION_S29GL032", devices: []ChipName{"1289"}, id: 0x7E1D00, remarks: "	/* Uniform Sectors, WP protects Top OR Bottom sector */"},
   611  		{vendor: "SPANSION_S29GL032", devices: []ChipName{"3"}, id: 0x7E1A01, remarks: "	/* Top Boot Sector, WP protects Top 2 sectors */"},
   612  		{vendor: "SPANSION_S29GL032", devices: []ChipName{"4"}, id: 0x7E1A00, remarks: "	/* Bottom Boot Sector, WP protects Bottom 2 sectors */"},
   613  		/* Same IDs for S29GL064A, S29GL064M, S29GL064N, S29GL064S (variations) */
   614  		{vendor: "SPANSION_S29GL064", devices: []ChipName{"1289"}, id: 0x7E0C01, remarks: "	/* Uniform Sectors, WP protects Top OR Bottom sector */"},
   615  		{vendor: "SPANSION_S29GL064", devices: []ChipName{"3"}, id: 0x7E1001, remarks: "	/* Top Boot Sector, WP protects Top 2 sectors */"},
   616  		{vendor: "SPANSION_S29GL064", devices: []ChipName{"4"}, id: 0x7E1000, remarks: "	/* Bottom Boot Sector, WP protects Bottom 2 sectors */"},
   617  		{vendor: "SPANSION_S29GL064", devices: []ChipName{"567"}, id: 0x7E1301, remarks: "	/* x16 only, Uniform Sectors */"},
   618  		{vendor: "SPANSION", devices: []ChipName{"S29GL128"}, id: 0x7E2101, remarks: "	/* Same ID for S29GL128M, S29GL128N, S29GL128P, S29GL128S */"},
   619  		{vendor: "SPANSION", devices: []ChipName{"S29GL256"}, id: 0x7E2201, remarks: "	/* Same ID for S29GL256M, S29GL256N, S29GL256P, S29GL256S */"},
   620  		{vendor: "SPANSION", devices: []ChipName{"S29GL512"}, id: 0x7E2301, remarks: "	/* Same ID for S29GL512P, S29GL512S */"},
   621  		{vendor: "SPANSION", devices: []ChipName{"S29GL01G"}, id: 0x7E2801, remarks: "	/* Same ID for S29GL01GP, S29GL01GS */"},
   622  		{vendor: "SPANSION", devices: []ChipName{"S70GL02G"}, id: 0x7E4801, remarks: "	/* Same ID for S70GL02GP, S70GL02GS; based on two S29GL01G dies respectively */"},
   623  		/*
   624  		 * SST25 chips are SPI, first byte of device ID is memory type, second
   625  		 * byte of device ID is related to log(bitsize) at least for some chips.
   626  		 */
   627  		{vendor: "SST_SST25LF020", devices: []ChipName{"REMS"}, id: 0x43, remarks: "	/* REMS or RES opcode */"},
   628  		{vendor: "SST", devices: []ChipName{"SST25WF512"}, id: 0x2501},
   629  		{vendor: "SST", devices: []ChipName{"SST25WF010"}, id: 0x2502},
   630  		{vendor: "SST", devices: []ChipName{"SST25WF020"}, id: 0x2503},
   631  		{vendor: "SST", devices: []ChipName{"SST25WF040"}, id: 0x2504},
   632  		{vendor: "SST", devices: []ChipName{"SST25WF080"}, id: 0x2505},
   633  		/* There exist some successors to members of the SST25WF family with alphabetic suffixes. Their datasheets show
   634  		 * a 4 byte long response w/o a vendor ID. The first byte is 0x62 that is actually Sanyo's and might be due to
   635  		 * a collaboration in the mid 2000ies between Sanyo and SST. */
   636  		{vendor: "SST", devices: []ChipName{"SST25WF020A"}, id: 0x1612},
   637  		{vendor: "SST", devices: []ChipName{"SST25WF040B"}, id: 0x1613},
   638  		{vendor: "SST", devices: []ChipName{"SST25WF080B"}, id: 0x1614},
   639  		{vendor: "SST_SST25VF512", devices: []ChipName{"REMS"}, id: 0x48, remarks: "	/* REMS or RES opcode, same as SST25VF512A */"},
   640  		{vendor: "SST_SST25VF010", devices: []ChipName{"REMS"}, id: 0x49, remarks: "	/* REMS or RES opcode, same as SST25VF010A */"},
   641  		{vendor: "SST_SST25VF020", devices: []ChipName{"REMS"}, id: 0x43, remarks: "	/* REMS or RES opcode, same as SST25LF020A */"},
   642  		{vendor: "SST", devices: []ChipName{"SST25VF020B"}, id: 0x258C},
   643  		{vendor: "SST_SST25VF040", devices: []ChipName{"REMS"}, id: 0x44, remarks: "	/* REMS or RES opcode, same as SST25LF040A */"},
   644  		{vendor: "SST", devices: []ChipName{"SST25VF040B"}, id: 0x258D},
   645  		{vendor: "SST_SST25VF040B", devices: []ChipName{"REMS"}, id: 0x8D, remarks: "	/* REMS or RES opcode */"},
   646  		{vendor: "SST_SST25VF080", devices: []ChipName{"REMS"}, id: 0x80, remarks: "	/* REMS or RES opcode, same as SST25LF080A */"},
   647  		{vendor: "SST", devices: []ChipName{"SST25VF080B"}, id: 0x258E},
   648  		{vendor: "SST_SST25VF080B", devices: []ChipName{"REMS"}, id: 0x8E, remarks: "	/* REMS or RES opcode */"},
   649  		{vendor: "SST", devices: []ChipName{"SST25VF016B"}, id: 0x2541},
   650  		{vendor: "SST", devices: []ChipName{"SST25VF032B"}, id: 0x254A},
   651  		{vendor: "SST_SST25VF032B", devices: []ChipName{"REMS"}, id: 0x4A, remarks: "	/* REMS or RES opcode */"},
   652  		{vendor: "SST", devices: []ChipName{"SST25VF064C"}, id: 0x254B},
   653  		{vendor: "SST", devices: []ChipName{"SST26VF016"}, id: 0x2601},
   654  		{vendor: "SST", devices: []ChipName{"SST26VF032"}, id: 0x2602},
   655  		{vendor: "SST", devices: []ChipName{"SST26VF016B"}, id: 0x2641},
   656  		{vendor: "SST", devices: []ChipName{"SST26VF032B"}, id: 0x2642},
   657  		{vendor: "SST", devices: []ChipName{"SST26VF064B"}, id: 0x2643},
   658  		{vendor: "SST", devices: []ChipName{"SST27SF512"}, id: 0xA4},
   659  		{vendor: "SST", devices: []ChipName{"SST27SF010"}, id: 0xA5},
   660  		{vendor: "SST", devices: []ChipName{"SST27SF020"}, id: 0xA6},
   661  		{vendor: "SST", devices: []ChipName{"SST27VF010"}, id: 0xA9},
   662  		{vendor: "SST", devices: []ChipName{"SST27VF020"}, id: 0xAA},
   663  		{vendor: "SST", devices: []ChipName{"SST28SF040"}, id: 0x04},
   664  		{vendor: "SST", devices: []ChipName{"SST29LE512"}, id: 0x3D, remarks: "	/* Same as SST29VE512 */"},
   665  		{vendor: "SST", devices: []ChipName{"SST29EE512"}, id: 0x5D},
   666  		{vendor: "SST", devices: []ChipName{"SST29EE010"}, id: 0x07},
   667  		{vendor: "SST", devices: []ChipName{"SST29LE010"}, id: 0x08, remarks: "	/* Same as SST29VE010 */"},
   668  		{vendor: "SST", devices: []ChipName{"SST29EE020A"}, id: 0x10, remarks: "	/* Same as SST29EE020 */"},
   669  		{vendor: "SST", devices: []ChipName{"SST29LE020"}, id: 0x12, remarks: "	/* Same as SST29VE020 */"},
   670  		{vendor: "SST", devices: []ChipName{"SST29SF020"}, id: 0x24},
   671  		{vendor: "SST", devices: []ChipName{"SST29VF020"}, id: 0x25},
   672  		{vendor: "SST", devices: []ChipName{"SST29SF040"}, id: 0x13},
   673  		{vendor: "SST", devices: []ChipName{"SST29VF040"}, id: 0x14},
   674  		{vendor: "SST", devices: []ChipName{"SST39SF512"}, id: 0xB4},
   675  		{vendor: "SST", devices: []ChipName{"SST39SF010"}, id: 0xB5},
   676  		{vendor: "SST", devices: []ChipName{"SST39SF020"}, id: 0xB6, remarks: "	/* Same as 39SF020A */"},
   677  		{vendor: "SST", devices: []ChipName{"SST39SF040"}, id: 0xB7},
   678  		{vendor: "SST", devices: []ChipName{"SST39VF512"}, id: 0xD4},
   679  		{vendor: "SST", devices: []ChipName{"SST39VF010"}, id: 0xD5},
   680  		{vendor: "SST", devices: []ChipName{"SST39VF020"}, id: 0xD6, remarks: "	/* Same as 39LF020 */"},
   681  		{vendor: "SST", devices: []ChipName{"SST39VF040"}, id: 0xD7, remarks: "	/* Same as 39LF040 */"},
   682  		{vendor: "SST", devices: []ChipName{"SST39VF080"}, id: 0xD8, remarks: "	/* Same as 39LF080/39VF080/39VF088 */"},
   683  		{vendor: "SST", devices: []ChipName{"SST45VF512"}, id: 0x41, remarks: "	/* REMS, read opcode 0xFF */"},
   684  		{vendor: "SST", devices: []ChipName{"SST45LF010"}, id: 0x42, remarks: "	/* REMS, read opcode 0xFF, 'funny' other opcodes */"},
   685  		{vendor: "SST", devices: []ChipName{"SST45VF010"}, id: 0x45, remarks: "	/* REMS, read opcode 0xFF */"},
   686  		{vendor: "SST", devices: []ChipName{"SST45VF020"}, id: 0x43, remarks: "	/* REMS, read opcode 0xFF */"},
   687  		{vendor: "SST", devices: []ChipName{"SST49LF040B"}, id: 0x50},
   688  		{vendor: "SST", devices: []ChipName{"SST49LF040"}, id: 0x51},
   689  		{vendor: "SST", devices: []ChipName{"SST49LF020"}, id: 0x61},
   690  		{vendor: "SST", devices: []ChipName{"SST49LF020A"}, id: 0x52},
   691  		{vendor: "SST", devices: []ChipName{"SST49LF030A"}, id: 0x1C},
   692  		{vendor: "SST", devices: []ChipName{"SST49LF080A"}, id: 0x5B},
   693  		{vendor: "SST", devices: []ChipName{"SST49LF002A"}, id: 0x57},
   694  		{vendor: "SST", devices: []ChipName{"SST49LF003A"}, id: 0x1B},
   695  		{vendor: "SST", devices: []ChipName{"SST49LF004A"}, id: 0x60, remarks: "	/* Same as 49LF004B */"},
   696  		{vendor: "SST", devices: []ChipName{"SST49LF008A"}, id: 0x5A},
   697  		{vendor: "SST", devices: []ChipName{"SST49LF004C"}, id: 0x54},
   698  		{vendor: "SST", devices: []ChipName{"SST49LF008C"}, id: 0x59},
   699  		{vendor: "SST", devices: []ChipName{"SST49LF016C"}, id: 0x5C},
   700  		{vendor: "SST", devices: []ChipName{"SST49LF160C"}, id: 0x4C},
   701  		/*
   702  		 * ST25P chips are SPI, first byte of device ID is memory type, second
   703  		 * byte of device ID is related to log(bitsize) at least for some chips.
   704  		 */
   705  		{vendor: "ST", devices: []ChipName{"M25P05A"}, id: 0x2010},
   706  		{vendor: "ST_M25P05", devices: []ChipName{"RES"}, id: 0x05},
   707  		{vendor: "ST", devices: []ChipName{"M25P10A"}, id: 0x2011},
   708  		{vendor: "ST_M25P10", devices: []ChipName{"RES"}, id: 0x10},
   709  		{vendor: "ST", devices: []ChipName{"M25P20"}, id: 0x2012},
   710  		{vendor: "ST_M25P20", devices: []ChipName{"RES"}, id: 0x11},
   711  		{vendor: "ST", devices: []ChipName{"M25P40"}, id: 0x2013},
   712  		{vendor: "ST_M25P40", devices: []ChipName{"RES"}, id: 0x12},
   713  		{vendor: "ST", devices: []ChipName{"M25P80"}, id: 0x2014},
   714  		{vendor: "ST", devices: []ChipName{"M25P16"}, id: 0x2015},
   715  		{vendor: "ST", devices: []ChipName{"M25P32"}, id: 0x2016},
   716  		{vendor: "ST", devices: []ChipName{"M25P64"}, id: 0x2017},
   717  		{vendor: "ST", devices: []ChipName{"M25P128"}, id: 0x2018},
   718  		{vendor: "ST", devices: []ChipName{"M45PE10"}, id: 0x4011},
   719  		{vendor: "ST", devices: []ChipName{"M45PE20"}, id: 0x4012},
   720  		{vendor: "ST", devices: []ChipName{"M45PE40"}, id: 0x4013},
   721  		{vendor: "ST", devices: []ChipName{"M45PE80"}, id: 0x4014},
   722  		{vendor: "ST", devices: []ChipName{"M45PE16"}, id: 0x4015},
   723  		{vendor: "ST", devices: []ChipName{"M25PX80"}, id: 0x7114},
   724  		{vendor: "ST", devices: []ChipName{"M25PX16"}, id: 0x7115},
   725  		{vendor: "ST", devices: []ChipName{"M25PX32"}, id: 0x7116},
   726  		{vendor: "ST", devices: []ChipName{"M25PX64"}, id: 0x7117},
   727  		{vendor: "ST", devices: []ChipName{"M25PE10"}, id: 0x8011},
   728  		{vendor: "ST", devices: []ChipName{"M25PE20"}, id: 0x8012},
   729  		{vendor: "ST", devices: []ChipName{"M25PE40"}, id: 0x8013},
   730  		{vendor: "ST", devices: []ChipName{"M25PE80"}, id: 0x8014},
   731  		{vendor: "ST", devices: []ChipName{"M25PE16"}, id: 0x8015},
   732  		{vendor: "ST", devices: []ChipName{"M50FLW040A"}, id: 0x08},
   733  		{vendor: "ST", devices: []ChipName{"M50FLW040B"}, id: 0x28},
   734  		{vendor: "ST", devices: []ChipName{"M50FLW080A"}, id: 0x80},
   735  		{vendor: "ST", devices: []ChipName{"M50FLW080B"}, id: 0x81},
   736  		{vendor: "ST", devices: []ChipName{"M50FW002"}, id: 0x29},
   737  		{vendor: "ST", devices: []ChipName{"M50FW040"}, id: 0x2C},
   738  		{vendor: "ST", devices: []ChipName{"M50FW080"}, id: 0x2D},
   739  		{vendor: "ST", devices: []ChipName{"M50FW016"}, id: 0x2E},
   740  		{vendor: "ST", devices: []ChipName{"M50LPW080"}, id: 0x2F},
   741  		{vendor: "ST", devices: []ChipName{"M50LPW116"}, id: 0x30},
   742  		{vendor: "ST", devices: []ChipName{"M29F002B"}, id: 0x34, remarks: "	/* Same as M29F002BB */"},
   743  		{vendor: "ST", devices: []ChipName{"M29F002T"}, id: 0xB0, remarks: "	/* Same as M29F002BT/M29F002NT/M29F002BNT */"},
   744  		{vendor: "ST", devices: []ChipName{"M29F040B"}, id: 0xE2, remarks: "	/* Same as M29F040 */"},
   745  		{vendor: "ST", devices: []ChipName{"M29F080"}, id: 0xF1},
   746  		{vendor: "ST", devices: []ChipName{"M29F200BT"}, id: 0xD3},
   747  		{vendor: "ST", devices: []ChipName{"M29F200BB"}, id: 0xD4},
   748  		{vendor: "ST", devices: []ChipName{"M29F400BT"}, id: 0xD5, remarks: "	/* Same as M29F400T */"},
   749  		{vendor: "ST", devices: []ChipName{"M29F400BB"}, id: 0xD6, remarks: "	/* Same as M29F400B */"},
   750  		{vendor: "ST", devices: []ChipName{"M29F800DB"}, id: 0x58},
   751  		{vendor: "ST", devices: []ChipName{"M29F800DT"}, id: 0xEC},
   752  		{vendor: "ST", devices: []ChipName{"M29W010B"}, id: 0x23},
   753  		{vendor: "ST", devices: []ChipName{"M29W040B"}, id: 0xE3},
   754  		{vendor: "ST", devices: []ChipName{"M29W512B"}, id: 0x27},
   755  		{vendor: "ST", devices: []ChipName{"M28W160ECB"}, id: 0x88CF},
   756  		{vendor: "ST", devices: []ChipName{"M28W160ECT"}, id: 0x88CE},
   757  		{vendor: "ST", devices: []ChipName{"M28W320FCB"}, id: 0x88BB},
   758  		{vendor: "ST", devices: []ChipName{"M28W320FCT"}, id: 0x88BA},
   759  		{vendor: "ST", devices: []ChipName{"M28W640HCB"}, id: 0x8849},
   760  		{vendor: "ST", devices: []ChipName{"M28W640HCT"}, id: 0x8848},
   761  		{vendor: "ST", devices: []ChipName{"M29DW127G"}, id: 0x7E2004},
   762  		{vendor: "ST", devices: []ChipName{"M29W128GH"}, id: 0x7E2101},
   763  		{vendor: "ST", devices: []ChipName{"M29W128GL"}, id: 0x7E2100},
   764  		{vendor: "ST", devices: []ChipName{"M29W160EB"}, id: 0x2249},
   765  		{vendor: "ST", devices: []ChipName{"M29W160ET"}, id: 0x22C4},
   766  		{vendor: "ST", devices: []ChipName{"M29W256GH"}, id: 0x7E21, remarks: "xx"},
   767  		{vendor: "ST", devices: []ChipName{"M29W256GL"}, id: 0x7E21, remarks: "xx"},
   768  		{vendor: "ST", devices: []ChipName{"M29W320DB"}, id: 0x88CB},
   769  		{vendor: "ST", devices: []ChipName{"M29W320DT"}, id: 0x88CA},
   770  		{vendor: "ST", devices: []ChipName{"M29W400FB"}, id: 0x00EF},
   771  		{vendor: "ST", devices: []ChipName{"M29W400FT"}, id: 0x00EE},
   772  		{vendor: "ST", devices: []ChipName{"M29W512GH"}, id: 0x7E2301},
   773  		{vendor: "ST", devices: []ChipName{"M29W640FB"}, id: 0x22FD},
   774  		{vendor: "ST", devices: []ChipName{"M29W640FT"}, id: 0x22ED},
   775  		{vendor: "ST", devices: []ChipName{"M29W640GB"}, id: 0x7E1000},
   776  		{vendor: "ST", devices: []ChipName{"M29W640GH"}, id: 0x7E0C01},
   777  		{vendor: "ST", devices: []ChipName{"M29W640GL"}, id: 0x7E0C00},
   778  		{vendor: "ST", devices: []ChipName{"M29W640GT"}, id: 0x7E1001},
   779  		{vendor: "ST", devices: []ChipName{"M29W800FB"}, id: 0x225B},
   780  		{vendor: "ST", devices: []ChipName{"M29W800FT"}, id: 0x22D7},
   781  		{vendor: "ST", devices: []ChipName{"M58BW16FB"}, id: 0x8839},
   782  		{vendor: "ST", devices: []ChipName{"M58BW16FT"}, id: 0x883A},
   783  		{vendor: "ST", devices: []ChipName{"M58BW32FB"}, id: 0x8837},
   784  		{vendor: "ST", devices: []ChipName{"M58BW32FT"}, id: 0x8838},
   785  		{vendor: "ST", devices: []ChipName{"M58WR016KB"}, id: 0x8813},
   786  		{vendor: "ST", devices: []ChipName{"M58WR016KT"}, id: 0x8812},
   787  		{vendor: "ST", devices: []ChipName{"M58WR032KB"}, id: 0x8815},
   788  		{vendor: "ST", devices: []ChipName{"M58WR032KT"}, id: 0x8814},
   789  		{vendor: "ST", devices: []ChipName{"M58WR064KB"}, id: 0x8811},
   790  		{vendor: "ST", devices: []ChipName{"M58WR064KT"}, id: 0x8810},
   791  		{vendor: "ST_MT28GU01G__", devices: []ChipName{"1"}, id: 0x88B0},
   792  		{vendor: "ST_MT28GU01G__", devices: []ChipName{"2"}, id: 0x88B1},
   793  		{vendor: "ST_MT28GU256__", devices: []ChipName{"1"}, id: 0x8901},
   794  		{vendor: "ST_MT28GU256__", devices: []ChipName{"2"}, id: 0x8904},
   795  		{vendor: "ST_MT28GU512__", devices: []ChipName{"1"}, id: 0x887E},
   796  		{vendor: "ST_MT28GU512__", devices: []ChipName{"2"}, id: 0x8881},
   797  		{vendor: "ST_N25Q016_", devices: []ChipName{"1E"}, id: 0xBB15, remarks: "	/* N25Q016, 1.8V, (uniform sectors expected) */"},
   798  		{vendor: "ST_N25Q032_", devices: []ChipName{"3E"}, id: 0xBA16, remarks: "	/* N25Q032, 3.0V, (uniform sectors expected) */"},
   799  		{vendor: "ST_N25Q032_", devices: []ChipName{"1E"}, id: 0xBB16, remarks: "	/* N25Q032, 1.8V, (uniform sectors expected) */"},
   800  		{vendor: "ST_N25Q064_", devices: []ChipName{"3E"}, id: 0xBA17, remarks: "	/* N25Q064, 3.0V, (uniform sectors expected) */"},
   801  		{vendor: "ST_N25Q064_", devices: []ChipName{"1E"}, id: 0xBB17, remarks: "	/* N25Q064, 1.8V, (uniform sectors expected) */"},
   802  		{vendor: "ST_N25Q128_", devices: []ChipName{"3E"}, id: 0xBA18, remarks: "	/* N25Q128, 3.0V, (uniform sectors expected) */"},
   803  		{vendor: "ST_N25Q128_", devices: []ChipName{"1E"}, id: 0xBB18, remarks: "	/* N25Q128, 1.8V, (uniform sectors expected) */"},
   804  		{vendor: "ST_N25Q256_", devices: []ChipName{"3E"}, id: 0xBA19, remarks: "	/* N25Q256, 3.0V, (uniform sectors expected) */"},
   805  		{vendor: "ST_N25Q256_", devices: []ChipName{"1E"}, id: 0xBB19, remarks: "	/* N25Q256, 1.8V, (uniform sectors expected) */"},
   806  		{vendor: "ST_N25Q512_", devices: []ChipName{"3E"}, id: 0xBA20, remarks: "	/* N25Q512, 3.0V, (uniform sectors expected) */"},
   807  		{vendor: "ST_N25Q512_", devices: []ChipName{"1E"}, id: 0xBB20, remarks: "	/* N25Q512, 1.8V, (uniform sectors expected) */"},
   808  		{vendor: "ST_N25Q00A_", devices: []ChipName{"3E"}, id: 0xBA21, remarks: "	/* N25Q00A, 3.0V, (uniform sectors expected) */"},
   809  		{vendor: "ST", devices: []ChipName{"NP5Q032"}, id: 0xDA16, remarks: "	/* Phase-change memory (PCM), 3V */"},
   810  		{vendor: "ST", devices: []ChipName{"NP5Q064"}, id: 0xDA17, remarks: "	/* Phase-change memory (PCM), 3V */"},
   811  		{vendor: "ST", devices: []ChipName{"NP5Q128"}, id: 0xDA18, remarks: "	/* Phase-change memory (PCM), 3V */"},
   812  		{vendor: "MVC", devices: []ChipName{"V29C51000T"}, id: 0x00},
   813  		{vendor: "MVC", devices: []ChipName{"V29C51400T"}, id: 0x13},
   814  		{vendor: "MVC", devices: []ChipName{"V29LC51000"}, id: 0x20},
   815  		{vendor: "MVC", devices: []ChipName{"V29LC51001"}, id: 0x60},
   816  		{vendor: "MVC", devices: []ChipName{"V29LC51002"}, id: 0x82},
   817  		{vendor: "MVC", devices: []ChipName{"V29C51000B"}, id: 0xA0},
   818  		{vendor: "MVC", devices: []ChipName{"V29C51400B"}, id: 0xB3},
   819  		{vendor: "SM_MVC", devices: []ChipName{"29C51001T"}, id: 0x01, remarks: "	/* Identical chips: {F,S,V}29C51001T */"},
   820  		{vendor: "SM_MVC", devices: []ChipName{"29C51002T"}, id: 0x02, remarks: "	/* Identical chips: {F,S,V}29C51002T */"},
   821  		{vendor: "SM_MVC", devices: []ChipName{"29C51004T"}, id: 0x03, remarks: "	/* Identical chips: {F,S,V}29C51004T */"},
   822  		{vendor: "SM_MVC", devices: []ChipName{"29C31004T"}, id: 0x63, remarks: "	/* Identical chips: {S,V}29C31004T */"},
   823  		{vendor: "SM_MVC", devices: []ChipName{"29C31004B"}, id: 0x73, remarks: "	/* Identical chips: {S,V}29C31004B */"},
   824  		{vendor: "SM_MVC", devices: []ChipName{"29C51001B"}, id: 0xA1, remarks: "	/* Identical chips: {F,S,V}29C51001B */"},
   825  		{vendor: "SM_MVC", devices: []ChipName{"29C51002B"}, id: 0xA2, remarks: "	/* Identical chips: {F,S,V}29C51002B */"},
   826  		{vendor: "SM_MVC", devices: []ChipName{"29C51004B"}, id: 0xA3, remarks: "	/* Identical chips: {F,S,V}29C51004B */"},
   827  		{vendor: "TENX", devices: []ChipName{"ICE25P05"}, id: 0x01, remarks: "/* Maybe? */"},
   828  		{vendor: "TI", devices: []ChipName{"TMS29F002RT"}, id: 0xB0},
   829  		{vendor: "TI", devices: []ChipName{"TMS29F002RB"}, id: 0x34},
   830  		/*
   831  		 * W25X chips are SPI, first byte of device ID is memory type, second
   832  		 * byte of device ID is related to log(bitsize).
   833  		 */
   834  		{vendor: "WINBOND_NEX", devices: []ChipName{"W25P80"}, id: 0x2014},
   835  		{vendor: "WINBOND_NEX", devices: []ChipName{"W25P16"}, id: 0x2015},
   836  		{vendor: "WINBOND_NEX", devices: []ChipName{"W25P32"}, id: 0x2016},
   837  		{vendor: "WINBOND_NEX", devices: []ChipName{"W25X10"}, id: 0x3011},
   838  		{vendor: "WINBOND_NEX", devices: []ChipName{"W25X20"}, id: 0x3012},
   839  		{vendor: "WINBOND_NEX", devices: []ChipName{"W25X40"}, id: 0x3013},
   840  		{vendor: "WINBOND_NEX", devices: []ChipName{"W25X80"}, id: 0x3014},
   841  		{vendor: "WINBOND_NEX", devices: []ChipName{"W25X16"}, id: 0x3015},
   842  		{vendor: "WINBOND_NEX", devices: []ChipName{"W25X32"}, id: 0x3016},
   843  		{vendor: "WINBOND_NEX", devices: []ChipName{"W25X64"}, id: 0x3017},
   844  		{vendor: "WINBOND_NEX_W25Q40", devices: []ChipName{"V"}, id: 0x4013, remarks: "	/* W25Q40BV; W25Q40BL (2.3-3.6V) */"},
   845  		{vendor: "WINBOND_NEX_W25Q80", devices: []ChipName{"V"}, id: 0x4014, remarks: "	/* W25Q80BV */"},
   846  		{vendor: "WINBOND_NEX_W25Q16", devices: []ChipName{"V"}, id: 0x4015, remarks: "	/* W25Q16CV; W25Q16DV */"},
   847  		{vendor: "WINBOND_NEX_W25Q32", devices: []ChipName{"V"}, id: 0x4016, remarks: "	/* W25Q32BV; W25Q32FV in SPI mode (default) */"},
   848  		{vendor: "WINBOND_NEX_W25Q64", devices: []ChipName{"V"}, id: 0x4017, remarks: "	/* W25Q64BV, W25Q64CV; W25Q64FV in SPI mode (default) */"},
   849  		{vendor: "WINBOND_NEX_W25Q128", devices: []ChipName{"V"}, id: 0x4018, remarks: "	/* W25Q128BV; W25Q128FV in SPI mode (default) */"},
   850  		{vendor: "WINBOND_NEX_W25Q256", devices: []ChipName{"V"}, id: 0x4019, remarks: "	/* W25Q256FV or W25Q256JV_Q (QE=1) */"},
   851  		{vendor: "WINBOND_NEX_W25Q20", devices: []ChipName{"W"}, id: 0x5012, remarks: "	/* W25Q20BW */"},
   852  		{vendor: "WINBOND_NEX", devices: []ChipName{"W25Q40BW"}, id: 0x5013, remarks: "	/* W25Q40BW */"},
   853  		{vendor: "WINBOND_NEX", devices: []ChipName{"W25Q80BW"}, id: 0x5014, remarks: "	/* W25Q80BW */"},
   854  		{vendor: "WINBOND_NEX", devices: []ChipName{"W25Q40EW"}, id: 0x6013, remarks: "	/* W25Q40EW */"},
   855  		{vendor: "WINBOND_NEX", devices: []ChipName{"W25Q80EW"}, id: 0x6014, remarks: "	/* W25Q80EW */"},
   856  		{vendor: "WINBOND_NEX_W25Q16", devices: []ChipName{"W"}, id: 0x6015, remarks: "	/* W25Q16DW */"},
   857  		{vendor: "WINBOND_NEX_W25Q32", devices: []ChipName{"W"}, id: 0x6016, remarks: "	/* W25Q32DW; W25Q32FV in QPI mode */"},
   858  		{vendor: "WINBOND_NEX_W25Q64", devices: []ChipName{"W"}, id: 0x6017, remarks: "	/* W25Q64DW; W25Q64FV in QPI mode */"},
   859  		{vendor: "WINBOND_NEX_W25Q128", devices: []ChipName{"W"}, id: 0x6018, remarks: "	/* W25Q128FW; W25Q128FV in QPI mode */"},
   860  		{vendor: "WINBOND_NEX_W25Q128_V", devices: []ChipName{"M"}, id: 0x7018, remarks: "	/* W25Q128JVSM */"},
   861  		{vendor: "WINBOND_NEX_W25Q256JV", devices: []ChipName{"M"}, id: 0x7019, remarks: "	/* W25Q256JV_M (QE=0) */"},
   862  		{vendor: "WINBOND", devices: []ChipName{"W19B160BB"}, id: 0x49},
   863  		{vendor: "WINBOND", devices: []ChipName{"W19B160BT"}, id: 0xC4},
   864  		{vendor: "WINBOND", devices: []ChipName{"W19B320SB"}, id: 0x2A, remarks: "	/* Same as W19L320SB */"},
   865  		{vendor: "WINBOND", devices: []ChipName{"W19B320ST"}, id: 0xBA, remarks: "	/* Same as W19L320ST */"},
   866  		{vendor: "WINBOND", devices: []ChipName{"W19B322MB"}, id: 0x92},
   867  		{vendor: "WINBOND", devices: []ChipName{"W19B322MT"}, id: 0x10},
   868  		{vendor: "WINBOND", devices: []ChipName{"W19B323MB"}, id: 0x94},
   869  		{vendor: "WINBOND", devices: []ChipName{"W19B323MT"}, id: 0x13},
   870  		{vendor: "WINBOND", devices: []ChipName{"W19B324MB"}, id: 0x97},
   871  		{vendor: "WINBOND", devices: []ChipName{"W19B324MT"}, id: 0x16},
   872  		{vendor: "WINBOND", devices: []ChipName{"W29C010"}, id: 0xC1, remarks: "	/* Same as W29C010M, W29C011A, W29EE011, W29EE012, and ASD AE29F1008 */"},
   873  		{vendor: "WINBOND", devices: []ChipName{"W29C020"}, id: 0x45, remarks: "	/* Same as W29C020C, W29C022 and ASD AE29F2008 */"},
   874  		{vendor: "WINBOND", devices: []ChipName{"W29C040"}, id: 0x46, remarks: "	/* Same as W29C040P */"},
   875  		{vendor: "WINBOND", devices: []ChipName{"W29C512A"}, id: 0xC8, remarks: "	/* Same as W29EE512 */"},
   876  		{vendor: "WINBOND", devices: []ChipName{"W29GL032CHL"}, id: 0x7E1D01, remarks: "	/* Uniform Sectors, WP protects Top OR Bottom sector */"},
   877  		{vendor: "WINBOND", devices: []ChipName{"W29GL032CB"}, id: 0x7E1A00, remarks: "	/* Top Boot Sector, WP protects Top 2 sectors */"},
   878  		{vendor: "WINBOND", devices: []ChipName{"W29GL032CT"}, id: 0x7E1A01, remarks: "	/* Bottom Boot Sector, WP protects Bottom 2 sectors */"},
   879  		{vendor: "WINBOND", devices: []ChipName{"W29GL064CHL"}, id: 0x7E0C01, remarks: "	/* Uniform Sectors, WP protects Top OR Bottom sector */"},
   880  		{vendor: "WINBOND", devices: []ChipName{"W29GL064CB"}, id: 0x7E1000, remarks: "	/* Top Boot Sector, WP protects Top 2 sectors */"},
   881  		{vendor: "WINBOND", devices: []ChipName{"W29GL064CT"}, id: 0x7E1001, remarks: "	/* Bottom Boot Sector, WP protects Bottom 2 sectors */"},
   882  		{vendor: "WINBOND", devices: []ChipName{"W29GL128CHL"}, id: 0x7E2101, remarks: "	/* Uniform Sectors, WP protects Top OR Bottom sector */"},
   883  		{vendor: "WINBOND", devices: []ChipName{"W29GL256HL"}, id: 0x7E2201, remarks: "	/* Same ID for W29GL0256P and W29GL0256S; uniform Sectors, WP protects Top OR Bottom sector */"},
   884  		{vendor: "WINBOND", devices: []ChipName{"W39F010"}, id: 0xA1},
   885  		{vendor: "WINBOND", devices: []ChipName{"W39L010"}, id: 0x31},
   886  		{vendor: "WINBOND", devices: []ChipName{"W39L020"}, id: 0xB5},
   887  		{vendor: "WINBOND", devices: []ChipName{"W39L040"}, id: 0xB6},
   888  		{vendor: "WINBOND", devices: []ChipName{"W39L040A"}, id: 0xD6},
   889  		{vendor: "WINBOND", devices: []ChipName{"W39L512"}, id: 0x38},
   890  		{vendor: "WINBOND", devices: []ChipName{"W39V040A"}, id: 0x3D},
   891  		{vendor: "WINBOND", devices: []ChipName{"W39V040FA"}, id: 0x34},
   892  		{vendor: "WINBOND", devices: []ChipName{"W39V040B"}, id: 0x54, remarks: "	/* Same as W39V040FB */"},
   893  		{vendor: "WINBOND", devices: []ChipName{"W39V040C"}, id: 0x50, remarks: "	/* Same as W39V040FC */"},
   894  		{vendor: "WINBOND", devices: []ChipName{"W39V080A"}, id: 0xD0},
   895  		{vendor: "WINBOND", devices: []ChipName{"W39V080FA"}, id: 0xD3},
   896  		{vendor: "WINBOND_W39V080FA", devices: []ChipName{"DM"}, id: 0x93, remarks: "	/* W39V080FA dual mode */"},
   897  		{vendor: "WINBOND", devices: []ChipName{"W49F002"}, id: 0x25, remarks: "	/* Same as W49F002B */"},
   898  		{vendor: "WINBOND", devices: []ChipName{"W49F002U"}, id: 0x0B, remarks: "	/* Same as W49F002N and ASD AE49F2008 */"},
   899  		{vendor: "WINBOND", devices: []ChipName{"W49F020"}, id: 0x8C},
   900  		{vendor: "WINBOND", devices: []ChipName{"W49V002A"}, id: 0xB0},
   901  		{vendor: "WINBOND", devices: []ChipName{"W49V002FA"}, id: 0x32},
   902  		{vendor: "ZETTADEVICE", devices: []ChipName{"ZD25D20"}, id: 0x2012},
   903  		{vendor: "ZETTADEVICE", devices: []ChipName{"ZD25D40"}, id: 0x2013},
   904  	}
   905  )