# HG changeset patch # User Josef 'Jeff' Sipek # Date 1689381358 14400 # Fri Jul 14 20:35:58 2023 -0400 # Node ID d5b2c4c9ce69b960582cc1ec9600a35b2c34d179 # Parent 8a2071a21cc65db45f1f2181825b3d76b67dd7ac arch: move SPI setup code into a generic helper Signed-off-by: Josef 'Jeff' Sipek diff --git a/arch/atmega48p_spi.h b/arch/atmega48p_spi.h --- a/arch/atmega48p_spi.h +++ b/arch/atmega48p_spi.h @@ -47,15 +47,16 @@ SPI_BITORDER_LSB = REG_SPCR_DORD_LSB, }; -static inline void spi_init_master(enum spi_mode mode, - enum spi_clock clock, - enum spi_bitorder bitorder, - bool interrupt) +static inline void __spi_init(enum spi_mode mode, + enum spi_clock clock, + enum spi_bitorder bitorder, + bool interrupt, + bool master) { uint8_t spcr; uint8_t spsr; - spcr = REG_SPCR_SPE | REG_SPCR_MSTR; + spcr = REG_SPCR_SPE; spsr = 0; switch (mode) { @@ -100,12 +101,23 @@ if (interrupt) spcr |= REG_SPCR_SPIE; + if (master) + spcr |= REG_SPCR_MSTR; + spcr |= bitorder; mmregs->spcr = spcr; mmregs->spsr = spsr; } +static inline void spi_init_master(enum spi_mode mode, + enum spi_clock clock, + enum spi_bitorder bitorder, + bool interrupt) +{ + __spi_init(mode, clock, bitorder, interrupt, true); +} + /* transmit a single byte, CS is left up to the caller */ static inline void spi_tx_byte(uint8_t byte) {