mtd: m25p80: fix retlen usage in m25p80_read and propagate errors
PATCH 1/2 mtd: m25p80: fix retlen usage in m25p80_read and propagate errors
So far retlen usage in m25p80_read is different from retlen usage in other places on the mtd subsystem. Usually bytes read are added to the current value of *retlen, here the current value is ignored.
As a prerequisite for using m25p80_read in a loop if the transfer size is limited we have to fix this.
Also propagate the return code of spi_sync.
Signed-off-by Heiner Kallweit <[email protected]>
--- drivers/mtd/devices/m25p80.c | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-)
drivers/mtd/devices/m25p80.c +8 -7
@@ -126,10 +126,9 @@ static int m25p80_read(struct spi_nor *nor, loff_t from, size_t len,struct spi_device *spi = flash->spi;struct spi_transfer t[2 ];struct spi_message m; -unsigned int dummy = nor->read_dummy; -/* convert the dummy cycles to the number of bytes */ - dummy /=8 ; +unsigned int cmdlen =m25p_cmdsz (nor) + nor->read_dummy /8 ; +int ret;spi_message_init (&m);memset (t,0 , (sizeof t));
@@ -138,7 +137,7 @@ static int m25p80_read(struct spi_nor *nor, loff_t from, size_t len,m25p_addr2cmd (nor, from, flash->command); t[0 ].tx_buf = flash->command; - t[0 ].len =m25p_cmdsz (nor) + dummy; + t[0 ].len = cmdlen;spi_message_add_tail (&t[0 ], &m); t[1 ].rx_buf = buf;
@@ -146,10 +145,12 @@ static int m25p80_read(struct spi_nor *nor, loff_t from, size_t len, t[1 ].len = len;spi_message_add_tail (&t[1 ], &m); -spi_sync (spi, &m); + ret =spi_sync (spi, &m); - *retlen = m.actual_length -m25p_cmdsz (nor) - dummy; -return 0 ; +if (m.actual_length > cmdlen) + *retlen += m.actual_length - cmdlen; + +return ret; }/*
Signature · 1 line
2.7.1