spi: ti-qspi: Simplify qspi_write_msg and qspi_read_msg implementation
PATCH 1/1 spi: ti-qspi: Simplify qspi_write_msg and qspi_read_msg implementation
Make the unit of wlen to be byte, and simplify the code to avoid duplicate code for different wlen cases.
Signed-off-by Axel Lin <[email protected]>
--- drivers/spi/spi-ti-qspi.c | 61 ++++++++++++++++------------------------------- 1 file changed, 20 insertions(+), 41 deletions(-)
drivers/spi/spi-ti-qspi.c +20 -41
@@ -208,53 +208,36 @@ static int qspi_write_msg(struct ti_qspi *qspi, struct spi_transfer *t) txbuf = t->tx_buf; cmd = qspi->cmd |QSPI_WR_SNGL ; count = t->len; - wlen = t->bits_per_word; + wlen = t->bits_per_word >>3 ;/* in bytes */ while (count) {switch (wlen) { -case 8 : +case 1 :dev_dbg (qspi->dev,"tx cmd %08x dc %08x data %02x\n" , cmd, qspi->dc, *txbuf);writeb (*txbuf, qspi->base +QSPI_SPI_DATA_REG ); -ti_qspi_write (qspi, cmd,QSPI_SPI_CMD_REG ); - ret =wait_for_completion_timeout (&qspi->transfer_complete, -QSPI_COMPLETION_TIMEOUT ); -if (ret ==0 ) { -dev_err (qspi->dev,"write timed out\n" ); -return -ETIMEDOUT ; - } - txbuf +=1 ; - count -=1 ;break ; -case 16 : +case 2 :dev_dbg (qspi->dev,"tx cmd %08x dc %08x data %04x\n" , cmd, qspi->dc, *txbuf);writew (*((u16 *)txbuf), qspi->base +QSPI_SPI_DATA_REG ); -ti_qspi_write (qspi, cmd,QSPI_SPI_CMD_REG ); - ret =wait_for_completion_timeout (&qspi->transfer_complete, -QSPI_COMPLETION_TIMEOUT ); -if (ret ==0 ) { -dev_err (qspi->dev,"write timed out\n" ); -return -ETIMEDOUT ; - } - txbuf +=2 ; - count -=2 ;break ; -case 32 : +case 4 :dev_dbg (qspi->dev,"tx cmd %08x dc %08x data %08x\n" , cmd, qspi->dc, *txbuf);writel (*((u32 *)txbuf), qspi->base +QSPI_SPI_DATA_REG ); -ti_qspi_write (qspi, cmd,QSPI_SPI_CMD_REG ); - ret =wait_for_completion_timeout (&qspi->transfer_complete, -QSPI_COMPLETION_TIMEOUT ); -if (ret ==0 ) { -dev_err (qspi->dev,"write timed out\n" ); -return -ETIMEDOUT ; - } - txbuf +=4 ; - count -=4 ;break ; } + +ti_qspi_write (qspi, cmd,QSPI_SPI_CMD_REG ); + ret =wait_for_completion_timeout (&qspi->transfer_complete, +QSPI_COMPLETION_TIMEOUT ); +if (ret ==0 ) { +dev_err (qspi->dev,"write timed out\n" ); +return -ETIMEDOUT ; + } + txbuf += wlen; + count -= wlen; }return 0 ;
@@ -280,7 +263,7 @@ static int qspi_read_msg(struct ti_qspi *qspi, struct spi_transfer *t)break ; } count = t->len; - wlen = t->bits_per_word; + wlen = t->bits_per_word >>3 ;/* in bytes */ while (count) {dev_dbg (qspi->dev,"rx cmd %08x dc %08x\n" , cmd, qspi->dc);
@@ -292,22 +275,18 @@ static int qspi_read_msg(struct ti_qspi *qspi, struct spi_transfer *t)return -ETIMEDOUT ; }switch (wlen) { -case 8 : +case 1 : *rxbuf =readb (qspi->base +QSPI_SPI_DATA_REG ); - rxbuf +=1 ; - count -=1 ;break ; -case 16 : +case 2 : *((u16 *)rxbuf) =readw (qspi->base +QSPI_SPI_DATA_REG ); - rxbuf +=2 ; - count -=2 ;break ; -case 32 : +case 4 : *((u32 *)rxbuf) =readl (qspi->base +QSPI_SPI_DATA_REG ); - rxbuf +=4 ; - count -=4 ;break ; } + rxbuf += wlen; + count -= wlen; }return 0 ;
Signature · 8 lines
1.8.1.2 -- To unsubscribe from this list: send the line "unsubscribe linux-spi" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
Quoted 107 lines · Axel Lin
Make the unit of wlen to be byte, and simplify the code to avoid duplicate code for different wlen cases.
Signed-off-by Axel Lin<[email protected]>--- drivers/spi/spi-ti-qspi.c | 61 ++++++++++++++++------------------------------- 1 file changed, 20 insertions(+), 41 deletions(-)drivers/spi/spi-ti-qspi.c +18
-39@@ -208,53 +208,36 @@ static int qspi_write_msg(struct ti_qspi *qspi, struct spi_transfer *t) txbuf = t->tx_buf; cmd = qspi->cmd |QSPI_WR_SNGL ; count = t->len; - wlen = t->bits_per_word; + wlen = t->bits_per_word>>3 ;/* in bytes */ while (count) {switch (wlen) { -case 8 : +case 1 :dev_dbg (qspi->dev,"tx cmd %08x dc %08x data %02x\n" , cmd, qspi->dc, *txbuf);writeb (*txbuf, qspi->base +QSPI_SPI_DATA_REG ); -ti_qspi_write (qspi, cmd,QSPI_SPI_CMD_REG ); - ret =wait_for_completion_timeout (&qspi->transfer_complete, -QSPI_COMPLETION_TIMEOUT ); -if (ret ==0 ) { -dev_err (qspi->dev,"write timed out\n" ); -return -ETIMEDOUT ; - } - txbuf +=1 ; - count -=1 ;break ; -case 16 : +case 2 :dev_dbg (qspi->dev,"tx cmd %08x dc %08x data %04x\n" , cmd, qspi->dc, *txbuf);writew (*((u16 *)txbuf), qspi->base +QSPI_SPI_DATA_REG ); -ti_qspi_write (qspi, cmd,QSPI_SPI_CMD_REG ); - ret =wait_for_completion_timeout (&qspi->transfer_complete, -QSPI_COMPLETION_TIMEOUT ); -if (ret ==0 ) { -dev_err (qspi->dev,"write timed out\n" ); -return -ETIMEDOUT ; - } - txbuf +=2 ; - count -=2 ;break ; -case 32 : +case 4 :dev_dbg (qspi->dev,"tx cmd %08x dc %08x data %08x\n" , cmd, qspi->dc, *txbuf);writel (*((u32 *)txbuf), qspi->base +QSPI_SPI_DATA_REG ); -ti_qspi_write (qspi, cmd,QSPI_SPI_CMD_REG ); - ret =wait_for_completion_timeout (&qspi->transfer_complete, -QSPI_COMPLETION_TIMEOUT ); -if (ret ==0 ) { -dev_err (qspi->dev,"write timed out\n" ); -return -ETIMEDOUT ; - } - txbuf +=4 ; - count -=4 ;break ; } + +ti_qspi_write (qspi, cmd,QSPI_SPI_CMD_REG ); + ret =wait_for_completion_timeout (&qspi->transfer_complete, +QSPI_COMPLETION_TIMEOUT ); +if (ret ==0 ) { +dev_err (qspi->dev,"write timed out\n" ); +return -ETIMEDOUT ; + } + txbuf += wlen; + count -= wlen; }return 0 ;@@ -280,7 +263,7 @@ static int qspi_read_msg(struct ti_qspi *qspi, struct spi_transfer *t)break ; } count = t->len; - wlen = t->bits_per_word; + wlen = t->bits_per_word>>3 ;/* in bytes */ while (count) {dev_dbg (qspi->dev,"rx cmd %08x dc %08x\n" , cmd, qspi->dc);@@ -292,22 +275,18 @@ static int qspi_read_msg(struct ti_qspi *qspi, struct spi_transfer *t)return -ETIMEDOUT ; }switch (wlen) { -case 8 : +case 1 : *rxbuf =readb (qspi->base +QSPI_SPI_DATA_REG ); - rxbuf +=1 ; - count -=1 ;break ; -case 16 : +case 2 : *((u16 *)rxbuf) =readw (qspi->base +QSPI_SPI_DATA_REG ); - rxbuf +=2 ; - count -=2 ;break ; -case 32 : +case 4 :
drivers/spi/spi-ti-qspi.c static int qspi_read_msg(struct ti_qspi *qspi, struct spi_transfer *t) · line 292
Quoted 10 lines
drivers/spi/spi-ti-qspi.c +2
-2*((u32 *)rxbuf) =readl (qspi->base +QSPI_SPI_DATA_REG ); - rxbuf +=4 ; - count -=4 ;break ; } + rxbuf += wlen; + count -= wlen; }return 0 ;
Acked-by Sourav Poddar <[email protected]>
--
To unsubscribe from this list: send the line "unsubscribe linux-spi" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
Mark Brown
AppliedQuoted 2 lines · Axel Lin
Make the unit of wlen to be byte, and simplify the code to avoid duplicate code for different wlen cases.
Applied, thanks.