232f11cf0dad7c4db951071b0aa6cdd381135655
[oweals/openwrt.git] /
1 From fc0d7e542a0d4193521899d15f8f4999dc295323 Mon Sep 17 00:00:00 2001
2 From: Michal Suchanek <hramrach@gmail.com>
3 Date: Thu, 5 May 2016 17:31:49 -0700
4 Subject: [PATCH 03/10] mtd: fsl-quadspi: return amount of data read/written or
5  error
6
7 Return amount of data read/written or error as read(2)/write(2) does.
8
9 Signed-off-by: Michal Suchanek <hramrach@gmail.com>
10 Signed-off-by: Brian Norris <computersforpeace@gmail.com>
11 ---
12  drivers/mtd/spi-nor/fsl-quadspi.c | 17 +++++++++++------
13  1 file changed, 11 insertions(+), 6 deletions(-)
14
15 --- a/drivers/mtd/spi-nor/fsl-quadspi.c
16 +++ b/drivers/mtd/spi-nor/fsl-quadspi.c
17 @@ -575,7 +575,7 @@ static inline void fsl_qspi_invalid(stru
18         writel(reg, q->iobase + QUADSPI_MCR);
19  }
20  
21 -static int fsl_qspi_nor_write(struct fsl_qspi *q, struct spi_nor *nor,
22 +static ssize_t fsl_qspi_nor_write(struct fsl_qspi *q, struct spi_nor *nor,
23                                 u8 opcode, unsigned int to, u32 *txbuf,
24                                 unsigned count, size_t *retlen)
25  {
26 @@ -604,8 +604,11 @@ static int fsl_qspi_nor_write(struct fsl
27         /* Trigger it */
28         ret = fsl_qspi_runcmd(q, opcode, to, count);
29  
30 -       if (ret == 0 && retlen)
31 -               *retlen += count;
32 +       if (ret == 0) {
33 +               if (retlen)
34 +                       *retlen += count;
35 +               return count;
36 +       }
37  
38         return ret;
39  }
40 @@ -814,6 +817,8 @@ static int fsl_qspi_write_reg(struct spi
41         } else if (len > 0) {
42                 ret = fsl_qspi_nor_write(q, nor, opcode, 0,
43                                         (u32 *)buf, len, NULL);
44 +               if (ret > 0)
45 +                       return 0;
46         } else {
47                 dev_err(q->dev, "invalid cmd %d\n", opcode);
48                 ret = -EINVAL;
49 @@ -827,12 +832,12 @@ static ssize_t fsl_qspi_write(struct spi
50  {
51         struct fsl_qspi *q = nor->priv;
52  
53 -       fsl_qspi_nor_write(q, nor, nor->program_opcode, to,
54 +       ssize_t ret = fsl_qspi_nor_write(q, nor, nor->program_opcode, to,
55                                 (u32 *)buf, len, retlen);
56  
57         /* invalid the data in the AHB buffer. */
58         fsl_qspi_invalid(q);
59 -       return 0;
60 +       return ret;
61  }
62  
63  static ssize_t fsl_qspi_read(struct spi_nor *nor, loff_t from,
64 @@ -879,7 +884,7 @@ static ssize_t fsl_qspi_read(struct spi_
65                 len);
66  
67         *retlen += len;
68 -       return 0;
69 +       return len;
70  }
71  
72  static int fsl_qspi_erase(struct spi_nor *nor, loff_t offs)