struct winbond_spi_flash_params {
uint16_t id;
uint16_t nr_blocks;
+ u8 rd_cmd;
+ u8 wr_cmd;
const char *name;
};
{
.id = 0x4019,
.nr_blocks = 512,
+ .rd_cmd = READ_CMD_FULL,
+ .wr_cmd = PAGE_PROGRAM | QUAD_PAGE_PROGRAM,
.name = "W25Q256",
},
{
const struct winbond_spi_flash_params *params;
struct spi_flash *flash;
unsigned int i;
+ u8 cmd;
for (i = 0; i < ARRAY_SIZE(winbond_spi_flash_table); i++) {
params = &winbond_spi_flash_table[i];
return NULL;
}
+ /* Look for the fastest read cmd */
+ cmd = fls(params->rd_cmd & flash->spi->rd_cmd);
+ if (cmd) {
+ cmd = spi_read_cmds_array[cmd - 1];
+ flash->read_cmd = cmd;
+ }
+
+ /* Look for the fastest write cmd */
+ cmd = fls(params->wr_cmd & flash->spi->wr_cmd);
+ if (cmd) {
+ cmd = spi_write_cmds_array[cmd - 1];
+ flash->write_cmd = cmd;
+ }
+
flash->page_size = 256;
flash->sector_size = (idcode[1] == 0x20) ? 65536 : 4096;
flash->size = 4096 * 16 * params->nr_blocks;