summaryrefslogtreecommitdiff
path: root/driver/gyro_l3gd20h.c
diff options
context:
space:
mode:
Diffstat (limited to 'driver/gyro_l3gd20h.c')
-rw-r--r--driver/gyro_l3gd20h.c46
1 files changed, 24 insertions, 22 deletions
diff --git a/driver/gyro_l3gd20h.c b/driver/gyro_l3gd20h.c
index 1137728463..5d1fd3e1e0 100644
--- a/driver/gyro_l3gd20h.c
+++ b/driver/gyro_l3gd20h.c
@@ -118,17 +118,19 @@ static int get_engineering_val(const int reg_val,
/**
* Read register from Gyrometer.
*/
-static inline int raw_read8(const int addr, const int reg, int *data_ptr)
+static inline int raw_read8(const int port, const int addr, const int reg,
+ int *data_ptr)
{
- return i2c_read8(I2C_PORT_GYRO, addr, reg, data_ptr);
+ return i2c_read8(port, addr, reg, data_ptr);
}
/**
* Write register from Gyrometer.
*/
-static inline int raw_write8(const int addr, const int reg, int data)
+static inline int raw_write8(const int port, const int addr, const int reg,
+ int data)
{
- return i2c_write8(I2C_PORT_GYRO, addr, reg, data);
+ return i2c_write8(port, addr, reg, data);
}
static int set_range(const struct motion_sensor_t *s,
@@ -151,12 +153,12 @@ static int set_range(const struct motion_sensor_t *s,
*/
mutex_lock(s->mutex);
- ret = raw_read8(s->addr, ctrl_reg, &ctrl_val);
+ ret = raw_read8(s->port, s->addr, ctrl_reg, &ctrl_val);
if (ret != EC_SUCCESS)
goto gyro_cleanup;
ctrl_val = (ctrl_val & ~L3GD20_RANGE_MASK) | reg_val;
- ret = raw_write8(s->addr, ctrl_reg, ctrl_val);
+ ret = raw_write8(s->port, s->addr, ctrl_reg, ctrl_val);
/* Now that we have set the range, update the driver's value. */
if (ret == EC_SUCCESS)
@@ -207,20 +209,20 @@ static int set_data_rate(const struct motion_sensor_t *s,
*/
mutex_lock(s->mutex);
- ret = raw_read8(s->addr, ctrl_reg, &val);
+ ret = raw_read8(s->port, s->addr, ctrl_reg, &val);
if (ret != EC_SUCCESS)
goto gyro_cleanup;
val = (val & ~(L3GD20_ODR_MASK | L3GD20_ODR_PD_MASK)) |
(reg_val & ~L3GD20_LOW_ODR_MASK);
- ret = raw_write8(s->addr, ctrl_reg, val);
+ ret = raw_write8(s->port, s->addr, ctrl_reg, val);
/* Now that we have set the odr, update the driver's value. */
if (ret == EC_SUCCESS)
data->base.odr = get_engineering_val(reg_val, data_rates,
odr_tbl_size);
- ret = raw_read8(s->addr, L3GD20_LOW_ODR, &val);
+ ret = raw_read8(s->port, s->addr, L3GD20_LOW_ODR, &val);
if (ret != EC_SUCCESS)
goto gyro_cleanup;
@@ -230,7 +232,7 @@ static int set_data_rate(const struct motion_sensor_t *s,
else
val &= ~1;
- ret = raw_write8(s->addr, L3GD20_LOW_ODR, val);
+ ret = raw_write8(s->port, s->addr, L3GD20_LOW_ODR, val);
if (ret != EC_SUCCESS)
goto gyro_cleanup;
@@ -242,17 +244,17 @@ static int set_data_rate(const struct motion_sensor_t *s,
* [3:2] int1_sel = 0;
* [1:0] out_sel = 1;
*/
- ret = raw_read8(s->addr, L3GD20_CTRL_REG5, &val);
+ ret = raw_read8(s->port, s->addr, L3GD20_CTRL_REG5, &val);
if (ret != EC_SUCCESS)
goto gyro_cleanup;
val |= (1 << 4); /* high-pass filter enabled */
val |= (1 << 0); /* data in data reg are high-pass filtered */
- ret = raw_write8(s->addr, L3GD20_CTRL_REG5, val);
+ ret = raw_write8(s->port, s->addr, L3GD20_CTRL_REG5, val);
if (ret != EC_SUCCESS)
goto gyro_cleanup;
- ret = raw_read8(s->addr, L3GD20_CTRL_REG2, &val);
+ ret = raw_read8(s->port, s->addr, L3GD20_CTRL_REG2, &val);
if (ret != EC_SUCCESS)
goto gyro_cleanup;
@@ -262,7 +264,7 @@ static int set_data_rate(const struct motion_sensor_t *s,
*/
val &= 0xf0;
val |= 0x04;
- ret = raw_write8(s->addr, L3GD20_CTRL_REG2, val);
+ ret = raw_write8(s->port, s->addr, L3GD20_CTRL_REG2, val);
gyro_cleanup:
mutex_unlock(s->mutex);
@@ -313,7 +315,7 @@ static int is_data_ready(const struct motion_sensor_t *s, int *ready)
{
int ret, tmp;
- ret = raw_read8(s->addr, L3GD20_STATUS_REG, &tmp);
+ ret = raw_read8(s->port, s->addr, L3GD20_STATUS_REG, &tmp);
if (ret != EC_SUCCESS) {
CPRINTF("[%T %s type:0x%X RS Error]", s->name, s->type);
@@ -350,10 +352,10 @@ static int read(const struct motion_sensor_t *s, vector_3_t v)
xyz_reg = get_xyz_reg(s->type);
/* Read 6 bytes starting at xyz_reg */
- i2c_lock(I2C_PORT_GYRO, 1);
- ret = i2c_xfer(I2C_PORT_GYRO, s->addr,
+ i2c_lock(s->port, 1);
+ ret = i2c_xfer(s->port, s->addr,
&xyz_reg, 1, raw, 6, I2C_XFER_SINGLE);
- i2c_lock(I2C_PORT_GYRO, 0);
+ i2c_lock(s->port, 0);
if (ret != EC_SUCCESS) {
CPRINTF("[%T %s type:0x%X RD XYZ Error]",
@@ -379,7 +381,7 @@ static int init(const struct motion_sensor_t *s)
{
int ret = 0, tmp;
- ret = raw_read8(s->addr, L3GD20_WHO_AM_I_REG, &tmp);
+ ret = raw_read8(s->port, s->addr, L3GD20_WHO_AM_I_REG, &tmp);
if (ret)
return EC_ERROR_UNKNOWN;
@@ -387,19 +389,19 @@ static int init(const struct motion_sensor_t *s)
return EC_ERROR_ACCESS_DENIED;
/* All axes are enabled */
- ret = raw_write8(s->addr, L3GD20_CTRL_REG1, 0x0f);
+ ret = raw_write8(s->port, s->addr, L3GD20_CTRL_REG1, 0x0f);
if (ret)
return EC_ERROR_UNKNOWN;
mutex_lock(s->mutex);
- ret = raw_read8(s->addr, L3GD20_CTRL_REG4, &tmp);
+ ret = raw_read8(s->port, s->addr, L3GD20_CTRL_REG4, &tmp);
if (ret) {
mutex_unlock(s->mutex);
return EC_ERROR_UNKNOWN;
}
tmp |= L3GD20_BDU_ENABLE;
- ret = raw_write8(s->addr, L3GD20_CTRL_REG4, tmp);
+ ret = raw_write8(s->port, s->addr, L3GD20_CTRL_REG4, tmp);
mutex_unlock(s->mutex);
if (ret)
return EC_ERROR_UNKNOWN;