
One spansion quad bit set using CR, it's good to read back and check the written bit and also if it's already been set check for the bit and return.
Cc: Vignesh R vigneshr@ti.com Cc: Simon Glass sjg@chromium.org Cc: Bin Meng bmeng.cn@gmail.com Cc: Michal Simek michal.simek@xilinx.com Cc: Siva Durga Prasad Paladugu sivadur@xilinx.com Tested-by: Mugunthan V N mugunthanvnm@ti.com Signed-off-by: Jagan Teki jteki@openedev.com --- Changes for v3: - Fixed if statement for 'quad bit not clear' Changes for v2: - none
drivers/mtd/spi/spi_flash.c | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-)
diff --git a/drivers/mtd/spi/spi_flash.c b/drivers/mtd/spi/spi_flash.c index 30058d0..c3deda5 100644 --- a/drivers/mtd/spi/spi_flash.c +++ b/drivers/mtd/spi/spi_flash.c @@ -862,12 +862,18 @@ static int spansion_quad_enable(struct spi_flash *flash) if (ret < 0) return ret;
- if (qeb_status & STATUS_QEB_WINSPAN) { - debug("SF: winspan: QEB is already set\n"); - } else { - ret = write_cr(flash, STATUS_QEB_WINSPAN); - if (ret < 0) - return ret; + if (qeb_status & STATUS_QEB_WINSPAN) + return 0; + + ret = write_cr(flash, STATUS_QEB_WINSPAN); + if (ret < 0) + return ret; + + /* read CR and check it */ + ret = read_cr(flash, &qeb_status); + if (!(ret >= 0 && (qeb_status & STATUS_QEB_WINSPAN))) { + printf("SF: Spansion CR Quad bit not clear\n"); + return -EINVAL; }
return ret;