spi: mpc8xxx: Make code more readable

Introduce the to_prescale_mod and set_char_len inline functions to make
the code more readable.

Note that the added "if (bitlen > 16)" check does not change the
semantics of the current code, and hence only preserves the current
error (this will be fixed in a later patch in the series).

Signed-off-by: Mario Six <mario.six@gdsys.cc>
Acked-by: Jagan Teki <jagan@amarulasolutions.com>
This commit is contained in:
Mario Six 2019-04-29 01:58:47 +05:30 committed by Jagan Teki
parent 65f88e0408
commit 8dea61da19

View File

@ -30,6 +30,16 @@ enum {
SPI_COM_LST = BIT(31 - 9), SPI_COM_LST = BIT(31 - 9),
}; };
static inline u32 to_prescale_mod(u32 val)
{
return (min(val, (u32)15) << 16);
}
static void set_char_len(spi8xxx_t *spi, u32 val)
{
clrsetbits_be32(&spi->mode, SPI_MODE_LEN_MASK, (val << 20));
}
#define SPI_TIMEOUT 1000 #define SPI_TIMEOUT 1000
struct spi_slave *spi_setup_slave(uint bus, uint cs, uint max_hz, uint mode) struct spi_slave *spi_setup_slave(uint bus, uint cs, uint max_hz, uint mode)
@ -66,7 +76,7 @@ void spi_init(void)
*/ */
out_be32(&spi->mode, SPI_MODE_REV | SPI_MODE_MS | SPI_MODE_EN); out_be32(&spi->mode, SPI_MODE_REV | SPI_MODE_MS | SPI_MODE_EN);
/* Use SYSCLK / 8 (16.67MHz typ.) */ /* Use SYSCLK / 8 (16.67MHz typ.) */
clrsetbits_be32(&spi->mode, 0x000f0000, BIT(16)); clrsetbits_be32(&spi->mode, SPI_MODE_PM_MASK, to_prescale_mod(1));
/* Clear all SPI events */ /* Clear all SPI events */
setbits_be32(&spi->event, 0xffffffff); setbits_be32(&spi->event, 0xffffffff);
/* Mask all SPI interrupts */ /* Mask all SPI interrupts */
@ -119,13 +129,14 @@ int spi_xfer(struct spi_slave *slave, uint bitlen, const void *dout, void *din,
clrbits_be32(&spi->mode, SPI_MODE_EN); clrbits_be32(&spi->mode, SPI_MODE_EN);
if (bitlen <= 4) { if (bitlen <= 4)
clrsetbits_be32(&spi->mode, 0x00f00000, (3 << 20)); set_char_len(spi, 3);
} else if (bitlen <= 16) { else if (bitlen <= 16)
clrsetbits_be32(&spi->mode, 0x00f00000, set_char_len(spi, bitlen - 1);
((bitlen - 1) << 20)); else
} else { set_char_len(spi, 0);
clrbits_be32(&spi->mode, 0x00f00000);
if (bitlen > 16) {
/* Set up the next iteration if sending > 32 bits */ /* Set up the next iteration if sending > 32 bits */
bitlen -= 32; bitlen -= 32;
dout += 4; dout += 4;