[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <1462494716-95312-4-git-send-email-computersforpeace@gmail.com>
Date: Thu, 5 May 2016 17:31:49 -0700
From: Brian Norris <computersforpeace@...il.com>
To: <linux-mtd@...ts.infradead.org>
Cc: Heiner Kallweit <hkallweit1@...il.com>,
Brian Norris <computersforpeace@...il.com>,
Han Xu <han.xu@....com>, Michal Suchanek <hramrach@...il.com>,
Boris Brezillon <boris.brezillon@...e-electrons.com>,
Javier Martinez Canillas <javier@....samsung.com>,
Rafal Milecki <zajec5@...il.com>,
Jagan Teki <jteki@...nedev.com>,
"Andrew F. Davis" <afd@...com>,
Mika Westerberg <mika.westerberg@...ux.intel.com>,
Gabor Juhos <juhosg@...nwrt.org>,
Bean Huo <beanhuo@...ron.com>, linux-kernel@...r.kernel.org,
Bayi Cheng <bayi.cheng@...iatek.com>,
Joachim Eastwood <manabian@...il.com>,
Cyrille Pitchen <cyrille.pitchen@...el.com>
Subject: [PATCH v7 03/10] mtd: fsl-quadspi: return amount of data read/written or error
From: Michal Suchanek <hramrach@...il.com>
Return amount of data read/written or error as read(2)/write(2) does.
Signed-off-by: Michal Suchanek <hramrach@...il.com>
Signed-off-by: Brian Norris <computersforpeace@...il.com>
---
v6 -> v7:
* moved some *retlen changes to patch 7 to preserve bisectability
drivers/mtd/spi-nor/fsl-quadspi.c | 17 +++++++++++------
1 file changed, 11 insertions(+), 6 deletions(-)
diff --git a/drivers/mtd/spi-nor/fsl-quadspi.c b/drivers/mtd/spi-nor/fsl-quadspi.c
index 74dc155e1b3b..ea296769f015 100644
--- 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(struct fsl_qspi *q)
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_qspi *q, struct spi_nor *nor,
/* 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_nor *nor, u8 opcode, u8 *buf, int len)
} 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_nor *nor, loff_t to,
{
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,
@@ -925,7 +930,7 @@ static ssize_t fsl_qspi_read(struct spi_nor *nor, loff_t from,
len);
*retlen += len;
- return 0;
+ return len;
}
static int fsl_qspi_erase(struct spi_nor *nor, loff_t offs)
--
2.8.0.rc3.226.g39d4020
Powered by blists - more mailing lists