cpu/periph/i2c: update implementations to new I2C API

Make all `spi_acquire` implementations return `void` and add assertions to check for valid device identifier where missing.
This commit is contained in:
Gunar Schorcht 2021-11-25 13:41:07 +01:00
parent 3d93b2bcf0
commit 007e29ebb5
16 changed files with 44 additions and 58 deletions

View File

@ -22,11 +22,12 @@
* @} * @}
*/ */
#include <assert.h>
#include <stdint.h> #include <stdint.h>
#include <errno.h> #include <errno.h>
#include "cpu.h" #include "cpu.h"
#include "mutex.h" #include "mutex.h"
#include "assert.h"
#include "periph/i2c.h" #include "periph/i2c.h"
#include "periph_conf.h" #include "periph_conf.h"
@ -219,12 +220,11 @@ int i2c_write_bytes(i2c_t dev, uint16_t addr, const void *data, size_t len,
return 0; return 0;
} }
int i2c_acquire(i2c_t dev) void i2c_acquire(i2c_t dev)
{ {
assert(dev < I2C_NUMOF); assert(dev < I2C_NUMOF);
mutex_lock(&locks[dev]); mutex_lock(&locks[dev]);
return 0;
} }
void i2c_release(i2c_t dev) void i2c_release(i2c_t dev)

View File

@ -18,6 +18,7 @@
* *
* @} * @}
*/ */
#include <assert.h>
#include <errno.h> #include <errno.h>
#include "cpu.h" #include "cpu.h"
@ -74,10 +75,7 @@ void i2c_init(i2c_t i2c)
{ {
uint8_t baudrate; uint8_t baudrate;
if (i2c >= I2C_NUMOF) { assert((unsigned)i2c < I2C_NUMOF);
DEBUG("[i2c] init: dev is invalid.\n");
return;
}
baudrate = _i2c_calc_baud(i2c); baudrate = _i2c_calc_baud(i2c);
if (baudrate == 0) { if (baudrate == 0) {
@ -97,12 +95,14 @@ void i2c_init(i2c_t i2c)
void i2c_init_pins(i2c_t i2c) void i2c_init_pins(i2c_t i2c)
{ {
assert((unsigned)i2c < I2C_NUMOF);
gpio_init(i2c_config[i2c].sda_pin, GPIO_OPC_WRD_AND_PULL); gpio_init(i2c_config[i2c].sda_pin, GPIO_OPC_WRD_AND_PULL);
gpio_init(i2c_config[i2c].scl_pin, GPIO_OPC_WRD_AND_PULL); gpio_init(i2c_config[i2c].scl_pin, GPIO_OPC_WRD_AND_PULL);
} }
int i2c_acquire(i2c_t i2c) void i2c_acquire(i2c_t i2c)
{ {
assert((unsigned)i2c < I2C_NUMOF);
DEBUG("acquire\n"); DEBUG("acquire\n");
pm_block(3); pm_block(3);
mutex_lock(&i2c_ctx[i2c].locks); mutex_lock(&i2c_ctx[i2c].locks);
@ -113,12 +113,11 @@ int i2c_acquire(i2c_t i2c)
| TWI_MASTER_WIEN_bm | TWI_MASTER_WIEN_bm
| TWI_MASTER_ENABLE_bm; | TWI_MASTER_ENABLE_bm;
dev(i2c)->MASTER.STATUS = TWI_MASTER_BUSSTATE_IDLE_gc; dev(i2c)->MASTER.STATUS = TWI_MASTER_BUSSTATE_IDLE_gc;
return 0;
} }
void i2c_release(i2c_t i2c) void i2c_release(i2c_t i2c)
{ {
assert((unsigned)i2c < I2C_NUMOF);
dev(i2c)->MASTER.CTRLA = 0; dev(i2c)->MASTER.CTRLA = 0;
pm_periph_disable(i2c_config[i2c].pwr); pm_periph_disable(i2c_config[i2c].pwr);
mutex_unlock(&i2c_ctx[i2c].locks); mutex_unlock(&i2c_ctx[i2c].locks);
@ -129,6 +128,8 @@ void i2c_release(i2c_t i2c)
static int _i2c_transaction(i2c_t i2c, uint16_t addr, const void *data, static int _i2c_transaction(i2c_t i2c, uint16_t addr, const void *data,
size_t len, uint8_t flags, bool is_read) size_t len, uint8_t flags, bool is_read)
{ {
assert((unsigned)i2c < I2C_NUMOF);
if (flags & I2C_ADDR10) { if (flags & I2C_ADDR10) {
DEBUG("[i2c] xfer: no 10 bit address support.\n"); DEBUG("[i2c] xfer: no 10 bit address support.\n");
return -EOPNOTSUPP; return -EOPNOTSUPP;
@ -238,6 +239,8 @@ static inline void _i2c_read_handler(int i2c)
*/ */
static inline void isr_handler(int i2c) static inline void isr_handler(int i2c)
{ {
assert((unsigned)i2c < I2C_NUMOF);
avr8_enter_isr(); avr8_enter_isr();
int8_t const m_status = dev(i2c)->MASTER.STATUS; int8_t const m_status = dev(i2c)->MASTER.STATUS;

View File

@ -231,14 +231,12 @@ void i2c_init(i2c_t dev)
DEBUG(" - I2C master status (0x%x).\n", _i2c_master_stat_get()); DEBUG(" - I2C master status (0x%x).\n", _i2c_master_stat_get());
} }
int i2c_acquire(i2c_t dev) void i2c_acquire(i2c_t dev)
{ {
(void)dev;
assert(dev < I2C_NUMOF);
DEBUG("%s\n", __FUNCTION__); DEBUG("%s\n", __FUNCTION__);
if (dev < I2C_NUMOF) {
mutex_lock(&lock); mutex_lock(&lock);
return 0;
}
return -1;
} }
void i2c_release(i2c_t dev) void i2c_release(i2c_t dev)

View File

@ -126,12 +126,11 @@ void i2c_init(i2c_t devnum)
I2C->MTPR = MTPR_TPR_100KHZ; I2C->MTPR = MTPR_TPR_100KHZ;
} }
int i2c_acquire(i2c_t dev) void i2c_acquire(i2c_t dev)
{ {
(void)dev; (void)dev;
assert(dev < I2C_NUMOF); assert(dev < I2C_NUMOF);
mutex_lock(&_lock); mutex_lock(&_lock);
return 0;
} }
void i2c_release(i2c_t dev) void i2c_release(i2c_t dev)

View File

@ -142,15 +142,15 @@ void i2c_init(i2c_t dev)
I2C_Enable(i2c_config[dev].dev, true); I2C_Enable(i2c_config[dev].dev, true);
} }
int i2c_acquire(i2c_t dev) void i2c_acquire(i2c_t dev)
{ {
assert(dev < I2C_NUMOF);
/* acquire lock */ /* acquire lock */
mutex_lock(&i2c_lock[dev]); mutex_lock(&i2c_lock[dev]);
/* power peripheral */ /* power peripheral */
CMU_ClockEnable(i2c_config[dev].cmu, true); CMU_ClockEnable(i2c_config[dev].cmu, true);
return 0;
} }
void i2c_release(i2c_t dev) void i2c_release(i2c_t dev)

View File

@ -145,7 +145,7 @@ static inline void _i2c_delay (uint32_t delay);
void i2c_init(i2c_t dev) void i2c_init(i2c_t dev)
{ {
CHECK_PARAM (dev < I2C_NUMOF) assert(dev < I2C_NUMOF);
if (i2c_config[dev].speed == I2C_SPEED_FAST_PLUS || if (i2c_config[dev].speed == I2C_SPEED_FAST_PLUS ||
i2c_config[dev].speed == I2C_SPEED_HIGH) { i2c_config[dev].speed == I2C_SPEED_HIGH) {
@ -263,19 +263,16 @@ void i2c_init(i2c_t dev)
xt_ints_on(BIT(CPU_INUM_I2C)); xt_ints_on(BIT(CPU_INUM_I2C));
i2c_release(dev); i2c_release(dev);
return;
} }
int i2c_acquire(i2c_t dev) void i2c_acquire(i2c_t dev)
{ {
DEBUG ("%s\n", __func__); DEBUG ("%s\n", __func__);
CHECK_PARAM_RET (dev < I2C_NUMOF, -1) assert(dev < I2C_NUMOF);
mutex_lock(&_i2c_bus[dev].lock); mutex_lock(&_i2c_bus[dev].lock);
_i2c_reset_hw(dev); _i2c_reset_hw(dev);
return 0;
} }
void i2c_release(i2c_t dev) void i2c_release(i2c_t dev)
@ -358,9 +355,9 @@ int i2c_read_bytes(i2c_t dev, uint16_t addr, void *data, size_t len, uint8_t fla
DEBUG ("%s dev=%u addr=%02x data=%p len=%d flags=%01x\n", DEBUG ("%s dev=%u addr=%02x data=%p len=%d flags=%01x\n",
__func__, dev, addr, data, len, flags); __func__, dev, addr, data, len, flags);
CHECK_PARAM_RET (dev < I2C_NUMOF, -EINVAL); assert(dev < I2C_NUMOF);
CHECK_PARAM_RET (len > 0, -EINVAL); assert(len > 0);
CHECK_PARAM_RET (data != NULL, -EINVAL); assert(data != NULL);
/* if I2C_NOSTART is not set, START condition and ADDR is used */ /* if I2C_NOSTART is not set, START condition and ADDR is used */
if (!(flags & I2C_NOSTART)) { if (!(flags & I2C_NOSTART)) {
@ -445,9 +442,9 @@ int i2c_write_bytes(i2c_t dev, uint16_t addr, const void *data, size_t len, uint
DEBUG ("%s dev=%u addr=%02x data=%p len=%d flags=%01x\n", DEBUG ("%s dev=%u addr=%02x data=%p len=%d flags=%01x\n",
__func__, dev, addr, data, len, flags); __func__, dev, addr, data, len, flags);
CHECK_PARAM_RET (dev < I2C_NUMOF, -EINVAL); assert(dev < I2C_NUMOF);
CHECK_PARAM_RET (len > 0, -EINVAL); assert(len > 0);
CHECK_PARAM_RET (data != NULL, -EINVAL); assert(data != NULL);
/* if I2C_NOSTART is not set, START condition and ADDR is used */ /* if I2C_NOSTART is not set, START condition and ADDR is used */
if (!(flags & I2C_NOSTART)) { if (!(flags & I2C_NOSTART)) {

View File

@ -246,12 +246,11 @@ void i2c_init(i2c_t dev)
return; return;
} }
int i2c_acquire(i2c_t dev) void i2c_acquire(i2c_t dev)
{ {
assert(dev < I2C_NUMOF); assert(dev < I2C_NUMOF);
mutex_lock(&_i2c_bus[dev].lock); mutex_lock(&_i2c_bus[dev].lock);
return 0;
} }
void i2c_release(i2c_t dev) void i2c_release(i2c_t dev)

View File

@ -90,11 +90,10 @@ void i2c_init(i2c_t dev)
DEBUG("[i2c] initialization done\n"); DEBUG("[i2c] initialization done\n");
} }
int i2c_acquire(i2c_t dev) void i2c_acquire(i2c_t dev)
{ {
assert(dev < I2C_NUMOF); assert(dev < I2C_NUMOF);
mutex_lock(&locks[dev]); mutex_lock(&locks[dev]);
return 0;
} }
void i2c_release(i2c_t dev) void i2c_release(i2c_t dev)

View File

@ -106,12 +106,11 @@ typedef struct {
static i2c_state_t i2c_state[I2C_NUMOF]; static i2c_state_t i2c_state[I2C_NUMOF];
int i2c_acquire(i2c_t dev) void i2c_acquire(i2c_t dev)
{ {
assert((unsigned)dev < I2C_NUMOF); assert((unsigned)dev < I2C_NUMOF);
mutex_lock(&i2c_state[dev].mtx); mutex_lock(&i2c_state[dev].mtx);
i2c_state[dev].pid = thread_getpid(); i2c_state[dev].pid = thread_getpid();
return 0;
} }
void i2c_release(i2c_t dev) void i2c_release(i2c_t dev)

View File

@ -103,14 +103,12 @@ static void poweroff(lpc23xx_i2c_t *i2c)
} }
} }
int i2c_acquire(i2c_t dev) void i2c_acquire(i2c_t dev)
{ {
assert(dev < I2C_NUMOF); assert(dev < I2C_NUMOF);
mutex_lock(&ctx[dev].lock); mutex_lock(&ctx[dev].lock);
poweron(i2c_config[dev].dev); poweron(i2c_config[dev].dev);
return 0;
} }
void i2c_release(i2c_t dev) void i2c_release(i2c_t dev)
@ -332,6 +330,8 @@ static void irq_handler(i2c_t dev)
} }
/* clear interrupt flag */ /* clear interrupt flag */
/* cppcheck-suppress redundantAssignment
* (reason: writing 1 to volatile register to clear the interrupt) */
i2c->CONCLR = I2CONCLR_SIC; i2c->CONCLR = I2CONCLR_SIC;
} }

View File

@ -132,12 +132,11 @@ void i2c_init(i2c_t dev)
i2c(dev)->ENABLE = TWI_ENABLE_ENABLE_Enabled; i2c(dev)->ENABLE = TWI_ENABLE_ENABLE_Enabled;
} }
int i2c_acquire(i2c_t dev) void i2c_acquire(i2c_t dev)
{ {
assert(dev < I2C_NUMOF); assert(dev < I2C_NUMOF);
mutex_lock(&locks[dev]); mutex_lock(&locks[dev]);
return 0;
} }
void i2c_release(i2c_t dev) void i2c_release(i2c_t dev)

View File

@ -154,7 +154,7 @@ void i2c_deinit_pins(i2c_t dev)
} }
#endif /* MODULE_PERIPH_I2C_RECONFIGURE */ #endif /* MODULE_PERIPH_I2C_RECONFIGURE */
int i2c_acquire(i2c_t dev) void i2c_acquire(i2c_t dev)
{ {
assert(dev < I2C_NUMOF); assert(dev < I2C_NUMOF);
@ -162,7 +162,6 @@ int i2c_acquire(i2c_t dev)
bus(dev)->ENABLE = TWIM_ENABLE_ENABLE_Enabled; bus(dev)->ENABLE = TWIM_ENABLE_ENABLE_Enabled;
DEBUG("[i2c] acquired dev %i\n", (int)dev); DEBUG("[i2c] acquired dev %i\n", (int)dev);
return 0;
} }
void i2c_release(i2c_t dev) void i2c_release(i2c_t dev)

View File

@ -153,11 +153,10 @@ void i2c_deinit_pins(i2c_t dev)
} }
#endif /* MODULE_PERIPH_I2C_RECONFIGURE */ #endif /* MODULE_PERIPH_I2C_RECONFIGURE */
int i2c_acquire(i2c_t dev) void i2c_acquire(i2c_t dev)
{ {
assert(dev < I2C_NUMOF); assert(dev < I2C_NUMOF);
mutex_lock(&locks[dev]); mutex_lock(&locks[dev]);
return 0;
} }
void i2c_release(i2c_t dev) void i2c_release(i2c_t dev)

View File

@ -194,11 +194,10 @@ void i2c_init(i2c_t dev)
} }
} }
int i2c_acquire(i2c_t dev) void i2c_acquire(i2c_t dev)
{ {
assert(dev < I2C_NUMOF); assert(dev < I2C_NUMOF);
mutex_lock(&locks[dev]); mutex_lock(&locks[dev]);
return 0;
} }
void i2c_release(i2c_t dev) void i2c_release(i2c_t dev)

View File

@ -135,7 +135,7 @@ static void _i2c_init(I2C_TypeDef *i2c, uint32_t timing)
i2c->CR1 |= I2C_CR1_PE; i2c->CR1 |= I2C_CR1_PE;
} }
int i2c_acquire(i2c_t dev) void i2c_acquire(i2c_t dev)
{ {
assert(dev < I2C_NUMOF); assert(dev < I2C_NUMOF);
@ -145,8 +145,6 @@ int i2c_acquire(i2c_t dev)
/* enable device */ /* enable device */
i2c_config[dev].dev->CR1 |= I2C_CR1_PE; i2c_config[dev].dev->CR1 |= I2C_CR1_PE;
return 0;
} }
void i2c_release(i2c_t dev) void i2c_release(i2c_t dev)

View File

@ -180,7 +180,7 @@ static void _init(i2c_t dev)
_i2c_init(i2c, i2c_config[dev].clk, ccr); _i2c_init(i2c, i2c_config[dev].clk, ccr);
} }
int i2c_acquire(i2c_t dev) void i2c_acquire(i2c_t dev)
{ {
assert(dev < I2C_NUMOF); assert(dev < I2C_NUMOF);
@ -195,8 +195,6 @@ int i2c_acquire(i2c_t dev)
/* enable device */ /* enable device */
i2c_config[dev].dev->CR1 |= I2C_CR1_PE; i2c_config[dev].dev->CR1 |= I2C_CR1_PE;
return 0;
} }
void i2c_release(i2c_t dev) void i2c_release(i2c_t dev)