/*
 * This file is part of the flashrom project.
 *
 * Copyright (C) 2000 Silicon Integrated System Corporation
 * Copyright (C) 2004 Tyan Corp
 * Copyright (C) 2005-2008 coresystems GmbH <stepan@openbios.org>
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
 */

#include "flash.h"

/**
 * List of supported flash ROM chips.
 *
 * Please keep the list sorted by vendor name and chip name, so that
 * the output of 'flashrom -L' is alphabetically sorted.
 */
struct flashchip flashchips[] = {

	/* Vendor, Chip, Vendor ID, Chip ID,
	 * Total size (kB), Page size (B),
	 * Test status,
	 * Probe function, Erase function, Write function, Read function
	 */

	{
		.vendor		= "AMD",
		.name		= "Am29F002(N)BB",
		.manufacture_id	= AMD_ID,
		.model_id	= AM_29F002BB,
		.total_size	= 256,
		.page_size	= 256,
		.tested		= TEST_UNTESTED,
		.probe		= probe_jedec,
		.erase		= erase_chip_jedec,
		.write		= write_en29f002a,
	},

	{
		.vendor		= "AMD",
		.name		= "Am29F002(N)BT",
		.manufacture_id	= AMD_ID,
		.model_id	= AM_29F002BT,
		.total_size	= 256,
		.page_size	= 256,
		.tested		= TEST_OK_PREW,
		.probe		= probe_jedec,
		.erase		= erase_chip_jedec,
		.write		= write_en29f002a,
	},

	{
		.vendor		= "AMD",
		.name		= "Am29F016D",
		.manufacture_id	= AMD_ID,
		.model_id	= AM_29F016D,
		.total_size	= 2048,
		.page_size	= 64 * 1024,
		.tested		= TEST_UNTESTED,
		.probe		= probe_29f040b,
		.erase		= erase_29f040b,
		.write		= write_29f040b,
	},

	{
		.vendor		= "AMD",
		.name		= "Am29F040B",
		.manufacture_id	= AMD_ID,
		.model_id	= AM_29F040B,
		.total_size	= 512,
		.page_size	= 64 * 1024,
		.tested		= TEST_OK_PREW,
		.probe		= probe_29f040b,
		.erase		= erase_29f040b,
		.write		= write_29f040b,
	},

	{
		.vendor		= "AMD",
		.name		= "Am29LV040B",
		.manufacture_id	= AMD_ID,
		.model_id	= AM_29LV040B,
		.total_size	= 512,
		.page_size	= 64 * 1024,
		.tested		= TEST_UNTESTED,
		.probe		= probe_29f040b,
		.erase		= erase_29f040b,
		.write		= write_29f040b,
	},

	{
		.vendor		= "ASD",
		.name		= "AE49F2008",
		.manufacture_id	= ASD_ID,
		.model_id	= ASD_AE49F2008,
		.total_size	= 256,
		.page_size	= 128,
		.tested		= TEST_UNTESTED,
		.probe		= probe_jedec,
		.erase		= erase_chip_jedec,
		.write		= write_jedec,
	},

	{
		.vendor		= "Atmel",
		.name		= "AT25DF021",
		.manufacture_id	= ATMEL_ID,
		.model_id	= AT_25DF021,
		.total_size	= 256,
		.page_size	= 256,
		.tested		= TEST_UNTESTED,
		.probe		= probe_spi_rdid,
		.erase		= spi_chip_erase_60_c7,
		.write		= spi_chip_write,
		.read		= spi_chip_read,
	},

	{
		.vendor		= "Atmel",
		.name		= "AT25DF041A",
		.manufacture_id	= ATMEL_ID,
		.model_id	= AT_25DF041A,
		.total_size	= 512,
		.page_size	= 256,
		.tested		= TEST_UNTESTED,
		.probe		= probe_spi_rdid,
		.erase		= spi_chip_erase_60_c7,
		.write		= spi_chip_write,
		.read		= spi_chip_read,
	},

	{
		.vendor		= "Atmel",
		.name		= "AT25DF081",
		.manufacture_id	= ATMEL_ID,
		.model_id	= AT_25DF081,
		.total_size	= 1024,
		.page_size	= 256,
		.tested		= TEST_UNTESTED,
		.probe		= probe_spi_rdid,
		.erase		= spi_chip_erase_60_c7,
		.write		= spi_chip_write,
		.read		= spi_chip_read,
	},

	{
		.vendor		= "Atmel",
		.name		= "AT25DF161",
		.manufacture_id	= ATMEL_ID,
		.model_id	= AT_25DF161,
		.total_size	= 2048,
		.page_size	= 256,
		.tested		= TEST_UNTESTED,
		.probe		= probe_spi_rdid,
		.erase		= spi_chip_erase_60_c7,
		.write		= spi_chip_write,
		.read		= spi_chip_read,
	},

	{
		.vendor		= "Atmel",
		.name		= "AT25DF321",
		.manufacture_id	= ATMEL_ID,
		.model_id	= AT_25DF321,
		.total_size	= 4096,
		.page_size	= 256,
		.tested		= TEST_OK_PREW,
		.probe		= probe_spi_rdid,
		.erase		= spi_chip_erase_60_c7,
		.write		= spi_chip_write,
		.read		= spi_chip_read,
	},

	{
		.vendor		= "Atmel",
		.name		= "AT25DF321A",
		.manufacture_id	= ATMEL_ID,
		.model_id	= AT_25DF321A,
		.total_size	= 4096,
		.page_size	= 256,
		.tested		= TEST_UNTESTED,
		.probe		= probe_spi_rdid,
		.erase		= spi_chip_erase_60_c7,
		.write		= spi_chip_write,
		.read		= spi_chip_read,
	},

	{
		.vendor		= "Atmel",
		.name		= "AT25DF641",
		.manufacture_id	= ATMEL_ID,
		.model_id	= AT_25DF641,
		.total_size	= 8192,
		.page_size	= 256,
		.tested		= TEST_UNTESTED,
		.probe		= probe_spi_rdid,
		.erase		= spi_chip_erase_60_c7,
		.write		= spi_chip_write,
		.read		= spi_chip_read,
	},

	{
		.vendor		= "Atmel",
		.name		= "AT25F512B",
		.manufacture_id	= ATMEL_ID,
		.model_id	= AT_25F512B,
		.total_size	= 64,
		.page_size	= 256,
		.tested		= TEST_UNTESTED,
		.probe		= probe_spi_rdid,
		.erase		= spi_chip_erase_60_c7,
		.write		= spi_chip_write,
		.read		= spi_chip_read,
	},

	{
		.vendor		= "Atmel",
		.name		= "AT25FS010",
		.manufacture_id	= ATMEL_ID,
		.model_id	= AT_25FS010,
		.total_size	= 128,
		.page_size	= 256,
		.tested		= TEST_UNTESTED,
		.probe		= probe_spi_rdid,
		.erase		= spi_chip_erase_60_c7,
		.write		= spi_chip_write,
		.read		= spi_chip_read,
	},

	{
		.vendor		= "Atmel",
		.name		= "AT25FS040",
		.manufacture_id	= ATMEL_ID,
		.model_id	= AT_25FS040,
		.total_size	= 512,
		.page_size	= 256,
		.tested		= TEST_UNTESTED,
		.probe		= probe_spi_rdid,
		.erase		= spi_chip_erase_60_c7,
		.write		= spi_chip_write,
		.read		= spi_chip_read,
	},

	{
		.vendor		= "Atmel",
		.name		= "AT26DF041",
		.manufacture_id	= ATMEL_ID,
		.model_id	= AT_26DF041,
		.total_size	= 512,
		.page_size	= 256,
		.tested		= TEST_UNTESTED,
		.probe		= probe_spi_rdid,
		.erase		= NULL,
		.write		= NULL /* Incompatible Page write */,
		.read		= spi_chip_read,
	},

	{
		.vendor		= "Atmel",
		.name		= "AT26DF081A",
		.manufacture_id	= ATMEL_ID,
		.model_id	= AT_26DF081A,
		.total_size	= 1024,
		.page_size	= 256,
		.tested		= TEST_UNTESTED,
		.probe		= probe_spi_rdid,
		.erase		= spi_chip_erase_60_c7,
		.write		= spi_chip_write,
		.read		= spi_chip_read,
	},

	{
		.vendor		= "Atmel",
		.name		= "AT26DF161",
		.manufacture_id	= ATMEL_ID,
		.model_id	= AT_26DF161,
		.total_size	= 2048,
		.page_size	= 256,
		.tested		= TEST_UNTESTED,
		.probe		= probe_spi_rdid,
		.erase		= spi_chip_erase_60_c7,
		.write		= spi_chip_write,
		.read		= spi_chip_read,
	},

	{
		.vendor		= "Atmel",
		.name		= "AT26DF161A",
		.manufacture_id	= ATMEL_ID,
		.model_id	= AT_26DF161A,
		.total_size	= 2048,
		.page_size	= 256,
		.tested		= TEST_UNTESTED,
		.probe		= probe_spi_rdid,
		.erase		= spi_chip_erase_60_c7,
		.write		= spi_chip_write,
		.read		= spi_chip_read,
	},

	/*The AT26DF321 has the same ID as the AT25DF321. */
	/*{
		.vendor		= "Atmel",
		.name		= "AT26DF321",
		.manufacture_id	= ATMEL_ID,
		.model_id	= AT_26DF321,
		.total_size	= 4096,
		.page_size	= 256,
		.tested		= TEST_UNTESTED,
		.probe		= probe_spi_rdid,
		.erase		= spi_chip_erase_60_c7,
		.write		= spi_chip_write,
		.read		= spi_chip_read,
	  },*/

	{
		.vendor		= "Atmel",
		.name		= "AT26F004",
		.manufacture_id	= ATMEL_ID,
		.model_id	= AT_26F004,
		.total_size	= 512,
		.page_size	= 256,
		.tested		= TEST_UNTESTED,
		.probe		= probe_spi_rdid,
		.erase		= spi_chip_erase_60_c7,
		.write		= NULL /* Incompatible Page write */,
		.read		= spi_chip_read,
	},

	{
		.vendor		= "Atmel",
		.name		= "AT29C020",
		.manufacture_id	= ATMEL_ID,
		.model_id	= AT_29C020,
		.total_size	= 256,
		.page_size	= 256,
		.tested		= TEST_OK_PREW,
		.probe		= probe_jedec,
		.erase		= erase_chip_jedec,
		.write		= write_jedec,
	},

	{
		.vendor		= "Atmel",
		.name		= "AT29C040A",
		.manufacture_id	= ATMEL_ID,
		.model_id	= AT_29C040A,
		.total_size	= 512,
		.page_size	= 256,
		.tested		= TEST_UNTESTED,
		.probe		= probe_jedec,
		.erase		= erase_chip_jedec,
		.write		= write_jedec,
	},

	{
		.vendor		= "Atmel",
		.name		= "AT45CS1282",
		.manufacture_id	= ATMEL_ID,
		.model_id	= AT_45CS1282,
		.total_size	= 16896/*!*/,
		.page_size	= 1056/*!*/,
		.tested		= TEST_BAD_READ,
		.probe		= probe_spi_rdid,
		.erase		= NULL,
		.write		= NULL /* Incompatible Page write */,
		.read		= NULL /* Incompatible read */,
	}, /* No power of two sizes */

	{
		.vendor		= "Atmel",
		.name		= "AT45DB011D",
		.manufacture_id	= ATMEL_ID,
		.model_id	= AT_45DB011D,
		.total_size	= 128/*!*/,
		.page_size	= 256/*!*/,
		.tested		= TEST_BAD_READ,
		.probe		= probe_spi_rdid,
		.erase		= NULL,
		.write		= NULL,
		.read		= NULL,
	}, /* Size can only be determined from status register */

	{
		.vendor		= "Atmel",
		.name		= "AT45DB021D",
		.manufacture_id	= ATMEL_ID,
		.model_id	= AT_45DB021D,
		.total_size	= 256/*!*/,
		.page_size	= 256/*!*/,
		.tested		= TEST_BAD_READ,
		.probe		= probe_spi_rdid,
		.erase		= NULL,
		.write		= NULL,
		.read		= NULL,
	}, /* Size can only be determined from status register */

	{
		.vendor		= "Atmel",
		.name		= "AT45DB041D",
		.manufacture_id	= ATMEL_ID,
		.model_id	= AT_45DB041D,
		.total_size	= 512/*!*/,
		.page_size	= 256/*!*/,
		.tested		= TEST_BAD_READ,
		.probe		= probe_spi_rdid,
		.erase		= NULL,
		.write		= NULL,
		.read		= NULL,
	}, /* Size can only be determined from status register */

	{
		.vendor		= "Atmel",
		.name		= "AT45DB081D",
		.manufacture_id	= ATMEL_ID,
		.model_id	= AT_45DB081D,
		.total_size	= 1024/*!*/,
		.page_size	= 256/*!*/,
		.tested		= TEST_BAD_READ,
		.probe		= probe_spi_rdid,
		.erase		= NULL,
		.write		= NULL,
		.read		= NULL,
	}, /* Size can only be determined from status register */

	{
		.vendor		= "Atmel",
		.name		= "AT45DB161D",
		.manufacture_id	= ATMEL_ID,
		.model_id	= AT_45DB161D,
		.total_size	= 2048/*!*/,
		.page_size	= 512/*!*/,
		.tested		= TEST_BAD_READ,
		.probe		= probe_spi_rdid,
		.erase		= NULL,
		.write		= NULL,
		.read		= NULL,
	}, /* Size can only be determined from status register */

	{
		.vendor		= "Atmel",
		.name		= "AT45DB321C",
		.manufacture_id	= ATMEL_ID,
		.model_id	= AT_45DB321C,
		.total_size	= 4224/*!*/,
		.page_size	= 528/*!*/,
		.tested		= TEST_BAD_READ,
		.probe		= probe_spi_rdid,
		.erase		= NULL,
		.write		= NULL,
		.read		= NULL /* Incompatible read */,
	}, /* No power of two sizes */

	{
		.vendor		= "Atmel",
		.name		= "AT45DB321D",
		.manufacture_id	= ATMEL_ID,
		.model_id	= AT_45DB321D,
		.total_size	= 4096/*!*/,
		.page_size	= 512/*!*/,
		.tested		= TEST_BAD_READ,
		.probe		= probe_spi_rdid,
		.erase		= NULL,
		.write		= NULL,
		.read		= NULL,
	}, /* Size can only be determined from status register */

	{
		.vendor		= "Atmel",
		.name		= "AT45DB642D",
		.manufacture_id	= ATMEL_ID,
		.model_id	= AT_45DB642D,
		.total_size	= 8192/*!*/,
		.page_size	= 1024/*!*/,
		.tested		= TEST_BAD_READ,
		.probe		= probe_spi_rdid,
		.erase		= NULL,
		.write		= NULL,
		.read		= NULL,
	}, /* Size can only be determined from status register */

	{
		.vendor		= "Atmel",
		.name		= "AT49F002(N)",
		.manufacture_id	= ATMEL_ID,
		.model_id	= AT_49F002N,
		.total_size	= 256,
		.page_size	= 256,
		.tested		= TEST_UNTESTED,
		.probe		= probe_jedec,
		.erase		= erase_chip_jedec,
		.write		= write_49f002,
	},

	{
		.vendor		= "Atmel",
		.name		= "AT49F002(N)T",
		.manufacture_id	= ATMEL_ID,
		.model_id	= AT_49F002NT,
		.total_size	= 256,
		.page_size	= 256,
		.tested		= TEST_OK_PREW,
		.probe		= probe_jedec,
		.erase		= erase_chip_jedec,
		.write		= write_49f002,
	},

	{
		.vendor		= "AMIC",
		.name		= "A25L40P",
		.manufacture_id	= AMIC_ID,
		.model_id	= AMIC_A25L40P,
		.total_size	= 512,
		.page_size	= 256,
		.tested		= TEST_OK_PREW,
		.probe		= probe_spi_rdid4,
		.erase		= spi_chip_erase_c7,
		.write		= spi_chip_write,
		.read		= spi_chip_read,
	},

	{
		.vendor		= "AMIC",
		.name		= "A29002B",
		.manufacture_id	= AMIC_ID_NOPREFIX,
		.model_id	= AMIC_A29002B,
		.total_size	= 256,
		.page_size	= 64 * 1024,
		.tested		= TEST_UNTESTED,
		.probe		= probe_29f002,
		.erase		= erase_29f002,
		.write		= write_29f002,
	},

	{
		.vendor		= "AMIC",
		.name		= "A29002T",
		.manufacture_id	= AMIC_ID_NOPREFIX,
		.model_id	= AMIC_A29002T,
		.total_size	= 256,
		.page_size	= 64 * 1024,
		.tested		= TEST_OK_PREW,
		.probe		= probe_29f002,
		.erase		= erase_29f002,
		.write		= write_29f002,
	},

	{
		.vendor		= "AMIC",
		.name		= "A29040B",
		.manufacture_id	= AMIC_ID_NOPREFIX,
		.model_id	= AMIC_A29040B,
		.total_size	= 512,
		.page_size	= 64 * 1024,
		.tested		= TEST_OK_PR,
		.probe		= probe_29f040b,
		.erase		= erase_29f040b,
		.write		= write_29f040b,
	},

	{
		.vendor		= "AMIC",
		.name		= "A49LF040A",
		.manufacture_id	= AMIC_ID_NOPREFIX,
		.model_id	= AMIC_A49LF040A,
		.total_size	= 512,
		.page_size	= 64 * 1024,
		.tested		= TEST_OK_PREW,
		.probe		= probe_49fl00x,
		.erase		= erase_49fl00x,
		.write		= write_49fl00x,
	},

	{
		.vendor		= "EMST",
		.name		= "F49B002UA",
		.manufacture_id	= EMST_ID,
		.model_id	= EMST_F49B002UA,
		.total_size	= 256,
		.page_size	= 4096,
		.tested		= TEST_UNTESTED,
		.probe		= probe_jedec,
		.erase		= erase_chip_jedec,
		.write		= write_49f002,
	},

	{
		.vendor		= "EON",
		.name		= "EN29F002(A)(N)B",
		.manufacture_id	= EON_ID,
		.model_id	= EN_29F002B,
		.total_size	= 256,
		.page_size	= 256,
		.tested		= TEST_UNTESTED,
		.probe		= probe_jedec,
		.erase		= erase_chip_jedec,
		.write		= write_en29f002a,
	},

	{
		.vendor		= "EON",
		.name		= "EN29F002(A)(N)T",
		.manufacture_id	= EON_ID,
		.model_id	= EN_29F002T,
		.total_size	= 256,
		.page_size	= 256,
		.tested		= TEST_OK_PREW,
		.probe		= probe_jedec,
		.erase		= erase_chip_jedec,
		.write		= write_en29f002a,
	},

	{
		.vendor		= "Fujitsu",
		.name		= "MBM29F004BC",
		.manufacture_id	= FUJITSU_ID,
		.model_id	= MBM29F004BC,
		.total_size	= 512,
		.page_size	= 64 * 1024,
		.tested		= TEST_UNTESTED,
		.probe		= probe_jedec,
		.erase		= NULL,
		.write		= NULL,
	},

	{
		.vendor		= "Fujitsu",
		.name		= "MBM29F004TC",
		.manufacture_id	= FUJITSU_ID,
		.model_id	= MBM29F004TC,
		.total_size	= 512,
		.page_size	= 64 * 1024,
		.tested		= TEST_UNTESTED,
		.probe		= probe_jedec,
		.erase		= NULL,
		.write		= NULL,
	},

	{
		.vendor		= "Fujitsu",
		.name		= "MBM29F400BC",
		.manufacture_id	= FUJITSU_ID,
		.model_id	= MBM29F400BC,
		.total_size	= 512,
		.page_size	= 64 * 1024,
		.tested		= TEST_UNTESTED,
		.probe		= probe_m29f400bt,
		.erase		= erase_m29f400bt,
		.write		= write_coreboot_m29f400bt,
	},

	{
		.vendor		= "Fujitsu",
		.name		= "MBM29F400TC",
		.manufacture_id	= FUJITSU_ID,
		.model_id	= MBM29F400TC,
		.total_size	= 512,
		.page_size	= 64 * 1024,
		.tested		= TEST_UNTESTED,
		.probe		= probe_m29f400bt,
		.erase		= erase_m29f400bt,
		.write		= write_coreboot_m29f400bt,
	},

	{
		.vendor		= "Intel",
		.name		= "82802AB",
		.manufacture_id	= INTEL_ID,
		.model_id	= 173,
		.total_size	= 512,
		.page_size	= 64 * 1024,
		.tested		= TEST_OK_PREW,
		.probe		= probe_82802ab,
		.erase		= erase_82802ab,
		.write		= write_82802ab,
	},

	{
		.vendor		= "Intel",
		.name		= "82802AC",
		.manufacture_id	= INTEL_ID,
		.model_id	= 172,
		.total_size	= 1024,
		.page_size	= 64 * 1024,
		.tested		= TEST_OK_PREW,
		.probe		= probe_82802ab,
		.erase		= erase_82802ab,
		.write		= write_82802ab,
	},

	{
		.vendor		= "Macronix",
		.name		= "MX25L512",
		.manufacture_id	= MX_ID,
		.model_id	= MX_25L512,
		.total_size	= 64,
		.page_size	= 256,
		.tested		= TEST_UNTESTED,
		.probe		= probe_spi_rdid,
		.erase		= spi_chip_erase_c7,
		.write		= spi_chip_write,
		.read		= spi_chip_read,
	},

	{
		.vendor		= "Macronix",
		.name		= "MX25L1005",
		.manufacture_id	= MX_ID,
		.model_id	= MX_25L1005,
		.total_size	= 128,
		.page_size	= 256,
		.tested		= TEST_UNTESTED,
		.probe		= probe_spi_rdid,
		.erase		= spi_chip_erase_c7,
		.write		= spi_chip_write,
		.read		= spi_chip_read,
	},

	{
		.vendor		= "Macronix",
		.name		= "MX25L2005",
		.manufacture_id	= MX_ID,
		.model_id	= MX_25L2005,
		.total_size	= 256,
		.page_size	= 256,
		.tested		= TEST_UNTESTED,
		.probe		= probe_spi_rdid,
		.erase		= spi_chip_erase_c7,
		.write		= spi_chip_write,
		.read		= spi_chip_read,
	},

	{
		.vendor		= "Macronix",
		.name		= "MX25L4005",
		.manufacture_id	= MX_ID,
		.model_id	= MX_25L4005,
		.total_size	= 512,
		.page_size	= 256,
		.tested		= TEST_OK_PREW,
		.probe		= probe_spi_rdid,
		.erase		= spi_chip_erase_c7,
		.write		= spi_chip_write,
		.read		= spi_chip_read,
	},

	{
		.vendor		= "Macronix",
		.name		= "MX25L8005",
		.manufacture_id	= MX_ID,
		.model_id	= MX_25L8005,
		.total_size	= 1024,
		.page_size	= 256,
		.tested		= TEST_OK_PREW,
		.probe		= probe_spi_rdid,
		.erase		= spi_chip_erase_c7,
		.write		= spi_chip_write,
		.read		= spi_chip_read,
	},

	{
		.vendor		= "Macronix",
		.name		= "MX25L1605",
		.manufacture_id	= MX_ID,
		.model_id	= MX_25L1605,
		.total_size	= 2048,
		.page_size	= 256,
		.tested		= TEST_UNTESTED,
		.probe		= probe_spi_rdid,
		.erase		= spi_chip_erase_c7,
		.write		= spi_chip_write,
		.read		= spi_chip_read,
	},

	{
		.vendor		= "Macronix",
		.name		= "MX25L3205",
		.manufacture_id	= MX_ID,
		.model_id	= MX_25L3205,
		.total_size	= 4096,
		.page_size	= 256,
		.tested		= TEST_OK_PREW,
		.probe		= probe_spi_rdid,
		.erase		= spi_chip_erase_c7,
		.write		= spi_chip_write,
		.read		= spi_chip_read,
	},

	{
		.vendor		= "Macronix",
		.name		= "MX25L6405",
		.manufacture_id	= MX_ID,
		.model_id	= MX_25L6405,
		.total_size	= 8192,
		.page_size	= 256,
		.tested		= TEST_UNTESTED,
		.probe		= probe_spi_rdid,
		.erase		= spi_chip_erase_c7,
		.write		= spi_chip_write,
		.read		= spi_chip_read,
	},

	{
		.vendor		= "Macronix",
		.name		= "MX29F002B",
		.manufacture_id	= MX_ID,
		.model_id	= MX_29F002B,
		.total_size	= 256,
		.page_size	= 64 * 1024,
		.tested		= TEST_UNTESTED,
		.probe		= probe_29f002,
		.erase		= erase_29f002,
		.write		= write_29f002,
	},

	{
		.vendor		= "Macronix",
		.name		= "MX29F002T",
		.manufacture_id	= MX_ID,
		.model_id	= MX_29F002T,
		.total_size	= 256,
		.page_size	= 64 * 1024,
		.tested		= TEST_UNTESTED,
		.probe		= probe_29f002,
		.erase		= erase_29f002,
		.write		= write_29f002,
	},

	{
		.vendor		= "Macronix",
		.name		= "MX29LV040C",
		.manufacture_id	= MX_ID,
		.model_id	= MX_29LV040C,
		.total_size	= 512,
		.page_size	= 64 * 1024,
		.tested		= TEST_OK_PR,
		.probe		= probe_29f002,
		.erase		= erase_29f002,
		.write		= write_29f002,
	},

	{
		.vendor		= "Numonyx",
		.name		= "M25PE10",
		.manufacture_id	= ST_ID,
		.model_id	= 0x8011,
		.total_size	= 128,
		.page_size	= 256,
		.tested		= TEST_UNTESTED,
		.probe		= probe_spi_rdid,
		.erase		= spi_chip_erase_d8,
		.write		= spi_chip_write,
		.read		= spi_chip_read,
	},

	{
		.vendor		= "Numonyx",
		.name		= "M25PE20",
		.manufacture_id	= ST_ID,
		.model_id	= 0x8012,
		.total_size	= 256,
		.page_size	= 256,
		.tested		= TEST_UNTESTED,
		.probe		= probe_spi_rdid,
		.erase		= spi_chip_erase_d8,
		.write		= spi_chip_write,
		.read		= spi_chip_read,
	},

	{
		.vendor		= "Numonyx",
		.name		= "M25PE40",
		.manufacture_id	= ST_ID,
		.model_id	= 0x8013,
		.total_size	= 256,
		.page_size	= 256,
		.tested		= TEST_UNTESTED,
		.probe		= probe_spi_rdid,
		.erase		= spi_chip_erase_d8,
		.write		= spi_chip_write,
		.read		= spi_chip_read,
	},

	{
		.vendor		= "Numonyx",
		.name		= "M25PE80",
		.manufacture_id	= ST_ID,
		.model_id	= 0x8014,
		.total_size	= 1024,
		.page_size	= 256,
		.tested		= TEST_OK_PREW,
		.probe		= probe_spi_rdid,
		.erase		= spi_chip_erase_d8,
		.write		= spi_chip_write,
		.read		= spi_chip_read,
	},

	{
		.vendor		= "Numonyx",
		.name		= "M25PE16",
		.manufacture_id	= ST_ID,
		.model_id	= 0x8015,
		.total_size	= 2048,
		.page_size	= 256,
		.tested		= TEST_UNTESTED,
		.probe		= probe_spi_rdid,
		.erase		= spi_chip_erase_d8,
		.write		= spi_chip_write,
		.read		= spi_chip_read,
	},

	{
		.vendor		= "PMC",
		.name		= "Pm25LV010",
		.manufacture_id	= PMC_ID,
		.model_id	= PMC_25LV010,
		.total_size	= 128,
		.page_size	= 256,
		.tested		= TEST_UNTESTED,
		.probe		= probe_spi_rdid,
		.erase		= spi_chip_erase_c7,
		.write		= spi_chip_write,
		.read		= spi_chip_read,
	},

	{
		.vendor		= "PMC",
		.name		= "Pm25LV016B",
		.manufacture_id	= PMC_ID,
		.model_id	= PMC_25LV016B,
		.total_size	= 2048,
		.page_size	= 256,
		.tested		= TEST_UNTESTED,
		.probe		= probe_spi_rdid,
		.erase		= spi_chip_erase_c7,
		.write		= spi_chip_write,
		.read		= spi_chip_read,
	},

	{
		.vendor		= "PMC",
		.name		= "Pm25LV020",
		.manufacture_id	= PMC_ID,
		.model_id	= PMC_25LV020,
		.total_size	= 256,
		.page_size	= 256,
		.tested		= TEST_UNTESTED,
		.probe		= probe_spi_rdid,
		.erase		= spi_chip_erase_c7,
		.write		= spi_chip_write,
		.read		= spi_chip_read,
	},

	{
		.vendor		= "PMC",
		.name		= "Pm25LV040",
		.manufacture_id	= PMC_ID,
		.model_id	= PMC_25LV040,
		.total_size	= 512,
		.page_size	= 256,
		.tested		= TEST_UNTESTED,
		.probe		= probe_spi_rdid,
		.erase		= spi_chip_erase_c7,
		.write		= spi_chip_write,
		.read		= spi_chip_read,
	},

	{
		.vendor		= "PMC",
		.name		= "Pm25LV080B",
		.manufacture_id	= PMC_ID,
		.model_id	= PMC_25LV080B,
		.total_size	= 1024,
		.page_size	= 256,
		.tested		= TEST_UNTESTED,
		.probe		= probe_spi_rdid,
		.erase		= spi_chip_erase_c7,
		.write		= spi_chip_write,
		.read		= spi_chip_read,
	},

	{
		.vendor		= "PMC",
		.name		= "Pm25LV512",
		.manufacture_id	= PMC_ID,
		.model_id	= PMC_25LV512,
		.total_size	= 64,
		.page_size	= 256,
		.tested		= TEST_UNTESTED,
		.probe		= probe_spi_rdid,
		.erase		= spi_chip_erase_c7,
		.write		= spi_chip_write,
		.read		= spi_chip_read,
	},

	{
		.vendor		= "PMC",
		.name		= "Pm49FL002",
		.manufacture_id	= PMC_ID_NOPREFIX,
		.model_id	= PMC_49FL002,
		.total_size	= 256,
		.page_size	= 16 * 1024,
		.tested		= TEST_OK_PREW,
		.probe		= probe_49fl00x,
		.erase		= erase_49fl00x,
		.write		= write_49fl00x,
	},

	{
		.vendor		= "PMC",
		.name		= "Pm49FL004",
		.manufacture_id	= PMC_ID_NOPREFIX,
		.model_id	= PMC_49FL004,
		.total_size	= 512,
		.page_size	= 64 * 1024,
		.tested		= TEST_OK_PREW,
		.probe		= probe_49fl00x,
		.erase		= erase_49fl00x,
		.write		= write_49fl00x,
	},

	{
		.vendor		= "Sharp",
		.name		= "LHF00L04",
		.manufacture_id	= SHARP_ID,
		.model_id	= SHARP_LHF00L04,
		.total_size	= 1024,
		.page_size	= 64 * 1024,
		.tested		= TEST_UNTESTED,
		.probe		= probe_lhf00l04,
		.erase		= erase_lhf00l04,
		.write		= write_lhf00l04,
	},

	{
		.vendor		= "Spansion",
		.name		= "S25FL016A",
		.manufacture_id	= SPANSION_ID,
		.model_id	= SPANSION_S25FL016A,
		.total_size	= 2048,
		.page_size	= 256,
		.tested		= TEST_OK_PREW,
		.probe		= probe_spi_rdid,
		.erase		= spi_chip_erase_c7,
		.write		= spi_chip_write,
		.read		= spi_chip_read,
	},

	{
		.vendor		= "SST",
		.name		= "SST25VF016B",
		.manufacture_id	= SST_ID,
		.model_id	= SST_25VF016B,
		.total_size	= 2048,
		.page_size	= 256,
		.tested		= TEST_OK_PREW,
		.probe		= probe_spi_rdid,
		.erase		= spi_chip_erase_c7,
		.write		= spi_chip_write,
		.read		= spi_chip_read,
	},

	{
		.vendor		= "SST",
		.name		= "SST25VF032B",
		.manufacture_id	= SST_ID,
		.model_id	= SST_25VF032B,
		.total_size	= 4096,
		.page_size	= 256,
		.tested		= TEST_OK_PREW,
		.probe		= probe_spi_rdid,
		.erase		= spi_chip_erase_c7,
		.write		= spi_chip_write,
		.read		= spi_chip_read,
	},

	{
		.vendor		= "SST",
		.name		= "SST25VF040B",
		.manufacture_id	= SST_ID,
		.model_id	= SST_25VF040B,
		.total_size	= 512,
		.page_size	= 256,
		.tested		= TEST_UNTESTED,
		.probe		= probe_spi_rdid,
		.erase		= spi_chip_erase_c7,
		.write		= spi_chip_write,
		.read		= spi_chip_read,
	},

	{
		.vendor		= "SST",
		.name		= "SST25VF080B",
		.manufacture_id	= SST_ID,
		.model_id	= SST_25VF080B,
		.total_size	= 1024,
		.page_size	= 256,
		.tested		= TEST_UNTESTED,
		.probe		= probe_spi_rdid,
		.erase		= spi_chip_erase_60_c7,
		.write		= spi_chip_write,
		.read		= spi_chip_read,
	},

	{
		.vendor		= "SST",
		.name		= "SST28SF040A",
		.manufacture_id	= SST_ID,
		.model_id	= SST_28SF040,
		.total_size	= 512,
		.page_size	= 256,
		.tested		= TEST_UNTESTED,
		.probe		= probe_28sf040,
		.erase		= erase_28sf040,
		.write		= write_28sf040,
	},

	{
		.vendor		= "SST",
		.name		= "SST29EE010",
		.manufacture_id	= SST_ID,
		.model_id	= SST_29EE010,
		.total_size	= 128,
		.page_size	= 128,
		.tested		= TEST_OK_PREW,
		.probe		= probe_jedec,
		.erase		= erase_chip_jedec,
		.write		= write_jedec,
	},

	{
		.vendor		= "SST",
		.name		= "SST29LE010",
		.manufacture_id	= SST_ID,
		.model_id	= SST_29LE010,
		.total_size	= 128,
		.page_size	= 128,
		.tested		= TEST_UNTESTED,
		.probe		= probe_jedec,
		.erase		= erase_chip_jedec,
		.write		= write_jedec,
	},

	{
		.vendor		= "SST",
		.name		= "SST29EE020A",
		.manufacture_id	= SST_ID,
		.model_id	= SST_29EE020A,
		.total_size	= 256,
		.page_size	= 128,
		.tested		= TEST_UNTESTED,
		.probe		= probe_jedec,
		.erase		= erase_chip_jedec,
		.write		= write_jedec,
	},

	{
		.vendor		= "SST",
		.name		= "SST29LE020",
		.manufacture_id	= SST_ID,
		.model_id	= SST_29LE020,
		.total_size	= 256,
		.page_size	= 128,
		.tested		= TEST_UNTESTED,
		.probe		= probe_jedec,
		.erase		= erase_chip_jedec,
		.write		= write_jedec,
	},

	{
		.vendor		= "SST",
		.name		= "SST39SF010A",
		.manufacture_id	= SST_ID,
		.model_id	= SST_39SF010,
		.total_size	= 128,
		.page_size	= 4096,
		.tested		= TEST_OK_PREW,
		.probe		= probe_jedec,
		.erase		= erase_chip_jedec,
		.write		= write_39sf020,
	},

	{
		.vendor		= "SST",
		.name		= "SST39SF020A",
		.manufacture_id	= SST_ID,
		.model_id	= SST_39SF020,
		.total_size	= 256,
		.page_size	= 4096,
		.tested		= TEST_OK_PREW,
		.probe		= probe_jedec,
		.erase		= erase_chip_jedec,
		.write		= write_39sf020,
	},

	{
		.vendor		= "SST",
		.name		= "SST39SF040",
		.manufacture_id	= SST_ID,
		.model_id	= SST_39SF040,
		.total_size	= 512,
		.page_size	= 4096,
		.tested		= TEST_OK_PREW,
		.probe		= probe_jedec,
		.erase		= erase_chip_jedec,
		.write		= write_39sf020,
	},

	{
		.vendor		= "SST",
		.name		= "SST39VF512",
		.manufacture_id	= SST_ID,
		.model_id	= SST_39VF512,
		.total_size	= 64,
		.page_size	= 4096,
		.tested		= TEST_UNTESTED,
		.probe		= probe_jedec,
		.erase		= erase_chip_jedec,
		.write		= write_39sf020,
	},

	{
		.vendor		= "SST",
		.name		= "SST39VF010",
		.manufacture_id	= SST_ID,
		.model_id	= SST_39VF010,
		.total_size	= 128,
		.page_size	= 4096,
		.tested		= TEST_UNTESTED,
		.probe		= probe_jedec,
		.erase		= erase_chip_jedec,
		.write		= write_39sf020,
	},

	{
		.vendor		= "SST",
		.name		= "SST39VF020",
		.manufacture_id	= SST_ID,
		.model_id	= SST_39VF020,
		.total_size	= 256,
		.page_size	= 4096,
		.tested		= TEST_OK_PREW,
		.probe		= probe_jedec,
		.erase		= erase_chip_jedec,
		.write		= write_39sf020,
	},

	{
		.vendor		= "SST",
		.name		= "SST39VF040",
		.manufacture_id	= SST_ID,
		.model_id	= SST_39VF040,
		.total_size	= 512,
		.page_size	= 4096,
		.tested		= TEST_OK_PROBE,
		.probe		= probe_jedec,
		.erase		= erase_chip_jedec,
		.write		= write_39sf020,
	},

	{
		.vendor		= "SST",
		.name		= "SST49LF002A/B",
		.manufacture_id	= SST_ID,
		.model_id	= SST_49LF002A,
		.total_size	= 256,
		.page_size	= 16 * 1024,
		.tested		= TEST_OK_PREW,
		.probe		= probe_sst_fwhub,
		.erase		= erase_sst_fwhub,
		.write		= write_sst_fwhub,
	},

	{
		.vendor		= "SST",
		.name		= "SST49LF003A/B",
		.manufacture_id	= SST_ID,
		.model_id	= SST_49LF003A,
		.total_size	= 384,
		.page_size	= 64 * 1024,
		.tested		= TEST_UNTESTED,
		.probe		= probe_sst_fwhub,
		.erase		= erase_sst_fwhub,
		.write		= write_sst_fwhub,
	},

	{
		.vendor		= "SST",
		.name		= "SST49LF004A/B",
		.manufacture_id	= SST_ID,
		.model_id	= SST_49LF004A,
		.total_size	= 512,
		.page_size	= 64 * 1024,
		.tested		= TEST_OK_PREW,
		.probe		= probe_sst_fwhub,
		.erase		= erase_sst_fwhub,
		.write		= write_sst_fwhub,
	},

	{
		.vendor		= "SST",
		.name		= "SST49LF004C",
		.manufacture_id	= SST_ID,
		.model_id	= SST_49LF004C,
		.total_size	= 512,
		.page_size	= 4 * 1024,
		.tested		= TEST_UNTESTED,
		.probe		= probe_49lfxxxc,
		.erase		= erase_49lfxxxc,
		.write		= write_49lfxxxc,
	},

	{
		.vendor		= "SST",
		.name		= "SST49LF008A",
		.manufacture_id	= SST_ID,
		.model_id	= SST_49LF008A,
		.total_size	= 1024,
		.page_size	= 64 * 1024,
		.tested		= TEST_OK_PREW,
		.probe		= probe_sst_fwhub,
		.erase		= erase_sst_fwhub,
		.write		= write_sst_fwhub,
	},

	{
		.vendor		= "SST",
		.name		= "SST49LF008C",
		.manufacture_id	= SST_ID,
		.model_id	= SST_49LF008C,
		.total_size	= 1024,
		.page_size	= 4 * 1024,
		.tested		= TEST_UNTESTED,
		.probe		= probe_49lfxxxc,
		.erase		= erase_49lfxxxc,
		.write		= write_49lfxxxc,
	},

	{
		.vendor		= "SST",
		.name		= "SST49LF016C",
		.manufacture_id	= SST_ID,
		.model_id	= SST_49LF016C,
		.total_size	= 2048,
		.page_size	= 4 * 1024,
		.tested		= TEST_OK_PREW,
		.probe		= probe_49lfxxxc,
		.erase		= erase_49lfxxxc,
		.write		= write_49lfxxxc,
	},

	{
		.vendor		= "SST",
		.name		= "SST49LF020",
		.manufacture_id	= SST_ID,
		.model_id	= SST_49LF020,
		.total_size	= 256,
		.page_size	= 16 * 1024,
		.tested		= TEST_OK_PR,
		.probe		= probe_jedec,
		.erase		= erase_49lf040,
		.write		= write_49lf040,
	},

	{
		.vendor		= "SST",
		.name		= "SST49LF020A",
		.manufacture_id	= SST_ID,
		.model_id	= SST_49LF020A,
		.total_size	= 256,
		.page_size	= 16 * 1024,
		.tested		= TEST_UNTESTED,
		.probe		= probe_jedec,
		.erase		= erase_49lf040,
		.write		= write_49lf040,
	},

	{
		.vendor		= "SST",
		.name		= "SST49LF040",
		.manufacture_id	= SST_ID,
		.model_id	= SST_49LF040,
		.total_size	= 512,
		.page_size	= 4096,
		.tested		= TEST_OK_PREW,
		.probe		= probe_jedec,
		.erase		= erase_49lf040,
		.write		= write_49lf040,
	},

	{
		.vendor		= "SST",
		.name		= "SST49LF040B",
		.manufacture_id	= SST_ID,
		.model_id	= SST_49LF040B,
		.total_size	= 512,
		.page_size	= 64 * 1024,
		.tested		= TEST_OK_PREW,
		.probe		= probe_sst_fwhub,
		.erase		= erase_sst_fwhub,
		.write		= write_sst_fwhub,
	},

	{
		.vendor		= "SST",
		.name		= "SST49LF080A",
		.manufacture_id	= SST_ID,
		.model_id	= SST_49LF080A,
		.total_size	= 1024,
		.page_size	= 4096,
		.tested		= TEST_OK_PREW,
		.probe		= probe_jedec,
		.erase		= erase_49lf040,
		.write		= write_49lf040,
	},

	{
		.vendor		= "SST",
		.name		= "SST49LF160C",
		.manufacture_id	= SST_ID,
		.model_id	= SST_49LF160C,
		.total_size	= 2048,
		.page_size	= 4 * 1024,
		.tested		= TEST_OK_PREW,
		.probe		= probe_49lfxxxc,
		.erase		= erase_49lfxxxc,
		.write		= write_49lfxxxc,
	},

	{
		.vendor		= "ST",
		.name		= "M25P05-A",
		.manufacture_id	= ST_ID,
		.model_id	= ST_M25P05A,
		.total_size	= 64,
		.page_size	= 256,
		.tested		= TEST_UNTESTED,
		.probe		= probe_spi_rdid,
		.erase		= spi_chip_erase_c7,
		.write		= spi_chip_write,
		.read		= spi_chip_read,
	},

	{
		.vendor		= "ST",
		.name		= "M25P10-A",
		.manufacture_id	= ST_ID,
		.model_id	= ST_M25P10A,
		.total_size	= 128,
		.page_size	= 256,
		.tested		= TEST_UNTESTED,
		.probe		= probe_spi_rdid,
		.erase		= spi_chip_erase_c7,
		.write		= spi_chip_write,
		.read		= spi_chip_read,
	},

	{
		.vendor		= "ST",
		.name		= "M25P20",
		.manufacture_id	= ST_ID,
		.model_id	= ST_M25P20,
		.total_size	= 256,
		.page_size	= 256,
		.tested		= TEST_UNTESTED,
		.probe		= probe_spi_rdid,
		.erase		= spi_chip_erase_c7,
		.write		= spi_chip_write,
		.read		= spi_chip_read,
	},

	{
		.vendor		= "ST",
		.name		= "M25P40",
		.manufacture_id	= ST_ID,
		.model_id	= ST_M25P40,
		.total_size	= 512,
		.page_size	= 256,
		.tested		= TEST_UNTESTED,
		.probe		= probe_spi_rdid,
		.erase		= spi_chip_erase_c7,
		.write		= spi_chip_write,
		.read		= spi_chip_read,
	},

	{
		.vendor		= "ST",
		.name		= "M25P40-old",
		.manufacture_id	= ST_ID,
		.model_id	= ST_M25P40_RES,
		.total_size	= 512,
		.page_size	= 256,
		.tested		= TEST_UNTESTED,
		.probe		= probe_spi_res,
		.erase		= spi_chip_erase_c7,
		.write		= spi_chip_write,
		.read		= spi_chip_read,
	},

	{
		.vendor		= "ST",
		.name		= "M25P80",
		.manufacture_id	= ST_ID,
		.model_id	= ST_M25P80,
		.total_size	= 1024,
		.page_size	= 256,
		.tested		= TEST_UNTESTED,
		.probe		= probe_spi_rdid,
		.erase		= spi_chip_erase_c7,
		.write		= spi_chip_write,
		.read		= spi_chip_read,
	},

	{
		.vendor		= "ST",
		.name		= "M25P16",
		.manufacture_id	= ST_ID,
		.model_id	= ST_M25P16,
		.total_size	= 2048,
		.page_size	= 256,
		.tested		= TEST_OK_PREW,
		.probe		= probe_spi_rdid,
		.erase		= spi_chip_erase_c7,
		.write		= spi_chip_write,
		.read		= spi_chip_read,
	},

	{
		.vendor		= "ST",
		.name		= "M25P32",
		.manufacture_id	= ST_ID,
		.model_id	= ST_M25P32,
		.total_size	= 4096,
		.page_size	= 256,
		.tested		= TEST_OK_PREW,
		.probe		= probe_spi_rdid,
		.erase		= spi_chip_erase_c7,
		.write		= spi_chip_write,
		.read		= spi_chip_read,
	},

	{
		.vendor		= "ST",
		.name		= "M25P64",
		.manufacture_id	= ST_ID,
		.model_id	= ST_M25P64,
		.total_size	= 8192,
		.page_size	= 256,
		.tested		= TEST_UNTESTED,
		.probe		= probe_spi_rdid,
		.erase		= spi_chip_erase_c7,
		.write		= spi_chip_write,
		.read		= spi_chip_read,
	},

	{
		.vendor		= "ST",
		.name		= "M25P128",
		.manufacture_id	= ST_ID,
		.model_id	= ST_M25P128,
		.total_size	= 16384,
		.page_size	= 256,
		.tested		= TEST_UNTESTED,
		.probe		= probe_spi_rdid,
		.erase		= spi_chip_erase_c7,
		.write		= spi_chip_write,
		.read		= spi_chip_read,
	},

	{
		.vendor		= "ST",
		.name		= "M29F002B",
		.manufacture_id	= ST_ID,
		.model_id	= ST_M29F002B,
		.total_size	= 256,
		.page_size	= 64 * 1024,
		.tested		= TEST_UNTESTED,
		.probe		= probe_jedec,
		.erase		= erase_chip_jedec,
		.write		= write_jedec,
	},

	{
		.vendor		= "ST",
		.name		= "M29F002T/NT",
		.manufacture_id	= ST_ID,
		.model_id	= ST_M29F002T,
		.total_size	= 256,
		.page_size	= 64 * 1024,
		.tested		= TEST_UNTESTED,
		.probe		= probe_jedec,
		.erase		= erase_chip_jedec,
		.write		= write_jedec,
	},

	{
		.vendor		= "ST",
		.name		= "M29F040B",
		.manufacture_id	= ST_ID,
		.model_id	= ST_M29F040B,
		.total_size	= 512,
		.page_size	= 64 * 1024,
		.tested		= TEST_OK_PREW,
		.probe		= probe_29f040b,
		.erase		= erase_29f040b,
		.write		= write_29f040b,
	},

	{
		.vendor		= "ST",
		.name		= "M29F400BT",
		.manufacture_id	= ST_ID,
		.model_id	= ST_M29F400BT,
		.total_size	= 512,
		.page_size	= 64 * 1024,
		.tested		= TEST_UNTESTED,
		.probe		= probe_m29f400bt,
		.erase		= erase_m29f400bt,
		.write		= write_coreboot_m29f400bt,
	},

	{
		.vendor		= "ST",
		.name		= "M29W010B",
		.manufacture_id	= ST_ID,
		.model_id	= ST_M29W010B,
		.total_size	= 128,
		.page_size	= 16 * 1024,
		.tested		= TEST_UNTESTED,
		.probe		= probe_jedec,
		.erase		= erase_chip_jedec,
		.write		= write_jedec,
	},

	{
		.vendor		= "ST",
		.name		= "M29W040B",
		.manufacture_id	= ST_ID,
		.model_id	= ST_M29W040B,
		.total_size	= 512,
		.page_size	= 64 * 1024,
		.tested		= TEST_UNTESTED,
		.probe		= probe_jedec,
		.erase		= erase_chip_jedec,
		.write		= write_jedec,
	},

	{
		.vendor		= "ST",
		.name		= "M50FLW040A",
		.manufacture_id	= ST_ID,
		.model_id	= ST_M50FLW040A,
		.total_size	= 512,
		.page_size	= 64 * 1024,
		.tested		= TEST_UNTESTED,
		.probe		= probe_stm50flw0x0x,
		.erase		= erase_stm50flw0x0x,
		.write		= write_stm50flw0x0x,
	},

	{
		.vendor		= "ST",
		.name		= "M50FLW040B",
		.manufacture_id	= ST_ID,
		.model_id	= ST_M50FLW040B,
		.total_size	= 512,
		.page_size	= 64 * 1024,
		.tested		= TEST_UNTESTED,
		.probe		= probe_stm50flw0x0x,
		.erase		= erase_stm50flw0x0x,
		.write		= write_stm50flw0x0x,
	},

	{
		.vendor		= "ST",
		.name		= "M50FLW080A",
		.manufacture_id	= ST_ID,
		.model_id	= ST_M50FLW080A,
		.total_size	= 1024,
		.page_size	= 64 * 1024,
		.tested		= TEST_OK_PREW,
		.probe		= probe_stm50flw0x0x,
		.erase		= erase_stm50flw0x0x,
		.write		= write_stm50flw0x0x,
	},

	{
		.vendor		= "ST",
		.name		= "M50FLW080B",
		.manufacture_id	= ST_ID,
		.model_id	= ST_M50FLW080B,
		.total_size	= 1024,
		.page_size	= 64 * 1024,
		.tested		= TEST_UNTESTED,
		.probe		= probe_stm50flw0x0x,
		.erase		= erase_stm50flw0x0x,
		.write		= write_stm50flw0x0x,
	},

	{
		.vendor		= "ST",
		.name		= "M50FW002",
		.manufacture_id	= ST_ID,
		.model_id	= ST_M50FW002,
		.total_size	= 256,
		.page_size	= 64 * 1024,
		.tested		= TEST_UNTESTED,
		.probe		= probe_49lfxxxc,
		.erase		= NULL,
		.write		= NULL,
	},

	{
		.vendor		= "ST",
		.name		= "M50FW016",
		.manufacture_id	= ST_ID,
		.model_id	= ST_M50FW016,
		.total_size	= 2048,
		.page_size	= 64 * 1024,
		.tested		= TEST_UNTESTED,
		.probe		= probe_82802ab,
		.erase		= erase_82802ab,
		.write		= write_82802ab,
	},

	{
		.vendor		= "ST",
		.name		= "M50FW040",
		.manufacture_id	= ST_ID,
		.model_id	= ST_M50FW040,
		.total_size	= 512,
		.page_size	= 64 * 1024,
		.tested		= TEST_OK_PREW,
		.probe		= probe_82802ab,
		.erase		= erase_82802ab,
		.write		= write_82802ab,
	},

	{
		.vendor		= "ST",
		.name		= "M50FW080",
		.manufacture_id	= ST_ID,
		.model_id	= ST_M50FW080,
		.total_size	= 1024,
		.page_size	= 64 * 1024,
		.tested		= TEST_UNTESTED,
		.probe		= probe_82802ab,
		.erase		= erase_82802ab,
		.write		= write_82802ab,
	},

	{
		.vendor		= "ST",
		.name		= "M50LPW116",
		.manufacture_id	= ST_ID,
		.model_id	= ST_M50LPW116,
		.total_size	= 2048,
		.page_size	= 64 * 1024,
		.tested		= TEST_UNTESTED,
		.probe		= probe_jedec,
		.erase		= erase_chip_jedec,
		.write		= write_jedec,
	},

	{
		.vendor		= "SyncMOS",
		.name		= "S29C31004T",
		.manufacture_id	= SYNCMOS_ID,
		.model_id	= S29C31004T,
		.total_size	= 512,
		.page_size	= 128,
		.tested		= TEST_UNTESTED,
		.probe		= probe_jedec,
		.erase		= erase_chip_jedec,
		.write		= write_49f002,
	},

	{
		.vendor		= "SyncMOS",
		.name		= "S29C51001T",
		.manufacture_id	= SYNCMOS_ID,
		.model_id	= S29C51001T,
		.total_size	= 128,
		.page_size	= 128,
		.tested		= TEST_UNTESTED,
		.probe		= probe_jedec,
		.erase		= erase_chip_jedec,
		.write		= write_49f002,
	},

	{
		.vendor		= "SyncMOS",
		.name		= "S29C51002T",
		.manufacture_id	= SYNCMOS_ID,
		.model_id	= S29C51002T,
		.total_size	= 256,
		.page_size	= 128,
		.tested		= TEST_OK_PREW,
		.probe		= probe_jedec,
		.erase		= erase_chip_jedec,
		.write		= write_49f002,
	},

	{
		.vendor		= "SyncMOS",
		.name		= "S29C51004T",
		.manufacture_id	= SYNCMOS_ID,
		.model_id	= S29C51004T,
		.total_size	= 512,
		.page_size	= 128,
		.tested		= TEST_UNTESTED,
		.probe		= probe_jedec,
		.erase		= erase_chip_jedec,
		.write		= write_49f002,
	},

	{
		.vendor		= "Winbond",
		.name		= "W25x10",
		.manufacture_id	= WINBOND_NEX_ID,
		.model_id	= W_25X10,
		.total_size	= 128,
		.page_size	= 256,
		.tested		= TEST_UNTESTED,
		.probe		= probe_spi_rdid,
		.erase		= spi_chip_erase_c7,
		.write		= spi_chip_write,
		.read		= spi_chip_read,
	},

	{
		.vendor		= "Winbond",
		.name		= "W25x20",
		.manufacture_id	= WINBOND_NEX_ID,
		.model_id	= W_25X20,
		.total_size	= 256,
		.page_size	= 256,
		.tested		= TEST_UNTESTED,
		.probe		= probe_spi_rdid,
		.erase		= spi_chip_erase_c7,
		.write		= spi_chip_write,
		.read		= spi_chip_read,
	},

	{
		.vendor		= "Winbond",
		.name		= "W25x40",
		.manufacture_id	= WINBOND_NEX_ID,
		.model_id	= W_25X40,
		.total_size	= 512,
		.page_size	= 256,
		.tested		= TEST_OK_PREW,
		.probe		= probe_spi_rdid,
		.erase		= spi_chip_erase_c7,
		.write		= spi_chip_write,
		.read		= spi_chip_read,
	},

	{
		.vendor		= "Winbond",
		.name		= "W25x80",
		.manufacture_id	= WINBOND_NEX_ID,
		.model_id	= W_25X80,
		.total_size	= 1024,
		.page_size	= 256,
		.tested		= TEST_OK_PREW,
		.probe		= probe_spi_rdid,
		.erase		= spi_chip_erase_c7,
		.write		= spi_chip_write,
		.read		= spi_chip_read,
	},

	{
		.vendor		= "Winbond",
		.name		= "W29C011",
		.manufacture_id	= WINBOND_ID,
		.model_id	= W_29C011,
		.total_size	= 128,
		.page_size	= 128,
		.tested		= TEST_OK_PREW,
		.probe		= probe_jedec,
		.erase		= erase_chip_jedec,
		.write		= write_jedec,
	},

	{
		.vendor		= "Winbond",
		.name		= "W29C020C",
		.manufacture_id	= WINBOND_ID,
		.model_id	= W_29C020C,
		.total_size	= 256,
		.page_size	= 128,
		.tested		= TEST_OK_PREW,
		.probe		= probe_jedec,
		.erase		= erase_chip_jedec,
		.write		= write_jedec,
	},

	{
		.vendor		= "Winbond",
		.name		= "W29C040P",
		.manufacture_id	= WINBOND_ID,
		.model_id	= W_29C040P,
		.total_size	= 512,
		.page_size	= 256,
		.tested		= TEST_UNTESTED,
		.probe		= probe_jedec,
		.erase		= erase_chip_jedec,
		.write		= write_jedec,
	},

	{
		.vendor		= "Winbond",
		.name		= "W29EE011",
		.manufacture_id	= WINBOND_ID,
		.model_id	= W_29C011,
		.total_size	= 128,
		.page_size	= 128,
		.tested		= TEST_OK_PREW,
		.probe		= probe_w29ee011,
		.erase		= erase_chip_jedec,
		.write		= write_jedec,
	},

	{
		.vendor		= "Winbond",
		.name		= "W39V040A",
		.manufacture_id	= WINBOND_ID,
		.model_id	= W_39V040A,
		.total_size	= 512,
		.page_size	= 64*1024,
		.tested		= TEST_UNTESTED,
		.probe		= probe_jedec,
		.erase		= erase_chip_jedec,
		.write		= write_39sf020,
	},

	{
		.vendor		= "Winbond",
		.name		= "W39V040B",
		.manufacture_id	= WINBOND_ID,
		.model_id	= W_39V040B,
		.total_size	= 512,
		.page_size	= 64*1024,
		.tested		= TEST_OK_PREW,
		.probe		= probe_jedec,
		.erase		= erase_chip_jedec,
		.write		= write_39sf020,
	},

	{
		.vendor		= "Winbond",
		.name		= "W39V040C",
		.manufacture_id	= WINBOND_ID,
		.model_id	= 0x50,
		.total_size	= 512,
		.page_size	= 64*1024,
		.tested		= TEST_OK_PREW,
		.probe		= probe_w39v040c,
		.erase		= erase_w39v040c,
		.write		= write_w39v040c,
	},

	{
		.vendor		= "Winbond",
		.name		= "W39V040FA",
		.manufacture_id	= WINBOND_ID,
		.model_id	= W_39V040FA,
		.total_size	= 512,
		.page_size	= 64*1024,
		.tested		= TEST_OK_PREW,
		.probe		= probe_jedec,
		.erase		= erase_chip_jedec,
		.write		= write_39sf020,
	},

	{
		.vendor		= "Winbond",
		.name		= "W39V080A",
		.manufacture_id	= WINBOND_ID,
		.model_id	= W_39V080A,
		.total_size	= 1024,
		.page_size	= 64*1024,
		.tested		= TEST_OK_PREW,
		.probe		= probe_jedec,
		.erase		= erase_chip_jedec,
		.write		= write_39sf020,
	},

	{
		.vendor		= "Winbond",
		.name		= "W49F002U",
		.manufacture_id	= WINBOND_ID,
		.model_id	= W_49F002U,
		.total_size	= 256,
		.page_size	= 128,
		.tested		= TEST_OK_PREW,
		.probe		= probe_jedec,
		.erase		= erase_chip_jedec,
		.write		= write_49f002,
	},

	{
		.vendor		= "Winbond",
		.name		= "W49V002A",
		.manufacture_id	= WINBOND_ID,
		.model_id	= W_49V002A,
		.total_size	= 256,
		.page_size	= 128,
		.tested		= TEST_OK_PREW,
		.probe		= probe_jedec,
		.erase		= erase_chip_jedec,
		.write		= write_49f002,
	},

	{
		.vendor		= "Winbond",
		.name		= "W49V002FA",
		.manufacture_id	= WINBOND_ID,
		.model_id	= W_49V002FA,
		.total_size	= 256,
		.page_size	= 128,
		.tested		= TEST_UNTESTED,
		.probe		= probe_jedec,
		.erase		= erase_chip_jedec,
		.write		= write_49f002,
	},

	{
		.vendor		= "Winbond",
		.name		= "W39V080FA",
		.manufacture_id	= WINBOND_ID,
		.model_id	= W_39V080FA,
		.total_size	= 1024,
		.page_size	= 64*1024,
		.tested		= TEST_OK_PREW,
		.probe		= probe_winbond_fwhub,
		.erase		= erase_winbond_fwhub,
		.write		= write_winbond_fwhub,
	},

	{
		.vendor		= "Winbond",
		.name		= "W39V080FA (dual mode)",
		.manufacture_id	= WINBOND_ID,
		.model_id	= W_39V080FA_DM,
		.total_size	= 512,
		.page_size	= 64*1024,
		.tested		= TEST_UNTESTED,
		.probe		= probe_winbond_fwhub,
		.erase		= erase_winbond_fwhub,
		.write		= write_winbond_fwhub,
	},

	{
		.vendor		= "Atmel",
		.name		= "unknown Atmel SPI chip",
		.manufacture_id	= ATMEL_ID,
		.model_id	= GENERIC_DEVICE_ID,
		.total_size	= 0,
		.page_size	= 256,
		.tested		= TEST_UNTESTED,
		.probe		= probe_spi_rdid,
		.erase		= NULL,
		.write		= NULL,
	},

	{
		.vendor		= "EON",
		.name		= "unknown EON SPI chip",
		.manufacture_id	= EON_ID_NOPREFIX,
		.model_id	= GENERIC_DEVICE_ID,
		.total_size	= 0,
		.page_size	= 256,
		.tested		= TEST_UNTESTED,
		.probe		= probe_spi_rdid,
		.erase		= NULL,
		.write		= NULL,
	},

	{
		.vendor		= "Macronix",
		.name		= "unknown Macronix SPI chip",
		.manufacture_id	= MX_ID,
		.model_id	= GENERIC_DEVICE_ID,
		.total_size	= 0,
		.page_size	= 256,
		.tested		= TEST_UNTESTED,
		.probe		= probe_spi_rdid,
		.erase		= NULL,
		.write		= NULL,
	},

	{
		.vendor		= "PMC",
		.name		= "unknown PMC SPI chip",
		.manufacture_id	= PMC_ID,
		.model_id	= GENERIC_DEVICE_ID,
		.total_size	= 0,
		.page_size	= 256,
		.tested		= TEST_UNTESTED,
		.probe		= probe_spi_rdid,
		.erase		= NULL,
		.write		= NULL,
	},

	{
		.vendor		= "SST",
		.name		= "unknown SST SPI chip",
		.manufacture_id	= SST_ID,
		.model_id	= GENERIC_DEVICE_ID,
		.total_size	= 0,
		.page_size	= 256,
		.tested		= TEST_UNTESTED,
		.probe		= probe_spi_rdid,
		.erase		= NULL,
		.write		= NULL,
	},

	{
		.vendor		= "ST",
		.name		= "unknown ST SPI chip",
		.manufacture_id	= ST_ID,
		.model_id	= GENERIC_DEVICE_ID,
		.total_size	= 0,
		.page_size	= 256,
		.tested		= TEST_UNTESTED,
		.probe		= probe_spi_rdid,
		.erase		= NULL,
		.write		= NULL,
	},

	{ NULL 	}
	};