You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
74 lines
2.1 KiB
Diff
74 lines
2.1 KiB
Diff
8 years ago
|
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)
|