From 0c5fd74d00dc94ba1386cac466267c0a0cdc9f41 Mon Sep 17 00:00:00 2001 From: Siva Durga Prasad Paladugu Date: Wed, 18 Jun 2014 12:49:44 +0530 Subject: [PATCH] sf: Send Dual IO commands if configured for dual IO Dont send Quad commands and send Dual IO commands if configured for dual IO. Signed-off-by: Siva Durga Prasad Paladugu Signed-off-by: Michal Simek --- drivers/mtd/spi/sf_probe.c | 18 +++++++++++++++--- include/spi.h | 1 + include/spi_flash.h | 2 ++ 3 files changed, 18 insertions(+), 3 deletions(-) diff --git a/drivers/mtd/spi/sf_probe.c b/drivers/mtd/spi/sf_probe.c index 083c52491e1..3f2f0ed810a 100644 --- a/drivers/mtd/spi/sf_probe.c +++ b/drivers/mtd/spi/sf_probe.c @@ -170,15 +170,21 @@ static struct spi_flash *spi_flash_validate_params(struct spi_slave *spi, /* Look for the fastest read cmd */ cmd = fls(params->e_rd_cmd & flash->spi->op_mode_rx); if (cmd) { - cmd = spi_read_cmds_array[cmd - 1]; - flash->read_cmd = cmd; + if (flash->spi->dio != SF_DUALIO_FLASH) { + cmd = spi_read_cmds_array[cmd - 1]; + flash->read_cmd = cmd; + } else { + flash->read_cmd = CMD_READ_DUAL_IO_FAST; + } } else { /* Go for default supported read cmd */ flash->read_cmd = CMD_READ_ARRAY_FAST; } /* Not require to look for fastest only two write cmds yet */ - if (params->flags & WR_QPP && flash->spi->op_mode_tx & SPI_OPM_TX_QPP) + if ((params->flags & WR_QPP) && + (flash->spi->op_mode_tx & SPI_OPM_TX_QPP) && + (flash->spi->dio != SF_DUALIO_FLASH)) flash->write_cmd = CMD_QUAD_PAGE_PROGRAM; else /* Go for default supported write cmd */ @@ -217,6 +223,12 @@ static struct spi_flash *spi_flash_validate_params(struct spi_slave *spi, case CMD_READ_QUAD_IO_FAST: flash->dummy_byte = 2; break; + case CMD_READ_DUAL_IO_FAST: + if (idcode[0] == SPI_FLASH_CFI_MFR_STMICRO) + flash->dummy_byte = 2; + else + flash->dummy_byte = 1; + break; case CMD_READ_ARRAY_SLOW: flash->dummy_byte = 0; break; diff --git a/include/spi.h b/include/spi.h index ffd66478b19..3f810dafee0 100644 --- a/include/spi.h +++ b/include/spi.h @@ -79,6 +79,7 @@ struct spi_slave { unsigned int max_write_size; void *memory_map; u8 option; + u8 dio; u8 flags; }; diff --git a/include/spi_flash.h b/include/spi_flash.h index 361df365002..c488a25a154 100644 --- a/include/spi_flash.h +++ b/include/spi_flash.h @@ -43,6 +43,8 @@ enum spi_dual_flash { SF_DUAL_PARALLEL_FLASH = 1 << 1, }; +#define SF_DUALIO_FLASH 1 + /** * struct spi_flash_params - SPI/QSPI flash device params structure * -- 2.47.3