drivers/i2c: improve common i2c driver

- fix reag/write regs function (NOSTART/NOSTOP flags missing)
- use ret variable name instead of err (cosmetic)
- split PERIPH_I2C_NEED_READ/WRITE_REGS to simplify cpu side implementation
This commit is contained in:
Alexandre Abadie 2018-05-25 11:55:27 +02:00 committed by dylad
parent 406d180dc2
commit c2eb316039

View File

@ -24,22 +24,23 @@
#ifdef I2C_NUMOF
#ifdef PERIPH_I2C_NEED_READ_REGS
#ifdef PERIPH_I2C_NEED_READ_REG
int i2c_read_reg(i2c_t dev, uint16_t addr, uint16_t reg,
void *data, uint8_t flags)
{
return i2c_read_regs(dev, addr, reg, data, 1, flags);
}
#endif /* PERIPH_I2C_NEED_READ_REG */
#ifdef PERIPH_I2C_NEED_READ_REGS
int i2c_read_regs(i2c_t dev, uint16_t addr, uint16_t reg,
void *data, size_t len, uint8_t flags)
{
int8_t err;
/* First set ADDR and register with no stop */
err = i2c_write_bytes(dev, addr, &reg, (flags & I2C_REG16) ? 2 : 1,
flags & I2C_NOSTOP );
if (err < 0) {
return err;
int8_t ret = i2c_write_bytes(dev, addr, &reg, (flags & I2C_REG16) ? 2 : 1,
flags | I2C_NOSTOP);
if (ret < 0) {
return ret;
}
/* Then get the data from device */
return i2c_read_bytes(dev, addr, data, len, flags);
@ -56,25 +57,26 @@ int i2c_write_byte(i2c_t dev, uint16_t addr, uint8_t data, uint8_t flags)
return i2c_write_bytes(dev, addr, &data, 1, flags);
}
#ifdef PERIPH_I2C_NEED_WRITE_REGS
#ifdef PERIPH_I2C_NEED_WRITE_REG
int i2c_write_reg(i2c_t dev, uint16_t addr, uint16_t reg,
uint8_t data, uint8_t flags)
{
return i2c_write_regs(dev, addr, reg, &data, 1, flags);
}
#endif /* PERIPH_I2C_NEED_WRITE_REG */
#ifdef PERIPH_I2C_NEED_WRITE_REGS
int i2c_write_regs(i2c_t dev, uint16_t addr, uint16_t reg,
const void *data, size_t len, uint8_t flags)
{
int8_t err;
/* First set ADDR and register with no stop */
err = i2c_write_bytes(dev, addr, &reg, (flags & I2C_REG16) ? 2 : 1,
flags & I2C_NOSTOP );
if (err < 0) {
return err;
int8_t ret = i2c_write_bytes(dev, addr, &reg, (flags & I2C_REG16) ? 2 : 1,
flags | I2C_NOSTOP);
if (ret < 0) {
return ret;
}
/* Then write data to the device */
return i2c_write_bytes(dev, addr, data, len, flags);
return i2c_write_bytes(dev, addr, data, len, flags | I2C_NOSTART);
}
#endif /* PERIPH_I2C_NEED_WRITE_REGS */