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:
parent
406d180dc2
commit
c2eb316039
@ -24,22 +24,23 @@
|
|||||||
|
|
||||||
#ifdef I2C_NUMOF
|
#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,
|
int i2c_read_reg(i2c_t dev, uint16_t addr, uint16_t reg,
|
||||||
void *data, uint8_t flags)
|
void *data, uint8_t flags)
|
||||||
{
|
{
|
||||||
return i2c_read_regs(dev, addr, reg, data, 1, 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,
|
int i2c_read_regs(i2c_t dev, uint16_t addr, uint16_t reg,
|
||||||
void *data, size_t len, uint8_t flags)
|
void *data, size_t len, uint8_t flags)
|
||||||
{
|
{
|
||||||
int8_t err;
|
|
||||||
/* First set ADDR and register with no stop */
|
/* First set ADDR and register with no stop */
|
||||||
err = i2c_write_bytes(dev, addr, ®, (flags & I2C_REG16) ? 2 : 1,
|
int8_t ret = i2c_write_bytes(dev, addr, ®, (flags & I2C_REG16) ? 2 : 1,
|
||||||
flags & I2C_NOSTOP );
|
flags | I2C_NOSTOP);
|
||||||
if (err < 0) {
|
if (ret < 0) {
|
||||||
return err;
|
return ret;
|
||||||
}
|
}
|
||||||
/* Then get the data from device */
|
/* Then get the data from device */
|
||||||
return i2c_read_bytes(dev, addr, data, len, flags);
|
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);
|
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,
|
int i2c_write_reg(i2c_t dev, uint16_t addr, uint16_t reg,
|
||||||
uint8_t data, uint8_t flags)
|
uint8_t data, uint8_t flags)
|
||||||
{
|
{
|
||||||
return i2c_write_regs(dev, addr, reg, &data, 1, 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,
|
int i2c_write_regs(i2c_t dev, uint16_t addr, uint16_t reg,
|
||||||
const void *data, size_t len, uint8_t flags)
|
const void *data, size_t len, uint8_t flags)
|
||||||
{
|
{
|
||||||
int8_t err;
|
|
||||||
/* First set ADDR and register with no stop */
|
/* First set ADDR and register with no stop */
|
||||||
err = i2c_write_bytes(dev, addr, ®, (flags & I2C_REG16) ? 2 : 1,
|
int8_t ret = i2c_write_bytes(dev, addr, ®, (flags & I2C_REG16) ? 2 : 1,
|
||||||
flags & I2C_NOSTOP );
|
flags | I2C_NOSTOP);
|
||||||
if (err < 0) {
|
if (ret < 0) {
|
||||||
return err;
|
return ret;
|
||||||
}
|
}
|
||||||
/* Then write data to the device */
|
/* 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 */
|
#endif /* PERIPH_I2C_NEED_WRITE_REGS */
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user