1
0
mirror of https://github.com/RIOT-OS/RIOT.git synced 2024-12-29 04:50:03 +01:00

cpu/periph_spi: update implementations to new API

Make all spi_acquire() implementations return `void` and add assertions to
check for valid parameters, where missing.
This commit is contained in:
Marian Buschsieweke 2021-02-01 14:05:16 +01:00
parent 7aab478678
commit f04b522601
No known key found for this signature in database
GPG Key ID: 61F64C6599B1539F
17 changed files with 72 additions and 93 deletions

View File

@ -24,10 +24,10 @@
*
* @}
*/
#include <assert.h>
#include "cpu.h"
#include "mutex.h"
#include "assert.h"
#include "periph/spi.h"
/**
@ -78,10 +78,11 @@ void spi_init_pins(spi_t bus)
#endif
}
int spi_acquire(spi_t bus, spi_cs_t cs, spi_mode_t mode, spi_clk_t clk)
void spi_acquire(spi_t bus, spi_cs_t cs, spi_mode_t mode, spi_clk_t clk)
{
(void)bus;
(void)cs;
assert(bus == SPI_DEV(0));
/* lock the bus and power on the SPI peripheral */
mutex_lock(&lock);
@ -94,8 +95,6 @@ int spi_acquire(spi_t bus, spi_cs_t cs, spi_mode_t mode, spi_clk_t clk)
/* clear interrupt flag by reading SPSR and data register by reading SPDR */
(void)SPSR;
(void)SPDR;
return SPI_OK;
}
void spi_release(spi_t bus)

View File

@ -87,7 +87,7 @@ void spi_init_pins(spi_t bus)
gpio_init(spi_config[bus].mosi_pin, GPIO_OUT);
}
int spi_acquire(spi_t bus, spi_cs_t cs, spi_mode_t mode, spi_clk_t clk)
void spi_acquire(spi_t bus, spi_cs_t cs, spi_mode_t mode, spi_clk_t clk)
{
(void)cs;
(void)clk;
@ -106,8 +106,6 @@ int spi_acquire(spi_t bus, spi_cs_t cs, spi_mode_t mode, spi_clk_t clk)
(void)dev(bus)->STATUS;
(void)dev(bus)->DATA;
return SPI_OK;
}
void spi_release(spi_t bus)

View File

@ -21,12 +21,13 @@
* @}
*/
#include <assert.h>
#include "vendor/hw_memmap.h"
#include "vendor/hw_ssi.h"
#include "cpu.h"
#include "mutex.h"
#include "assert.h"
#include "periph/spi.h"
#define ENABLE_DEBUG 0
@ -93,10 +94,10 @@ void spi_init_pins(spi_t bus)
gpio_init_mux(spi_config[bus].miso_pin, OVERRIDE_DISABLE, GPIO_MUX_NONE, rxd);
}
int spi_acquire(spi_t bus, spi_cs_t cs, spi_mode_t mode, spi_clk_t clk)
void spi_acquire(spi_t bus, spi_cs_t cs, spi_mode_t mode, spi_clk_t clk)
{
DEBUG("%s: bus=%u\n", __FUNCTION__, bus);
(void) cs;
(void)cs;
/* lock the bus */
mutex_lock(&locks[bus]);
/* power on device */
@ -107,8 +108,6 @@ int spi_acquire(spi_t bus, spi_cs_t cs, spi_mode_t mode, spi_clk_t clk)
dev(bus)->CR0 = ((spi_clk_config[clk].scr << 8) | mode | SSI_CR0_DSS(8));
/* enable SSI device */
dev(bus)->CR1 = SSI_CR1_SSE;
return SPI_OK;
}
void spi_release(spi_t bus)
@ -132,6 +131,7 @@ static uint8_t _trx(cc2538_ssi_t *dev, uint8_t in)
void spi_transfer_bytes(spi_t bus, spi_cs_t cs, bool cont,
const void *out, void *in, size_t len)
{
assert((unsigned)bus < SPI_NUMOF);
DEBUG("%s: bus=%u, len=%u\n", __FUNCTION__, bus, (unsigned)len);
const uint8_t *out_buf = out;

View File

@ -56,9 +56,10 @@ void spi_init_pins(spi_t bus)
gpio_init(spi_config[bus].miso_pin, GPIO_IN_PD);
}
int spi_acquire(spi_t bus, spi_cs_t cs, spi_mode_t mode, spi_clk_t clk)
void spi_acquire(spi_t bus, spi_cs_t cs, spi_mode_t mode, spi_clk_t clk)
{
(void)cs;
assert((unsigned)bus < SPI_NUMOF);
mutex_lock(&spi_lock[bus]);
@ -68,8 +69,8 @@ int spi_acquire(spi_t bus, spi_cs_t cs, spi_mode_t mode, spi_clk_t clk)
USART_InitSync_TypeDef init = USART_INITSYNC_DEFAULT;
init.baudrate = (uint32_t) clk;
init.clockMode = (USART_ClockMode_TypeDef) mode;
init.baudrate = (uint32_t)clk;
init.clockMode = (USART_ClockMode_TypeDef)mode;
init.msbf = true;
USART_InitSync(spi_config[bus].dev, &init);
@ -86,8 +87,6 @@ int spi_acquire(spi_t bus, spi_cs_t cs, spi_mode_t mode, spi_clk_t clk)
USART_ROUTEPEN_TXPEN |
USART_ROUTEPEN_CLKPEN);
#endif
return SPI_OK;
}
void spi_release(spi_t bus)

View File

@ -289,7 +289,7 @@ int spi_init_cs(spi_t bus, spi_cs_t cs)
return SPI_OK;
}
int IRAM_ATTR spi_acquire(spi_t bus, spi_cs_t cs, spi_mode_t mode, spi_clk_t clk)
void IRAM_ATTR spi_acquire(spi_t bus, spi_cs_t cs, spi_mode_t mode, spi_clk_t clk)
{
DEBUG("%s bus=%u cs=%u mode=%u clk=%u\n", __func__, bus, cs, mode, clk);
@ -308,7 +308,7 @@ int IRAM_ATTR spi_acquire(spi_t bus, spi_cs_t cs, spi_mode_t mode, spi_clk_t clk
LOG_TAG_ERROR("spi",
"SPI_DEV(%d) CS signal could not be initialized\n",
bus);
return SPI_NOCS;
assert(0);
}
/* lock the bus */
@ -375,8 +375,6 @@ int IRAM_ATTR spi_acquire(spi_t bus, spi_cs_t cs, spi_mode_t mode, spi_clk_t clk
DEBUG("%s bus %d: SPI_CLOCK_REG=%08x\n",
__func__, bus, _spi[bus].regs->clock.val);
return SPI_OK;
}
void IRAM_ATTR spi_release(spi_t bus)

View File

@ -22,9 +22,10 @@
* @}
*/
#include <assert.h>
#include "cpu.h"
#include "mutex.h"
#include "assert.h"
#include "periph/spi.h"
#include "vendor/spi.h"
@ -102,7 +103,7 @@ int spi_init_cs(spi_t dev, spi_cs_t cs)
return SPI_OK;
}
int spi_acquire(spi_t dev, spi_cs_t cs, spi_mode_t mode, spi_clk_t clk)
void spi_acquire(spi_t dev, spi_cs_t cs, spi_mode_t mode, spi_clk_t clk)
{
(void)cs;
assert(dev < SPI_NUMOF);
@ -111,8 +112,6 @@ int spi_acquire(spi_t dev, spi_cs_t cs, spi_mode_t mode, spi_clk_t clk)
_REG32(spi_config[dev].addr, SPI_REG_SCKDIV) = _spi_clks_config[clk];
_REG32(spi_config[dev].addr, SPI_REG_SCKMODE) = mode;
return SPI_OK;
}
void spi_release(spi_t dev)

View File

@ -26,9 +26,10 @@
* @}
*/
#include <assert.h>
#include "cpu.h"
#include "mutex.h"
#include "assert.h"
#include "periph/spi.h"
#define ENABLE_DEBUG 0
@ -144,9 +145,10 @@ int spi_init_cs(spi_t bus, spi_cs_t cs)
return SPI_OK;
}
int spi_acquire(spi_t bus, spi_cs_t cs, spi_mode_t mode, spi_clk_t clk)
void spi_acquire(spi_t bus, spi_cs_t cs, spi_mode_t mode, spi_clk_t clk)
{
(void) cs;
(void)cs;
assert((unsigned)bus < SPI_NUMOF);
/* lock and power on the bus */
mutex_lock(&locks[bus]);
poweron(bus);
@ -156,8 +158,6 @@ int spi_acquire(spi_t bus, spi_cs_t cs, spi_mode_t mode, spi_clk_t clk)
/* configure clock and mode */
dev(bus)->CTAR[0] = (mode | SPI_CTAR_FMSZ(7) | spi_clk_config[clk]);
return SPI_OK;
}
void spi_release(spi_t bus)

View File

@ -67,9 +67,10 @@ void spi_init_pins(spi_t bus)
ROM_GPIOPinTypeSSI(spi_confs[bus].gpio_port, spi_confs[bus].pins.mask);
}
int spi_acquire(spi_t bus, spi_cs_t cs, spi_mode_t mode, spi_clk_t clk)
void spi_acquire(spi_t bus, spi_cs_t cs, spi_mode_t mode, spi_clk_t clk)
{
(void) cs;
(void)cs;
assert((unsigned)bus < SPI_NUMOF);
/* lock bus */
mutex_lock(&locks[bus]);
/* enable clock for SSI */
@ -83,8 +84,6 @@ int spi_acquire(spi_t bus, spi_cs_t cs, spi_mode_t mode, spi_clk_t clk)
8);
ROM_SSIEnable(spi_confs[bus].ssi_base);
return SPI_OK;
}
void spi_release(spi_t bus)

View File

@ -95,20 +95,17 @@ void spi_init_pins(spi_t bus)
*(&PINSEL0 + cfg->pinsel_clk) |= cfg->pinsel_msk_clk;
}
int spi_acquire(spi_t bus, spi_cs_t cs, spi_mode_t mode, spi_clk_t clk)
void spi_acquire(spi_t bus, spi_cs_t cs, spi_mode_t mode, spi_clk_t clk)
{
(void) cs;
(void)cs; (void)mode;
assert((unsigned)bus < SPI_NUMOF);
assert(mode == SPI_MODE_0);
uint32_t pclksel;
uint32_t cpsr;
lpc23xx_spi_t *dev = get_dev(bus);
/* only support for mode 0 at the moment */
if (mode != SPI_MODE_0) {
return SPI_NOMODE;
}
/* lock bus */
mutex_lock(&lock[bus]);
@ -141,8 +138,6 @@ int spi_acquire(spi_t bus, spi_cs_t cs, spi_mode_t mode, spi_clk_t clk)
while (dev->SR & SSPSR_RNE) { /* while RNE (Receive FIFO Not Empty)...*/
dev->DR; /* read data*/
}
return SPI_OK;
}
void spi_release(spi_t bus)

View File

@ -23,9 +23,10 @@
* @}
*/
#include <assert.h>
#include "cpu.h"
#include "mutex.h"
#include "assert.h"
#include "periph/spi.h"
/**
@ -36,7 +37,7 @@ static mutex_t spi_lock = MUTEX_INIT;
void spi_init(spi_t bus)
{
assert(bus <= SPI_NUMOF);
assert((unsigned)bus < SPI_NUMOF);
/* we need to differentiate between the legacy SPI device and USCI */
#ifndef SPI_USE_USCI
@ -66,14 +67,12 @@ void spi_init_pins(spi_t bus)
gpio_periph_mode(SPI_PIN_CLK, true);
}
int spi_acquire(spi_t bus, spi_cs_t cs, spi_mode_t mode, spi_clk_t clk)
void spi_acquire(spi_t bus, spi_cs_t cs, spi_mode_t mode, spi_clk_t clk)
{
(void)bus;
(void)cs;
if (clk == SPI_CLK_10MHZ) {
return SPI_NOCLK;
}
assert((unsigned)bus < SPI_NUMOF);
assert(clk != SPI_CLK_10MHZ);
/* lock the bus */
mutex_lock(&spi_lock);
@ -100,8 +99,6 @@ int spi_acquire(spi_t bus, spi_cs_t cs, spi_mode_t mode, spi_clk_t clk)
/* release from software reset */
SPI_BASE->CTL1 &= ~(USCI_SPI_CTL1_SWRST);
#endif
return SPI_OK;
}
void spi_release(spi_t bus)

View File

@ -20,6 +20,7 @@
#ifdef MODULE_PERIPH_SPIDEV_LINUX
#include <assert.h>
#include <fcntl.h>
#include <string.h>
#include <sys/ioctl.h>
@ -145,12 +146,10 @@ void spidev_linux_teardown(void)
}
}
int spi_acquire(spi_t bus, spi_cs_t cs, spi_mode_t mode, spi_clk_t clk)
void spi_acquire(spi_t bus, spi_cs_t cs, spi_mode_t mode, spi_clk_t clk)
{
DEBUG("spi_acquire(%u, %u, 0x%02x, %d)\n", bus, cs, mode, clk);
if (bus >= SPI_NUMOF) {
return SPI_NODEV;
}
assert((unsigned)bus < SPI_NUMOF);
mutex_lock(&(device_state[bus].lock));
@ -166,8 +165,7 @@ int spi_acquire(spi_t bus, spi_cs_t cs, spi_mode_t mode, spi_clk_t clk)
unsigned csid = CS_TO_CSID(cs);
if (device_state[bus].fd[csid] < 0) {
DEBUG("spi_acquire: No fd for %u:%u\n", bus, csid);
mutex_unlock(&(device_state[bus].lock));
return SPI_NOCS;
assert(0);
}
fd = device_state[bus].fd[csid];
DEBUG("spi_acquire: Using %u:%u with HWCS (-> fd 0x%x)\n", bus, csid, fd);
@ -175,25 +173,23 @@ int spi_acquire(spi_t bus, spi_cs_t cs, spi_mode_t mode, spi_clk_t clk)
else if (IS_GPIO_CS(cs) || cs == SPI_CS_UNDEF) {
fd = spidev_get_first_fd(&(device_state[bus]));
if (fd < 0) {
mutex_unlock(&(device_state[bus].lock));
return SPI_NOCS;
DEBUG("spi_acquire: Invalid CS parameter\n");
assert(0);
}
DEBUG("spi_acquire: Using SPI_CS_UNDEF (-> fd 0x%x)\n", fd);
}
else {
DEBUG("spi_acquire: Invalid CS parameter\n");
mutex_unlock(&(device_state[bus].lock));
return SPI_NOCS;
assert(0);
}
int res = spi_set_params(fd, use_hwcs, mode, clk);
if (res < 0) {
DEBUG("spi_acquire: set_params failed\n");
mutex_unlock(&(device_state[bus].lock));
assert(0);
}
DEBUG("spi_acquire: bus %u acquired\n", bus);
return SPI_OK;
}
void spi_init(spi_t bus)

View File

@ -21,9 +21,10 @@
* @}
*/
#include <assert.h>
#include "cpu.h"
#include "mutex.h"
#include "assert.h"
#include "periph/spi.h"
#include "periph/gpio.h"
@ -59,9 +60,10 @@ void spi_init_pins(spi_t bus)
SPI_MISOSEL = spi_config[bus].miso;
}
int spi_acquire(spi_t bus, spi_cs_t cs, spi_mode_t mode, spi_clk_t clk)
void spi_acquire(spi_t bus, spi_cs_t cs, spi_mode_t mode, spi_clk_t clk)
{
(void) cs;
(void)cs;
assert((unsigned)bus < SPI_NUMOF);
mutex_lock(&locks[bus]);
/* power on the bus (NRF51 only) */
@ -71,8 +73,6 @@ int spi_acquire(spi_t bus, spi_cs_t cs, spi_mode_t mode, spi_clk_t clk)
dev(bus)->FREQUENCY = clk;
/* enable the bus */
dev(bus)->ENABLE = 1;
return SPI_OK;
}
void spi_release(spi_t bus)

View File

@ -24,9 +24,10 @@
* @}
*/
#include <assert.h>
#include "cpu.h"
#include "mutex.h"
#include "assert.h"
#include "periph/spi.h"
#include "periph/gpio.h"
#include "periph_cpu.h"
@ -147,9 +148,10 @@ void spi_init_pins(spi_t bus)
spi_twi_irq_register_spi(dev(bus), spi_isr_handler, (void *)bus);
}
int spi_acquire(spi_t bus, spi_cs_t cs, spi_mode_t mode, spi_clk_t clk)
void spi_acquire(spi_t bus, spi_cs_t cs, spi_mode_t mode, spi_clk_t clk)
{
(void)cs;
assert((unsigned)bus < SPI_NUMOF);
mutex_lock(&locks[bus]);
/* configure bus */
@ -157,8 +159,6 @@ int spi_acquire(spi_t bus, spi_cs_t cs, spi_mode_t mode, spi_clk_t clk)
dev(bus)->FREQUENCY = clk;
/* enable the bus */
dev(bus)->ENABLE = SPIM_ENABLE_ENABLE_Enabled;
return SPI_OK;
}
void spi_release(spi_t bus)

View File

@ -20,7 +20,8 @@
* @}
*/
#include "assert.h"
#include <assert.h>
#include "bitarithm.h"
#include "mutex.h"
@ -187,8 +188,10 @@ void spi_deinit_pins(spi_t bus)
}
#endif /* MODULE_PERIPH_SPI_RECONFIGURE */
int spi_acquire(spi_t bus, spi_cs_t cs, spi_mode_t mode, spi_clk_t clk)
void spi_acquire(spi_t bus, spi_cs_t cs, spi_mode_t mode, spi_clk_t clk)
{
assert((unsigned)bus < SPI_NUMOF);
assert((mode & ~(SPI_CFG_CPHA_MASK | SPI_CFG_CPOL_MASK)) == 0);
const spi_conf_t *const conf = &spi_config[bus];
mutex_lock(&locks[bus]);
@ -197,18 +200,12 @@ int spi_acquire(spi_t bus, spi_cs_t cs, spi_mode_t mode, spi_clk_t clk)
* matter how far it is from the requested one. */
_spi_controller_set_speed(conf->dev, clk);
if ((mode & ~(SPI_CFG_CPHA_MASK | SPI_CFG_CPOL_MASK)) != 0) {
return SPI_NOMODE;
}
DEBUG("[spi] acquire: mode CPHA=%d CPOL=%d, cs=0x%" PRIx32 "\n",
!!(mode & SPI_CFG_CPHA_MASK), !!(mode & SPI_CFG_CPOL_MASK),
(uint32_t)cs);
conf->dev->CFG =
(conf->dev->CFG & ~(SPI_CFG_CPHA_MASK | SPI_CFG_CPOL_MASK)) | mode;
return SPI_OK;
}
void spi_release(spi_t bus)

View File

@ -26,9 +26,10 @@
* @}
*/
#include <assert.h>
#include "cpu.h"
#include "mutex.h"
#include "assert.h"
#include "periph/spi.h"
#include "pm_layered.h"
@ -374,9 +375,10 @@ void spi_deinit_pins(spi_t bus)
gpio_disable_mux(spi_config[bus].mosi_pin);
}
int spi_acquire(spi_t bus, spi_cs_t cs, spi_mode_t mode, spi_clk_t clk)
void spi_acquire(spi_t bus, spi_cs_t cs, spi_mode_t mode, spi_clk_t clk)
{
(void)cs;
assert((unsigned)bus < SPI_NUMOF);
/* get exclusive access to the device */
mutex_lock(&locks[bus]);
@ -392,8 +394,6 @@ int spi_acquire(spi_t bus, spi_cs_t cs, spi_mode_t mode, spi_clk_t clk)
/* mux clk_pin to SPI peripheral */
gpio_init_mux(spi_config[bus].clk_pin, spi_config[bus].clk_mux);
return SPI_OK;
}
void spi_release(spi_t bus)

View File

@ -23,9 +23,10 @@
* @}
*/
#include <assert.h>
#include "cpu.h"
#include "mutex.h"
#include "assert.h"
#include "periph/gpio.h"
#include "periph/spi.h"
@ -62,9 +63,11 @@ void spi_init_pins(spi_t bus)
gpio_init_mux(spi_config[bus].miso, spi_config[bus].mux);
}
int spi_acquire(spi_t bus, spi_cs_t cs, spi_mode_t mode, spi_clk_t clk)
void spi_acquire(spi_t bus, spi_cs_t cs, spi_mode_t mode, spi_clk_t clk)
{
(void) cs;
(void)cs;
assert((unsigned)bus < SPI_NUMOF);
/* lock bus */
mutex_lock(&locks[bus]);
/* enable SPI device clock */
@ -73,8 +76,6 @@ int spi_acquire(spi_t bus, spi_cs_t cs, spi_mode_t mode, spi_clk_t clk)
dev(bus)->SPI_CSR[0] = (SPI_CSR_SCBR(CLOCK_CORECLOCK / clk) | mode);
dev(bus)->SPI_MR = (SPI_MR_MSTR | SPI_MR_MODFDIS);
dev(bus)->SPI_CR = SPI_CR_SPIEN;
return SPI_OK;
}
void spi_release(spi_t bus)

View File

@ -26,6 +26,8 @@
* @}
*/
#include <assert.h>
#include "bitarithm.h"
#include "cpu.h"
#include "mutex.h"
@ -219,8 +221,9 @@ int spi_init_with_gpio_mode(spi_t bus, spi_gpio_mode_t mode)
}
#endif
int spi_acquire(spi_t bus, spi_cs_t cs, spi_mode_t mode, spi_clk_t clk)
void spi_acquire(spi_t bus, spi_cs_t cs, spi_mode_t mode, spi_clk_t clk)
{
assert((unsigned)bus < SPI_NUMOF);
/* lock bus */
mutex_lock(&locks[bus]);
@ -279,8 +282,6 @@ int spi_acquire(spi_t bus, spi_cs_t cs, spi_mode_t mode, spi_clk_t clk)
if (cr2_extra_settings) {
dev(bus)->CR2 = (SPI_CR2_SETTINGS | cr2_extra_settings);
}
return SPI_OK;
}
void spi_release(spi_t bus)