mirror of
https://source.denx.de/u-boot/u-boot.git
synced 2025-08-10 01:06:59 +02:00
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:
parent
65f88e0408
commit
8dea61da19
@ -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;
|
||||||
|
Loading…
Reference in New Issue
Block a user