diff options
author | Kevin K Wong <kevin.k.wong@intel.com> | 2016-03-30 16:42:40 -0700 |
---|---|---|
committer | chrome-bot <chrome-bot@chromium.org> | 2016-03-31 21:35:56 -0700 |
commit | 6711629163f23a98099d8c6d37f6cdb1ef56ca52 (patch) | |
tree | 9529c236985d9ad64d23c4d0b1b8328d1be81b8f /driver/accelgyro_lsm6ds0.c | |
parent | 59c03bc4c644b0f0bbf3c6807a97755b7509b319 (diff) | |
download | chrome-ec-6711629163f23a98099d8c6d37f6cdb1ef56ca52.tar.gz |
sensor: update sensor driver to use I2C port from motion_sensor_t
this allow motion sensor devices to be locate on different I2C port
BUG=none
BRANCH=none
TEST=make buildall
Change-Id: Ia7ba2f5729ebb19561768ec87fdb267e79aafb6a
Signed-off-by: Kevin K Wong <kevin.k.wong@intel.com>
Reviewed-on: https://chromium-review.googlesource.com/334269
Reviewed-by: Shawn N <shawnn@chromium.org>
Diffstat (limited to 'driver/accelgyro_lsm6ds0.c')
-rw-r--r-- | driver/accelgyro_lsm6ds0.c | 38 |
1 files changed, 20 insertions, 18 deletions
diff --git a/driver/accelgyro_lsm6ds0.c b/driver/accelgyro_lsm6ds0.c index 62996825ac..7948e651ce 100644 --- a/driver/accelgyro_lsm6ds0.c +++ b/driver/accelgyro_lsm6ds0.c @@ -150,17 +150,19 @@ static int get_engineering_val(const int reg_val, /** * Read register from accelerometer. */ -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_ACCEL, addr, reg, data_ptr); + return i2c_read8(port, addr, reg, data_ptr); } /** * Write register from accelerometer. */ -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_ACCEL, addr, reg, data); + return i2c_write8(port, addr, reg, data); } static int set_range(const struct motion_sensor_t *s, @@ -183,12 +185,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 accel_cleanup; ctrl_val = (ctrl_val & ~LSM6DS0_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) @@ -239,12 +241,12 @@ 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 accel_cleanup; val = (val & ~LSM6DS0_ODR_MASK) | reg_val; - 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) @@ -259,14 +261,14 @@ static int set_data_rate(const struct motion_sensor_t *s, * Table 48 Gyroscope high-pass filter cutoff frequency */ if (MOTIONSENSE_TYPE_GYRO == s->type) { - ret = raw_read8(s->addr, LSM6DS0_CTRL_REG3_G, &val); + ret = raw_read8(s->port, s->addr, LSM6DS0_CTRL_REG3_G, &val); if (ret != EC_SUCCESS) goto accel_cleanup; val &= ~(0x3 << 4); /* clear bit [5:4] */ val = (rate > 119000) ? (val | (1<<7)) /* set high-power mode */ : (val & ~(1<<7)); /* set low-power mode */ - ret = raw_write8(s->addr, LSM6DS0_CTRL_REG3_G, val); + ret = raw_write8(s->port, s->addr, LSM6DS0_CTRL_REG3_G, val); } accel_cleanup: @@ -318,7 +320,7 @@ static int is_data_ready(const struct motion_sensor_t *s, int *ready) { int ret, tmp; - ret = raw_read8(s->addr, LSM6DS0_STATUS_REG, &tmp); + ret = raw_read8(s->port, s->addr, LSM6DS0_STATUS_REG, &tmp); if (ret != EC_SUCCESS) { CPRINTF("[%T %s type:0x%X RS Error]", s->name, s->type); @@ -358,10 +360,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_ACCEL, 1); - ret = i2c_xfer(I2C_PORT_ACCEL, 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_ACCEL, 0); + i2c_lock(s->port, 0); if (ret != EC_SUCCESS) { CPRINTF("[%T %s type:0x%X RD XYZ Error]", @@ -386,7 +388,7 @@ static int init(const struct motion_sensor_t *s) { int ret = 0, tmp; - ret = raw_read8(s->addr, LSM6DS0_WHO_AM_I_REG, &tmp); + ret = raw_read8(s->port, s->addr, LSM6DS0_WHO_AM_I_REG, &tmp); if (ret) return EC_ERROR_UNKNOWN; @@ -408,20 +410,20 @@ static int init(const struct motion_sensor_t *s) if (MOTIONSENSE_TYPE_ACCEL == s->type) { mutex_lock(s->mutex); - ret = raw_read8(s->addr, LSM6DS0_CTRL_REG8, &tmp); + ret = raw_read8(s->port, s->addr, LSM6DS0_CTRL_REG8, &tmp); if (ret) { mutex_unlock(s->mutex); return EC_ERROR_UNKNOWN; } tmp |= (1 | LSM6DS0_BDU_ENABLE); - ret = raw_write8(s->addr, LSM6DS0_CTRL_REG8, tmp); + ret = raw_write8(s->port, s->addr, LSM6DS0_CTRL_REG8, tmp); mutex_unlock(s->mutex); if (ret) return EC_ERROR_UNKNOWN; /* Power Down Gyro */ - ret = raw_write8(s->addr, + ret = raw_write8(s->port, s->addr, LSM6DS0_CTRL_REG1_G, 0x0); if (ret) return EC_ERROR_UNKNOWN; |