Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e1cdee73 authored by Heiner Kallweit's avatar Heiner Kallweit Committed by Mark Brown
Browse files

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: default avatarHeiner Kallweit <hkallweit1@gmail.com>
Signed-off-by: default avatarMark Brown <broonie@kernel.org>
parent f254e65c
Loading
Loading
Loading
Loading
+6 −2
Original line number Diff line number Diff line
@@ -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");