diff options
author | Brian Norris <computersforpeace@gmail.com> | 2016-05-05 17:31:51 -0700 |
---|---|---|
committer | Brian Norris <computersforpeace@gmail.com> | 2016-06-01 17:22:45 -0700 |
commit | bc418cd2652f47a327e27f978caa3d85f9558b09 (patch) | |
tree | 1db7f46119b1d1b3d235842b3a24a87fb29f079e /drivers/mtd | |
parent | 78b400fde966fac6d1bc22b2960a757305215e1b (diff) | |
download | linux-bc418cd2652f47a327e27f978caa3d85f9558b09.tar.gz linux-bc418cd2652f47a327e27f978caa3d85f9558b09.tar.bz2 linux-bc418cd2652f47a327e27f978caa3d85f9558b09.zip |
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 <computersforpeace@gmail.com>
Diffstat (limited to 'drivers/mtd')
-rw-r--r-- | drivers/mtd/spi-nor/nxp-spifi.c | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/drivers/mtd/spi-nor/nxp-spifi.c b/drivers/mtd/spi-nor/nxp-spifi.c index 187adba5e69f..b0fb86996b8f 100644 --- 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_nor *nor, loff_t from, size_t len, 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 spi_nor *nor, loff_t to, size_t len, 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 spi_nor *nor, loff_t to, size_t len, 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) |