diff options
author | Yuval Peress <peress@chromium.org> | 2019-07-15 14:10:11 -0600 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2019-09-03 20:36:04 +0000 |
commit | dfbc632cd5b5a856086249253a98bc83d8942a29 (patch) | |
tree | 9f0359115a96ca0efe66905b5f6b1be644367430 /driver/accelgyro_lsm6dsm.c | |
parent | 083788ac19505f07bfe57a4d8b54a3b11b7554b3 (diff) | |
download | chrome-ec-dfbc632cd5b5a856086249253a98bc83d8942a29.tar.gz |
config: Refactor CONFIG_ACCEL_FIFO to enable use of IS_ENABLED
This change allows us to use the IS_ENABLED condition to replace
the various ifdef guards around the CONFIG_ACCEL_FIFO
BUG=b:137758297,chromium:981990
BRANCH=None
TEST=buildall and CTS tests on Arcada
Change-Id: I65d36bac19855e51c830a33e6f3812575e8d15d9
Signed-off-by: Yuval Peress <peress@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/1704164
Reviewed-by: Jack Rosenthal <jrosenth@chromium.org>
Reviewed-by: Gwendal Grignou <gwendal@chromium.org>
Diffstat (limited to 'driver/accelgyro_lsm6dsm.c')
-rw-r--r-- | driver/accelgyro_lsm6dsm.c | 90 |
1 files changed, 42 insertions, 48 deletions
diff --git a/driver/accelgyro_lsm6dsm.c b/driver/accelgyro_lsm6dsm.c index 1a098f3b1e..4fc8591ee1 100644 --- a/driver/accelgyro_lsm6dsm.c +++ b/driver/accelgyro_lsm6dsm.c @@ -26,7 +26,6 @@ #define IS_FSTS_EMPTY(s) ((s).len & LSM6DSM_FIFO_EMPTY) -#ifdef CONFIG_ACCEL_FIFO static volatile uint32_t last_interrupt_timestamp; /** @@ -83,8 +82,6 @@ static inline uint8_t get_sensor_type(enum dev_fifo fifo_type) return map[fifo_type]; } -#endif - /** * @return output base register for sensor */ @@ -112,23 +109,22 @@ static int config_interrupt(const struct motion_sensor_t *accel) if (ret != EC_SUCCESS) return ret; -#ifdef CONFIG_ACCEL_FIFO - /* As soon as one sample is ready, trigger an interrupt. */ - ret = st_raw_write8(accel->port, accel->i2c_spi_addr_flags, - LSM6DSM_FIFO_CTRL1_ADDR, - OUT_XYZ_SIZE / sizeof(uint16_t)); - if (ret != EC_SUCCESS) - return ret; - int1_ctrl_val |= LSM6DSM_INT_FIFO_TH | LSM6DSM_INT_FIFO_OVR | - LSM6DSM_INT_FIFO_FULL; -#endif /* CONFIG_ACCEL_FIFO */ + if (IS_ENABLED(CONFIG_ACCEL_FIFO)) { + /* As soon as one sample is ready, trigger an interrupt. */ + ret = st_raw_write8(accel->port, accel->i2c_spi_addr_flags, + LSM6DSM_FIFO_CTRL1_ADDR, + OUT_XYZ_SIZE / sizeof(uint16_t)); + if (ret != EC_SUCCESS) + return ret; + int1_ctrl_val |= LSM6DSM_INT_FIFO_TH | LSM6DSM_INT_FIFO_OVR | + LSM6DSM_INT_FIFO_FULL; + } return st_raw_write8(accel->port, accel->i2c_spi_addr_flags, LSM6DSM_INT1_CTRL, int1_ctrl_val); } -#ifdef CONFIG_ACCEL_FIFO /** * fifo_disable - set fifo mode * @accel: Motion sensor pointer: must be MOTIONSENSE_TYPE_ACCEL. @@ -437,14 +433,11 @@ static int is_fifo_empty(struct motion_sensor_t *s, struct fstatus *fsts) return IS_FSTS_EMPTY(*fsts); } -#endif /* CONFIG_ACCEL_FIFO */ - static void handle_interrupt_for_fifo(uint32_t ts) { -#ifdef CONFIG_ACCEL_FIFO - if (time_after(ts, last_interrupt_timestamp)) + if (IS_ENABLED(CONFIG_ACCEL_FIFO) && + time_after(ts, last_interrupt_timestamp)) last_interrupt_timestamp = ts; -#endif task_set_event(TASK_ID_MOTIONSENSE, CONFIG_ACCEL_LSM6DSM_INT_EVENT, 0); } @@ -468,8 +461,7 @@ static int irq_handler(struct motion_sensor_t *s, uint32_t *event) (!(*event & CONFIG_ACCEL_LSM6DSM_INT_EVENT))) return EC_ERROR_NOT_HANDLED; -#ifdef CONFIG_ACCEL_FIFO - { + if (IS_ENABLED(CONFIG_ACCEL_FIFO)) { struct fstatus fsts; uint32_t last_fifo_read_ts; uint32_t triggering_interrupt_timestamp = @@ -498,7 +490,7 @@ static int irq_handler(struct motion_sensor_t *s, uint32_t *event) triggering_interrupt_timestamp == last_interrupt_timestamp) handle_interrupt_for_fifo(last_fifo_read_ts); } -#endif + return ret; } #endif /* CONFIG_ACCEL_INTERRUPTS */ @@ -576,21 +568,22 @@ static int get_range(const struct motion_sensor_t *s) int lsm6dsm_set_data_rate(const struct motion_sensor_t *s, int rate, int rnd) { struct stprivate_data *data = s->drv_data; -#ifdef CONFIG_ACCEL_FIFO - const struct motion_sensor_t *accel = LSM6DSM_MAIN_SENSOR(s); - struct lsm6dsm_data *private = LSM6DSM_GET_DATA(accel); -#endif + const struct motion_sensor_t *accel = IS_ENABLED(CONFIG_ACCEL_FIFO) ? + LSM6DSM_MAIN_SENSOR(s) : NULL; + struct lsm6dsm_data *private = IS_ENABLED(CONFIG_ACCEL_FIFO) ? + LSM6DSM_GET_DATA(accel) : NULL; int ret = EC_SUCCESS, normalized_rate = 0; uint8_t ctrl_reg, reg_val = 0; -#ifdef CONFIG_ACCEL_FIFO - /* FIFO must be disabled before setting any ODR values */ - ret = fifo_disable(accel); - if (ret != EC_SUCCESS) { - CPRINTS("Failed to disable FIFO. Error: %d", ret); - return ret; + if (IS_ENABLED(CONFIG_ACCEL_FIFO)) { + /* FIFO must be disabled before setting any ODR values */ + ret = fifo_disable(accel); + if (ret != EC_SUCCESS) { + CPRINTS("Failed to disable FIFO. Error: %d", ret); + return ret; + } } -#endif + if (rate > 0) { reg_val = LSM6DSM_ODR_TO_REG(rate); normalized_rate = LSM6DSM_REG_TO_ODR(reg_val); @@ -636,16 +629,17 @@ int lsm6dsm_set_data_rate(const struct motion_sensor_t *s, int rate, int rnd) } if (ret == EC_SUCCESS) { data->base.odr = normalized_rate; -#ifdef CONFIG_ACCEL_FIFO - private->samples_to_discard[s->type] = - LSM6DSM_DISCARD_SAMPLES; - private->load_fifo_sensor_state[get_fifo_type(s)].sample_rate = - normalized_rate == 0 ? 0 : SECOND * 1000 / - normalized_rate; - ret = fifo_enable(accel); - if (ret != EC_SUCCESS) - CPRINTS("Failed to enable FIFO. Error: %d", ret); -#endif + if (IS_ENABLED(CONFIG_ACCEL_FIFO)) { + private->samples_to_discard[s->type] = + LSM6DSM_DISCARD_SAMPLES; + private->load_fifo_sensor_state[get_fifo_type(s)] + .sample_rate = normalized_rate == 0 + ? 0 : SECOND * 1000 / normalized_rate; + ret = fifo_enable(accel); + if (ret != EC_SUCCESS) + CPRINTS("Failed to enable FIFO. Error: %d", + ret); + } } mutex_unlock(s->mutex); @@ -803,11 +797,11 @@ static int init(const struct motion_sensor_t *s) if (ret != EC_SUCCESS) goto err_unlock; -#ifdef CONFIG_ACCEL_FIFO - ret = fifo_disable(s); - if (ret != EC_SUCCESS) - goto err_unlock; -#endif /* CONFIG_ACCEL_FIFO */ + if (IS_ENABLED(CONFIG_ACCEL_FIFO)) { + ret = fifo_disable(s); + if (ret != EC_SUCCESS) + goto err_unlock; + } #ifdef CONFIG_ACCEL_INTERRUPTS ret = config_interrupt(s); |