drivers/mma8x5x: adapt to new i2c API
This commit is contained in:
parent
f2a2427fcd
commit
cc9836d792
@ -34,30 +34,23 @@
|
|||||||
#define ENABLE_DEBUG (0)
|
#define ENABLE_DEBUG (0)
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
|
|
||||||
#define I2C_SPEED I2C_SPEED_FAST
|
|
||||||
|
|
||||||
#define BUS (dev->params.i2c)
|
#define BUS (dev->params.i2c)
|
||||||
#define ADDR (dev->params.addr)
|
#define ADDR (dev->params.addr)
|
||||||
|
|
||||||
int mma8x5x_init(mma8x5x_t *dev, const mma8x5x_params_t *params)
|
int mma8x5x_init(mma8x5x_t *dev, const mma8x5x_params_t *params)
|
||||||
{
|
{
|
||||||
uint8_t reg;
|
uint8_t reg = 0;
|
||||||
|
|
||||||
assert(dev && params);
|
assert(dev && params);
|
||||||
|
|
||||||
/* write device descriptor */
|
/* write device descriptor */
|
||||||
memcpy(dev, params, sizeof(mma8x5x_params_t));
|
memcpy(dev, params, sizeof(mma8x5x_params_t));
|
||||||
|
|
||||||
/* initialize the I2C bus */
|
/* acquire the I2C bus */
|
||||||
i2c_acquire(BUS);
|
i2c_acquire(BUS);
|
||||||
if (i2c_init_master(BUS, I2C_SPEED) < 0) {
|
|
||||||
i2c_release(BUS);
|
|
||||||
DEBUG("[mma8x5x] init - error: unable to initialize I2C bus\n");
|
|
||||||
return MMA8X5X_NOI2C;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* test if the target device responds */
|
/* test if the target device responds */
|
||||||
i2c_read_reg(BUS, ADDR, MMA8X5X_WHO_AM_I, ®);
|
i2c_read_reg(BUS, ADDR, MMA8X5X_WHO_AM_I, ®, 0);
|
||||||
if (reg != dev->params.type) {
|
if (reg != dev->params.type) {
|
||||||
i2c_release(BUS);
|
i2c_release(BUS);
|
||||||
DEBUG("[mma8x5x] init - error: invalid WHO_AM_I value [0x%02x]\n",
|
DEBUG("[mma8x5x] init - error: invalid WHO_AM_I value [0x%02x]\n",
|
||||||
@ -66,18 +59,18 @@ int mma8x5x_init(mma8x5x_t *dev, const mma8x5x_params_t *params)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* reset the device */
|
/* reset the device */
|
||||||
i2c_write_reg(BUS, ADDR, MMA8X5X_CTRL_REG2, MMA8X5X_CTRL_REG2_RST);
|
i2c_write_reg(BUS, ADDR, MMA8X5X_CTRL_REG2, MMA8X5X_CTRL_REG2_RST, 0);
|
||||||
do {
|
do {
|
||||||
i2c_read_reg(BUS, ADDR, MMA8X5X_CTRL_REG2, ®);
|
i2c_read_reg(BUS, ADDR, MMA8X5X_CTRL_REG2, ®, 0);
|
||||||
} while (reg & MMA8X5X_CTRL_REG2_RST);
|
} while (reg & MMA8X5X_CTRL_REG2_RST);
|
||||||
/* configure the user offset */
|
/* configure the user offset */
|
||||||
i2c_write_regs(BUS, ADDR, MMA8X5X_OFF_X, dev->params.offset, 3);
|
i2c_write_regs(BUS, ADDR, MMA8X5X_OFF_X, dev->params.offset, 3, 0);
|
||||||
/* configure range, rate, and activate the device */
|
/* configure range, rate, and activate the device */
|
||||||
reg = (dev->params.range & MMA8X5X_XYZ_DATA_CFG_FS_MASK);
|
reg = (dev->params.range & MMA8X5X_XYZ_DATA_CFG_FS_MASK);
|
||||||
i2c_write_reg(BUS, ADDR, MMA8X5X_XYZ_DATA_CFG, reg);
|
i2c_write_reg(BUS, ADDR, MMA8X5X_XYZ_DATA_CFG, reg, 0);
|
||||||
reg = ((dev->params.rate & MMA8X5X_CTRL_REG1_DR_MASK) |
|
reg = ((dev->params.rate & MMA8X5X_CTRL_REG1_DR_MASK) |
|
||||||
MMA8X5X_CTRL_REG1_ACTIVE);
|
MMA8X5X_CTRL_REG1_ACTIVE);
|
||||||
i2c_write_reg(BUS, ADDR, MMA8X5X_CTRL_REG1, reg);
|
i2c_write_reg(BUS, ADDR, MMA8X5X_CTRL_REG1, reg, 0);
|
||||||
|
|
||||||
/* finally release the bus */
|
/* finally release the bus */
|
||||||
i2c_release(BUS);
|
i2c_release(BUS);
|
||||||
@ -101,7 +94,7 @@ void mma8x5x_set_user_offset(const mma8x5x_t *dev, int8_t x, int8_t y, int8_t z)
|
|||||||
(int)x, (int)y, (int)z);
|
(int)x, (int)y, (int)z);
|
||||||
|
|
||||||
i2c_acquire(BUS);
|
i2c_acquire(BUS);
|
||||||
i2c_write_regs(BUS, ADDR, MMA8X5X_OFF_X, buf, 3);
|
i2c_write_regs(BUS, ADDR, MMA8X5X_OFF_X, buf, 3, 0);
|
||||||
i2c_release(BUS);
|
i2c_release(BUS);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -114,7 +107,7 @@ static int _get_reg(const mma8x5x_t *dev, uint8_t addr)
|
|||||||
DEBUG("[mma8x5x] getting reg 0x%02x\n", (unsigned)addr);
|
DEBUG("[mma8x5x] getting reg 0x%02x\n", (unsigned)addr);
|
||||||
|
|
||||||
i2c_acquire(BUS);
|
i2c_acquire(BUS);
|
||||||
i2c_read_reg(BUS, ADDR, addr, ®);
|
i2c_read_reg(BUS, ADDR, addr, ®, 0);
|
||||||
i2c_release(BUS);
|
i2c_release(BUS);
|
||||||
|
|
||||||
DEBUG("[mma8x5x] reg 0x%02x=0x%02x\n", (unsigned)addr, (unsigned)reg);
|
DEBUG("[mma8x5x] reg 0x%02x=0x%02x\n", (unsigned)addr, (unsigned)reg);
|
||||||
@ -128,11 +121,11 @@ static void _reg_setbits(const mma8x5x_t *dev, uint8_t reg, uint8_t val)
|
|||||||
assert(dev);
|
assert(dev);
|
||||||
|
|
||||||
i2c_acquire(BUS);
|
i2c_acquire(BUS);
|
||||||
i2c_read_reg(BUS, ADDR, reg, &tmp);
|
i2c_read_reg(BUS, ADDR, reg, &tmp, 0);
|
||||||
DEBUG("[mma8x5x] 0x%02x: 0x%02x | 0x%02x = 0x%02x\n",
|
DEBUG("[mma8x5x] 0x%02x: 0x%02x | 0x%02x = 0x%02x\n",
|
||||||
(unsigned)reg, (unsigned)tmp, (unsigned)val, (unsigned) tmp | val);
|
(unsigned)reg, (unsigned)tmp, (unsigned)val, (unsigned) tmp | val);
|
||||||
tmp |= val;
|
tmp |= val;
|
||||||
i2c_write_reg(BUS, ADDR, reg, tmp);
|
i2c_write_reg(BUS, ADDR, reg, tmp, 0);
|
||||||
i2c_release(BUS);
|
i2c_release(BUS);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -143,11 +136,11 @@ static void _reg_clearbits(const mma8x5x_t *dev, uint8_t reg, uint8_t val)
|
|||||||
assert(dev);
|
assert(dev);
|
||||||
|
|
||||||
i2c_acquire(BUS);
|
i2c_acquire(BUS);
|
||||||
i2c_read_reg(BUS, ADDR, reg, &tmp);
|
i2c_read_reg(BUS, ADDR, reg, &tmp, 0);
|
||||||
DEBUG("[mma8x5x] 0x%02x: 0x%02x &= ~0x%02x = 0x%02x\n",
|
DEBUG("[mma8x5x] 0x%02x: 0x%02x &= ~0x%02x = 0x%02x\n",
|
||||||
(unsigned)reg, (unsigned)tmp, (unsigned)val, (unsigned) tmp & ~val);
|
(unsigned)reg, (unsigned)tmp, (unsigned)val, (unsigned) tmp & ~val);
|
||||||
tmp &= ~val;
|
tmp &= ~val;
|
||||||
i2c_write_reg(BUS, ADDR, reg, tmp);
|
i2c_write_reg(BUS, ADDR, reg, tmp, 0);
|
||||||
i2c_release(BUS);
|
i2c_release(BUS);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -221,7 +214,7 @@ void mma8x5x_read(const mma8x5x_t *dev, mma8x5x_data_t *data)
|
|||||||
assert(dev);
|
assert(dev);
|
||||||
|
|
||||||
i2c_acquire(BUS);
|
i2c_acquire(BUS);
|
||||||
i2c_read_regs(BUS, ADDR, MMA8X5X_STATUS, buf, 7);
|
i2c_read_regs(BUS, ADDR, MMA8X5X_STATUS, buf, 7, 0);
|
||||||
i2c_release(BUS);
|
i2c_release(BUS);
|
||||||
|
|
||||||
data->x = ((int16_t)(buf[1] << 8 | buf[2])) / (16 >> dev->params.range);
|
data->x = ((int16_t)(buf[1] << 8 | buf[2])) / (16 >> dev->params.range);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user