spi: fsl-espi: determine need for byte swap only once
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>
This commit is contained in:
parent
f254e65ce2
commit
e1cdee73df
@ -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;
|
||||
@ -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);
|
||||
@ -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");
|
||||
|
Loading…
Reference in New Issue
Block a user