aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/layerscape/patches-4.4/1092-mtd-fsl-quadspi-return-amount-of-data-read-written-o.patch
diff options
context:
space:
mode:
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.patch73
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)