Skip to content

Commit

Permalink
spi: fsl-espi: determine need for byte swap only once
Browse files Browse the repository at this point in the history
Determine need for byte swap only once and store it in new member
swab in struct fsl_espi.

Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
  • Loading branch information
Heiner Kallweit authored and Mark Brown committed Nov 30, 2016
1 parent f254e65 commit e1cdee7
Showing 1 changed file with 6 additions and 2 deletions.
8 changes: 6 additions & 2 deletions drivers/spi/spi-fsl-espi.c
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,7 @@ struct fsl_espi {
const void *tx;
void *rx;

bool swab;
unsigned int rx_len;
unsigned int tx_len;
unsigned int rxskip;
Expand Down Expand Up @@ -140,14 +141,14 @@ static void fsl_espi_memcpy_swab(void *to, const void *from,
struct spi_message *m,
struct spi_transfer *t)
{
struct fsl_espi *espi = spi_master_get_devdata(m->spi->master);
unsigned int len = t->len;

if (!(m->spi->mode & SPI_LSB_FIRST) || t->bits_per_word <= 8) {
if (!espi->swab) {
memcpy(to, from, len);
return;
}

/* In case of LSB-first and bits_per_word > 8 byte-swap all words */
while (len)
if (len >= 4) {
*(u32 *)to = swahb32p(from);
Expand Down Expand Up @@ -384,6 +385,9 @@ static int fsl_espi_trans(struct spi_message *m, struct spi_transfer *trans)
struct spi_device *spi = m->spi;
int ret;

/* In case of LSB-first and bits_per_word > 8 byte-swap all words */
espi->swab = spi->mode & SPI_LSB_FIRST && trans->bits_per_word > 8;

espi->rxskip = fsl_espi_check_rxskip_mode(m);
if (trans->rx_nbits == SPI_NBITS_DUAL && !espi->rxskip) {
dev_err(espi->dev, "Dual output mode requires RXSKIP mode!\n");
Expand Down

0 comments on commit e1cdee7

Please sign in to comment.