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

Commit dd7aa8d4 authored by Maxime Chevallier's avatar Maxime Chevallier Committed by Mark Brown
Browse files

spi: a3700: Change SPI mode before asserting chip-select



The spi device mode should be configured in the controller before the
chip-select is asserted, so that a clock polarity configuration change
is not interpreted as a clock tick by the device.

This patch moves the mode setting to the 'prepare_message' function
instead of the 'transfer_one' function.

By doing so, this patch also removes redundant code in
a3700_spi_clock_set.

This was tested on EspressoBin board, with spidev.

Signed-off-by: default avatarMaxime Chevallier <maxime.chevallier@smile.fr>
Signed-off-by: default avatarMark Brown <broonie@kernel.org>
parent 5a866ec0
Loading
Loading
Loading
Loading
+4 −13
Original line number Diff line number Diff line
@@ -213,7 +213,7 @@ static void a3700_spi_mode_set(struct a3700_spi *a3700_spi,
}

static void a3700_spi_clock_set(struct a3700_spi *a3700_spi,
				unsigned int speed_hz, u16 mode)
				unsigned int speed_hz)
{
	u32 val;
	u32 prescale;
@@ -231,17 +231,6 @@ static void a3700_spi_clock_set(struct a3700_spi *a3700_spi,
		val |= A3700_SPI_CLK_CAPT_EDGE;
		spireg_write(a3700_spi, A3700_SPI_IF_TIME_REG, val);
	}

	val = spireg_read(a3700_spi, A3700_SPI_IF_CFG_REG);
	val &= ~(A3700_SPI_CLK_POL | A3700_SPI_CLK_PHA);

	if (mode & SPI_CPOL)
		val |= A3700_SPI_CLK_POL;

	if (mode & SPI_CPHA)
		val |= A3700_SPI_CLK_PHA;

	spireg_write(a3700_spi, A3700_SPI_IF_CFG_REG, val);
}

static void a3700_spi_bytelen_set(struct a3700_spi *a3700_spi, unsigned int len)
@@ -423,7 +412,7 @@ static void a3700_spi_transfer_setup(struct spi_device *spi,

	a3700_spi = spi_master_get_devdata(spi->master);

	a3700_spi_clock_set(a3700_spi, xfer->speed_hz, spi->mode);
	a3700_spi_clock_set(a3700_spi, xfer->speed_hz);

	byte_len = xfer->bits_per_word >> 3;

@@ -584,6 +573,8 @@ static int a3700_spi_prepare_message(struct spi_master *master,

	a3700_spi_bytelen_set(a3700_spi, 4);

	a3700_spi_mode_set(a3700_spi, spi->mode);

	return 0;
}