Commit fc0d7e54 authored by Michal Suchanek's avatar Michal Suchanek Committed by Brian Norris

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: default avatarMichal Suchanek <hramrach@gmail.com>
Signed-off-by: default avatarBrian Norris <computersforpeace@gmail.com>
parent 1992297b
...@@ -618,7 +618,7 @@ static inline void fsl_qspi_invalid(struct fsl_qspi *q) ...@@ -618,7 +618,7 @@ static inline void fsl_qspi_invalid(struct fsl_qspi *q)
qspi_writel(q, reg, q->iobase + QUADSPI_MCR); 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, u8 opcode, unsigned int to, u32 *txbuf,
unsigned count, size_t *retlen) unsigned count, size_t *retlen)
{ {
...@@ -647,8 +647,11 @@ static int fsl_qspi_nor_write(struct fsl_qspi *q, struct spi_nor *nor, ...@@ -647,8 +647,11 @@ static int fsl_qspi_nor_write(struct fsl_qspi *q, struct spi_nor *nor,
/* Trigger it */ /* Trigger it */
ret = fsl_qspi_runcmd(q, opcode, to, count); ret = fsl_qspi_runcmd(q, opcode, to, count);
if (ret == 0 && retlen) if (ret == 0) {
*retlen += count; if (retlen)
*retlen += count;
return count;
}
return ret; return ret;
} }
...@@ -860,6 +863,8 @@ static int fsl_qspi_write_reg(struct spi_nor *nor, u8 opcode, u8 *buf, int len) ...@@ -860,6 +863,8 @@ static int fsl_qspi_write_reg(struct spi_nor *nor, u8 opcode, u8 *buf, int len)
} else if (len > 0) { } else if (len > 0) {
ret = fsl_qspi_nor_write(q, nor, opcode, 0, ret = fsl_qspi_nor_write(q, nor, opcode, 0,
(u32 *)buf, len, NULL); (u32 *)buf, len, NULL);
if (ret > 0)
return 0;
} else { } else {
dev_err(q->dev, "invalid cmd %d\n", opcode); dev_err(q->dev, "invalid cmd %d\n", opcode);
ret = -EINVAL; ret = -EINVAL;
...@@ -873,12 +878,12 @@ static ssize_t fsl_qspi_write(struct spi_nor *nor, loff_t to, ...@@ -873,12 +878,12 @@ static ssize_t fsl_qspi_write(struct spi_nor *nor, loff_t to,
{ {
struct fsl_qspi *q = nor->priv; 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); (u32 *)buf, len, retlen);
/* invalid the data in the AHB buffer. */ /* invalid the data in the AHB buffer. */
fsl_qspi_invalid(q); fsl_qspi_invalid(q);
return 0; return ret;
} }
static ssize_t fsl_qspi_read(struct spi_nor *nor, loff_t from, 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, ...@@ -925,7 +930,7 @@ static ssize_t fsl_qspi_read(struct spi_nor *nor, loff_t from,
len); len);
*retlen += len; *retlen += len;
return 0; return len;
} }
static int fsl_qspi_erase(struct spi_nor *nor, loff_t offs) static int fsl_qspi_erase(struct spi_nor *nor, loff_t offs)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment