|
@@ -1013,15 +1013,8 @@ int spi_flash_scan(struct spi_flash *flash)
|
|
|
struct spi_slave *spi = flash->spi;
|
|
|
const struct spi_flash_params *params;
|
|
|
u16 jedec, ext_jedec;
|
|
|
- u8 cmd, idcode[5];
|
|
|
+ u8 idcode[5];
|
|
|
int ret;
|
|
|
- static u8 spi_read_cmds_array[] = {
|
|
|
- CMD_READ_ARRAY_SLOW,
|
|
|
- CMD_READ_ARRAY_FAST,
|
|
|
- CMD_READ_DUAL_OUTPUT_FAST,
|
|
|
- CMD_READ_QUAD_OUTPUT_FAST,
|
|
|
- CMD_READ_DUAL_IO_FAST,
|
|
|
- CMD_READ_QUAD_IO_FAST };
|
|
|
|
|
|
/* Read the ID codes */
|
|
|
ret = spi_flash_cmd(spi, CMD_READ_ID, idcode, sizeof(idcode));
|
|
@@ -1177,17 +1170,16 @@ int spi_flash_scan(struct spi_flash *flash)
|
|
|
/* Now erase size becomes valid sector size */
|
|
|
flash->sector_size = flash->erase_size;
|
|
|
|
|
|
- /* Look for the fastest read cmd */
|
|
|
- cmd = fls(params->e_rd_cmd & spi->mode_rx);
|
|
|
- if (cmd) {
|
|
|
- cmd = spi_read_cmds_array[cmd - 1];
|
|
|
- flash->read_cmd = cmd;
|
|
|
- } else {
|
|
|
- /* Go for default supported read cmd */
|
|
|
- flash->read_cmd = CMD_READ_ARRAY_FAST;
|
|
|
- }
|
|
|
+ /* Look for read commands */
|
|
|
+ flash->read_cmd = CMD_READ_ARRAY_FAST;
|
|
|
+ if (spi->mode_rx & SPI_RX_SLOW)
|
|
|
+ flash->read_cmd = CMD_READ_ARRAY_SLOW;
|
|
|
+ else if (spi->mode_rx & SPI_RX_QUAD && params->flags & RD_QUAD)
|
|
|
+ flash->read_cmd = CMD_READ_QUAD_OUTPUT_FAST;
|
|
|
+ else if (spi->mode_rx & SPI_RX_DUAL && params->flags & RD_DUAL)
|
|
|
+ flash->read_cmd = CMD_READ_DUAL_OUTPUT_FAST;
|
|
|
|
|
|
- /* Not require to look for fastest only two write cmds yet */
|
|
|
+ /* Look for write commands */
|
|
|
if (params->flags & WR_QPP && spi->mode & SPI_TX_QUAD)
|
|
|
flash->write_cmd = CMD_QUAD_PAGE_PROGRAM;
|
|
|
else
|