diff options
Diffstat (limited to 'target/linux/layerscape/patches-4.4/1092-mtd-fsl-quadspi-return-amount-of-data-read-written-o.patch')
-rw-r--r-- | target/linux/layerscape/patches-4.4/1092-mtd-fsl-quadspi-return-amount-of-data-read-written-o.patch | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/target/linux/layerscape/patches-4.4/1092-mtd-fsl-quadspi-return-amount-of-data-read-written-o.patch b/target/linux/layerscape/patches-4.4/1092-mtd-fsl-quadspi-return-amount-of-data-read-written-o.patch new file mode 100644 index 0000000000..443803693c --- /dev/null +++ b/target/linux/layerscape/patches-4.4/1092-mtd-fsl-quadspi-return-amount-of-data-read-written-o.patch @@ -0,0 +1,73 @@ +From 99768b3062501b05810fb62545279da3a4371ca0 Mon Sep 17 00:00:00 2001 +From: Michal Suchanek <hramrach@gmail.com> +Date: Wed, 2 Dec 2015 10:38:19 +0000 +Subject: [PATCH 092/113] mtd: fsl-quadspi: return amount of data read/written + or error + +Return amount of data read/written or error as read(2)/write(2) does. + +Signed-off-by: Michal Suchanek <hramrach@gmail.com> +Signed-off-by: Hou Zhiqiang <Zhiqiang.Hou@freescale.com> +--- + drivers/mtd/spi-nor/fsl-quadspi.c | 18 +++++++++++------- + 1 file changed, 11 insertions(+), 7 deletions(-) + +--- a/drivers/mtd/spi-nor/fsl-quadspi.c ++++ b/drivers/mtd/spi-nor/fsl-quadspi.c +@@ -618,7 +618,7 @@ static inline void fsl_qspi_invalid(stru + qspi_writel(q, reg, q->iobase + QUADSPI_MCR); + } + +-static int fsl_qspi_nor_write(struct fsl_qspi *q, struct spi_nor *nor, ++static ssize_t fsl_qspi_nor_write(struct fsl_qspi *q, struct spi_nor *nor, + u8 opcode, unsigned int to, u32 *txbuf, + unsigned count, size_t *retlen) + { +@@ -647,8 +647,11 @@ static int fsl_qspi_nor_write(struct fsl + /* Trigger it */ + ret = fsl_qspi_runcmd(q, opcode, to, count); + +- if (ret == 0 && retlen) +- *retlen += count; ++ if (ret == 0) { ++ if (retlen) ++ *retlen += count; ++ return count; ++ } + + return ret; + } +@@ -860,6 +863,8 @@ static int fsl_qspi_write_reg(struct spi + } else if (len > 0) { + ret = fsl_qspi_nor_write(q, nor, opcode, 0, + (u32 *)buf, len, NULL); ++ if (ret > 0) ++ return 0; + } else { + dev_err(q->dev, "invalid cmd %d\n", opcode); + ret = -EINVAL; +@@ -873,12 +878,12 @@ static ssize_t fsl_qspi_write(struct spi + { + struct fsl_qspi *q = nor->priv; + +- fsl_qspi_nor_write(q, nor, nor->program_opcode, to, ++ ssize_t ret = fsl_qspi_nor_write(q, nor, nor->program_opcode, to, + (u32 *)buf, len, retlen); + + /* invalid the data in the AHB buffer. */ + fsl_qspi_invalid(q); +- return 0; ++ return ret; + } + + static ssize_t fsl_qspi_read(struct spi_nor *nor, loff_t from, +@@ -924,8 +929,7 @@ static ssize_t fsl_qspi_read(struct spi_ + memcpy(buf, q->ahb_addr + q->chip_base_addr + from - q->memmap_offs, + len); + +- *retlen += len; +- return 0; ++ return len; + } + + static int fsl_qspi_erase(struct spi_nor *nor, loff_t offs) |