From bc418cd2652f47a327e27f978caa3d85f9558b09 Mon Sep 17 00:00:00 2001 From: Brian Norris Date: Thu, 5 May 2016 17:31:51 -0700 Subject: [PATCH 05/10] mtd: nxp-spifi: return amount of data transferred or error in read/write Add checking of SPI transfer errors and return them from read/write functions. Also return the amount of data transferred. Signed-off-by: Brian Norris --- drivers/mtd/spi-nor/nxp-spifi.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) --- a/drivers/mtd/spi-nor/nxp-spifi.c +++ b/drivers/mtd/spi-nor/nxp-spifi.c @@ -185,7 +185,7 @@ static ssize_t nxp_spifi_read(struct spi memcpy_fromio(buf, spifi->flash_base + from, len); *retlen += len; - return 0; + return len; } static ssize_t nxp_spifi_write(struct spi_nor *nor, loff_t to, size_t len, @@ -194,6 +194,7 @@ static ssize_t nxp_spifi_write(struct sp struct nxp_spifi *spifi = nor->priv; u32 cmd; int ret; + size_t i; ret = nxp_spifi_set_memory_mode_off(spifi); if (ret) @@ -209,10 +210,14 @@ static ssize_t nxp_spifi_write(struct sp SPIFI_CMD_FRAMEFORM(spifi->nor.addr_width + 1); writel(cmd, spifi->io_base + SPIFI_CMD); - while (len--) - writeb(*buf++, spifi->io_base + SPIFI_DATA); + for (i = 0; i < len; i++) + writeb(buf[i], spifi->io_base + SPIFI_DATA); - return nxp_spifi_wait_for_cmd(spifi); + ret = nxp_spifi_wait_for_cmd(spifi); + if (ret) + return ret; + + return len; } static int nxp_spifi_erase(struct spi_nor *nor, loff_t offs)