/* Bosch BMI08X inertial measurement unit header * * Copyright (c) 2022 Meta Platforms, Inc. and its affiliates * * SPDX-License-Identifier: Apache-2.0 */ #ifndef ZEPHYR_DRIVERS_SENSOR_BMI08X_H_ #define ZEPHYR_DRIVERS_SENSOR_BMI08X_H_ #include #include #include #include #include /* Accel Chip Id register */ #define BMI08X_REG_ACCEL_CHIP_ID 0x00 /* Accel Error condition register */ #define BMI08X_REG_ACCEL_ERR 0x02 /* Accel Status flag register */ #define BMI08X_REG_ACCEL_STATUS 0x03 /* Accel X LSB data register */ #define BMI08X_REG_ACCEL_X_LSB 0x12 /* Accel X MSB data register */ #define BMI08X_REG_ACCEL_X_MSB 0x13 /* Accel Y LSB data register */ #define BMI08X_REG_ACCEL_Y_LSB 0x14 /* Accel Y MSB data register */ #define BMI08X_REG_ACCEL_Y_MSB 0x15 /* Accel Z LSB data register */ #define BMI08X_REG_ACCEL_Z_LSB 0x16 /* Accel Z MSB data register */ #define BMI08X_REG_ACCEL_Z_MSB 0x17 /* Sensor time byte 0 register */ #define BMI08X_REG_ACCEL_SENSORTIME_0 0x18 /* Sensor time byte 1 register */ #define BMI08X_REG_ACCEL_SENSORTIME_1 0x19 /* Sensor time byte 2 register */ #define BMI08X_REG_ACCEL_SENSORTIME_2 0x1A /* Accel Interrupt status0 register */ #define BMI08X_REG_ACCEL_INT_STAT_0 0x1C /* Accel Interrupt status1 register */ #define BMI08X_REG_ACCEL_INT_STAT_1 0x1D /* Accel general purpose register 0*/ #define BMI08X_REG_ACCEL_GP_0 0x1E /* Sensor temperature MSB data register */ #define BMI08X_REG_TEMP_MSB 0x22 /* Sensor temperature LSB data register */ #define BMI08X_REG_TEMP_LSB 0x23 /* Accel general purpose register 4*/ #define BMI08X_REG_ACCEL_GP_4 0x27 /* Accel Internal status register */ #define BMI08X_REG_ACCEL_INTERNAL_STAT 0x2A /* Accel configuration register */ #define BMI08X_REG_ACCEL_CONF 0x40 /* Accel range setting register */ #define BMI08X_REG_ACCEL_RANGE 0x41 /* Accel Interrupt pin 1 configuration register */ #define BMI08X_REG_ACCEL_INT1_IO_CONF 0x53 /* Accel Interrupt pin 2 configuration register */ #define BMI08X_REG_ACCEL_INT2_IO_CONF 0x54 /* Accel Interrupt latch configuration register */ #define BMI08X_REG_ACCEL_INT_LATCH_CONF 0x55 /* Accel Interrupt pin1 mapping register */ #define BMI08X_REG_ACCEL_INT1_MAP 0x56 /* Accel Interrupt pin2 mapping register */ #define BMI08X_REG_ACCEL_INT2_MAP 0x57 /* Accel Interrupt map register */ #define BMI08X_REG_ACCEL_INT1_INT2_MAP_DATA 0x58 /* Accel Init control register */ #define BMI08X_REG_ACCEL_INIT_CTRL 0x59 /* Accel Self test register */ #define BMI08X_REG_ACCEL_SELF_TEST 0x6D /* Accel Power mode configuration register */ #define BMI08X_REG_ACCEL_PWR_CONF 0x7C /* Accel Power control (switch on or off register */ #define BMI08X_REG_ACCEL_PWR_CTRL 0x7D /* Accel Soft reset register */ #define BMI08X_REG_ACCEL_SOFTRESET 0x7E /* BMI085 Accel unique chip identifier */ #define BMI085_ACCEL_CHIP_ID 0x1F /* BMI088 Accel unique chip identifier */ #define BMI088_ACCEL_CHIP_ID 0x1E /* Feature Config related Registers */ #define BMI08X_ACCEL_RESERVED_5B_REG 0x5B #define BMI08X_ACCEL_RESERVED_5C_REG 0x5C #define BMI08X_ACCEL_FEATURE_CFG_REG 0x5E /* Interrupt masks */ #define BMI08X_ACCEL_DATA_READY_INT 0x80 /* Accel Bandwidth */ #define BMI08X_ACCEL_BW_OSR4 0x00 #define BMI08X_ACCEL_BW_OSR2 0x01 #define BMI08X_ACCEL_BW_NORMAL 0x02 /* BMI085 Accel Range */ #define BMI085_ACCEL_RANGE_2G 0x00 #define BMI085_ACCEL_RANGE_4G 0x01 #define BMI085_ACCEL_RANGE_8G 0x02 #define BMI085_ACCEL_RANGE_16G 0x03 /**\name BMI088 Accel Range */ #define BMI088_ACCEL_RANGE_3G 0x00 #define BMI088_ACCEL_RANGE_6G 0x01 #define BMI088_ACCEL_RANGE_12G 0x02 #define BMI088_ACCEL_RANGE_24G 0x03 /* Accel Output data rate */ #define BMI08X_ACCEL_ODR_12_5_HZ 0x05 #define BMI08X_ACCEL_ODR_25_HZ 0x06 #define BMI08X_ACCEL_ODR_50_HZ 0x07 #define BMI08X_ACCEL_ODR_100_HZ 0x08 #define BMI08X_ACCEL_ODR_200_HZ 0x09 #define BMI08X_ACCEL_ODR_400_HZ 0x0A #define BMI08X_ACCEL_ODR_800_HZ 0x0B #define BMI08X_ACCEL_ODR_1600_HZ 0x0C /* Accel Init Ctrl */ #define BMI08X_ACCEL_INIT_CTRL_DISABLE 0x00 #define BMI08X_ACCEL_INIT_CTRL_ENABLE 0x01 /* Accel Self test */ #define BMI08X_ACCEL_SWITCH_OFF_SELF_TEST 0x00 #define BMI08X_ACCEL_POSITIVE_SELF_TEST 0x0D #define BMI08X_ACCEL_NEGATIVE_SELF_TEST 0x09 /* Accel Power mode */ #define BMI08X_ACCEL_PM_ACTIVE 0x00 #define BMI08X_ACCEL_PM_SUSPEND 0x03 /* Accel Power control settings */ #define BMI08X_ACCEL_POWER_DISABLE 0x00 #define BMI08X_ACCEL_POWER_ENABLE 0x04 /* Accel internal interrupt pin mapping */ #define BMI08X_ACCEL_INTA_DISABLE 0x00 #define BMI08X_ACCEL_INTA_ENABLE 0x01 #define BMI08X_ACCEL_INTB_DISABLE 0x00 #define BMI08X_ACCEL_INTB_ENABLE 0x02 #define BMI08X_ACCEL_INTC_DISABLE 0x00 #define BMI08X_ACCEL_INTC_ENABLE 0x04 /* Accel Soft reset delay */ #define BMI08X_ACCEL_SOFTRESET_DELAY_MS 1 /* Mask definitions for ACCEL_ERR_REG register */ #define BMI08X_FATAL_ERR_MASK 0x01 #define BMI08X_ERR_CODE_MASK 0x1C /* Position definitions for ACCEL_ERR_REG register */ #define BMI08X_CMD_ERR_POS 1 #define BMI08X_ERR_CODE_POS 2 /* Mask definition for ACCEL_STATUS_REG register */ #define BMI08X_ACCEL_STATUS_MASK 0x80 /* Position definitions for ACCEL_STATUS_REG */ #define BMI08X_ACCEL_STATUS_POS 7 /* Mask definitions for odr, bandwidth and range */ #define BMI08X_ACCEL_ODR_MASK 0x0F #define BMI08X_ACCEL_BW_MASK 0x70 #define BMI08X_ACCEL_RANGE_MASK 0x03 /* Position definitions for odr, bandwidth and range */ #define BMI08X_ACCEL_BW_POS 4 /* Mask definitions for INT1_IO_CONF register */ #define BMI08X_ACCEL_INT_EDGE_MASK 0x01 #define BMI08X_ACCEL_INT_LVL_MASK 0x02 #define BMI08X_ACCEL_INT_OD_MASK 0x04 #define BMI08X_ACCEL_INT_IO_MASK 0x08 #define BMI08X_ACCEL_INT_IN_MASK 0x10 /* Position definitions for INT1_IO_CONF register */ #define BMI08X_ACCEL_INT_EDGE_POS 0 #define BMI08X_ACCEL_INT_LVL_POS 1 #define BMI08X_ACCEL_INT_OD_POS 2 #define BMI08X_ACCEL_INT_IO_POS 3 #define BMI08X_ACCEL_INT_IN_POS 4 /* Mask definitions for INT1/INT2 mapping register */ #define BMI08X_ACCEL_MAP_INTA_MASK 0x01 /* Mask definitions for INT1/INT2 mapping register */ #define BMI08X_ACCEL_MAP_INTA_POS 0x00 /* Mask definitions for INT1_INT2_MAP_DATA register */ #define BMI08X_ACCEL_INT1_DRDY_MASK 0x04 #define BMI08X_ACCEL_INT2_DRDY_MASK 0x40 /* Position definitions for INT1_INT2_MAP_DATA register */ #define BMI08X_ACCEL_INT1_DRDY_POS 2 #define BMI08X_ACCEL_INT2_DRDY_POS 6 /* Asic Initialization value */ #define BMI08X_ASIC_INITIALIZED 0x01 #define BMI08X_TEMP_OFFSET 32 /*************************** BMI08 Gyroscope Macros *****************************/ /** Register map */ /* Gyro registers */ /* Gyro Chip Id register */ #define BMI08X_REG_GYRO_CHIP_ID 0x00 /* Gyro X LSB data register */ #define BMI08X_REG_GYRO_X_LSB 0x02 /* Gyro X MSB data register */ #define BMI08X_REG_GYRO_X_MSB 0x03 /* Gyro Y LSB data register */ #define BMI08X_REG_GYRO_Y_LSB 0x04 /* Gyro Y MSB data register */ #define BMI08X_REG_GYRO_Y_MSB 0x05 /* Gyro Z LSB data register */ #define BMI08X_REG_GYRO_Z_LSB 0x06 /* Gyro Z MSB data register */ #define BMI08X_REG_GYRO_Z_MSB 0x07 /* Gyro Interrupt status register */ #define BMI08X_REG_GYRO_INT_STAT_1 0x0A /* Gyro Range register */ #define BMI08X_REG_GYRO_RANGE 0x0F /* Gyro Bandwidth register */ #define BMI08X_REG_GYRO_BANDWIDTH 0x10 /* Gyro Power register */ #define BMI08X_REG_GYRO_LPM1 0x11 /* Gyro Soft reset register */ #define BMI08X_REG_GYRO_SOFTRESET 0x14 /* Gyro Interrupt control register */ #define BMI08X_REG_GYRO_INT_CTRL 0x15 /* Gyro Interrupt Pin configuration register */ #define BMI08X_REG_GYRO_INT3_INT4_IO_CONF 0x16 /* Gyro Interrupt Map register */ #define BMI08X_REG_GYRO_INT3_INT4_IO_MAP 0x18 /* Gyro Self test register */ #define BMI08X_REG_GYRO_SELF_TEST 0x3C /* Gyro unique chip identifier */ #define BMI08X_GYRO_CHIP_ID 0x0F /* Gyro Range */ #define BMI08X_GYRO_RANGE_2000_DPS 0x00 #define BMI08X_GYRO_RANGE_1000_DPS 0x01 #define BMI08X_GYRO_RANGE_500_DPS 0x02 #define BMI08X_GYRO_RANGE_250_DPS 0x03 #define BMI08X_GYRO_RANGE_125_DPS 0x04 /* Gyro Output data rate and bandwidth */ #define BMI08X_GYRO_BW_532_ODR_2000_HZ 0x00 #define BMI08X_GYRO_BW_230_ODR_2000_HZ 0x01 #define BMI08X_GYRO_BW_116_ODR_1000_HZ 0x02 #define BMI08X_GYRO_BW_47_ODR_400_HZ 0x03 #define BMI08X_GYRO_BW_23_ODR_200_HZ 0x04 #define BMI08X_GYRO_BW_12_ODR_100_HZ 0x05 #define BMI08X_GYRO_BW_64_ODR_200_HZ 0x06 #define BMI08X_GYRO_BW_32_ODR_100_HZ 0x07 #define BMI08X_GYRO_ODR_RESET_VAL 0x80 /* Gyro Power mode */ #define BMI08X_GYRO_PM_NORMAL 0x00 #define BMI08X_GYRO_PM_DEEP_SUSPEND 0x20 #define BMI08X_GYRO_PM_SUSPEND 0x80 /* Gyro data ready interrupt enable value */ #define BMI08X_GYRO_DRDY_INT_DISABLE_VAL 0x00 #define BMI08X_GYRO_DRDY_INT_ENABLE_VAL 0x80 /* Gyro data ready map values */ #define BMI08X_GYRO_MAP_DRDY_TO_INT3 0x01 #define BMI08X_GYRO_MAP_DRDY_TO_INT4 0x80 #define BMI08X_GYRO_MAP_DRDY_TO_BOTH_INT3_INT4 0x81 /* Gyro Soft reset delay */ #define BMI08X_GYRO_SOFTRESET_DELAY 30 /* Gyro power mode config delay */ #define BMI08X_GYRO_POWER_MODE_CONFIG_DELAY 30 /** Mask definitions for range, bandwidth and power */ #define BMI08X_GYRO_RANGE_MASK 0x07 #define BMI08X_GYRO_BW_MASK 0x0F #define BMI08X_GYRO_POWER_MASK 0xA0 /** Position definitions for range, bandwidth and power */ #define BMI08X_GYRO_POWER_POS 5 /* Mask definitions for BMI08X_GYRO_INT_CTRL_REG register */ #define BMI08X_GYRO_DATA_EN_MASK 0x80 /* Position definitions for BMI08X_GYRO_INT_CTRL_REG register */ #define BMI08X_GYRO_DATA_EN_POS 7 /* Mask definitions for BMI08X_GYRO_INT3_INT4_IO_CONF_REG register */ #define BMI08X_GYRO_INT3_LVL_MASK 0x01 #define BMI08X_GYRO_INT3_OD_MASK 0x02 #define BMI08X_GYRO_INT4_LVL_MASK 0x04 #define BMI08X_GYRO_INT4_OD_MASK 0x08 /* Position definitions for BMI08X_GYRO_INT3_INT4_IO_CONF_REG register */ #define BMI08X_GYRO_INT3_OD_POS 1 #define BMI08X_GYRO_INT4_LVL_POS 2 #define BMI08X_GYRO_INT4_OD_POS 3 /* Mask definitions for BMI08X_GYRO_INT_EN_REG register */ #define BMI08X_GYRO_INT_EN_MASK 0x80 /* Position definitions for BMI08X_GYRO_INT_EN_REG register */ #define BMI08X_GYRO_INT_EN_POS 7 /* Mask definitions for BMI088_GYRO_INT_MAP_REG register */ #define BMI08X_GYRO_INT3_MAP_MASK 0x01 #define BMI08X_GYRO_INT4_MAP_MASK 0x80 /* Position definitions for BMI088_GYRO_INT_MAP_REG register */ #define BMI08X_GYRO_INT3_MAP_POS 0 #define BMI08X_GYRO_INT4_MAP_POS 7 /* Mask definitions for BMI088_GYRO_INT_MAP_REG register */ #define BMI088_GYRO_INT3_MAP_MASK 0x01 #define BMI088_GYRO_INT4_MAP_MASK 0x80 /* Position definitions for BMI088_GYRO_INT_MAP_REG register */ #define BMI088_GYRO_INT3_MAP_POS 0 #define BMI088_GYRO_INT4_MAP_POS 7 /* Mask definitions for GYRO_SELF_TEST register */ #define BMI08X_GYRO_SELF_TEST_EN_MASK 0x01 #define BMI08X_GYRO_SELF_TEST_RDY_MASK 0x02 #define BMI08X_GYRO_SELF_TEST_RESULT_MASK 0x04 #define BMI08X_GYRO_SELF_TEST_FUNCTION_MASK 0x08 /* Position definitions for GYRO_SELF_TEST register */ #define BMI08X_GYRO_SELF_TEST_RDY_POS 1 #define BMI08X_GYRO_SELF_TEST_RESULT_POS 2 #define BMI08X_GYRO_SELF_TEST_FUNCTION_POS 3 /*************************** Common Macros for both Accel and Gyro *****************************/ /** Soft reset Value */ #define BMI08X_SOFT_RESET_CMD 0xB6 /* Constant values macros */ #define BMI08X_SENSOR_DATA_SYNC_TIME_MS 1 #define BMI08X_DELAY_BETWEEN_WRITES_MS 1 #define BMI08X_SELF_TEST_DELAY_MS 3 #define BMI08X_POWER_CONFIG_DELAY 5 #define BMI08X_SENSOR_SETTLE_TIME_MS 30 #define BMI08X_SELF_TEST_DATA_READ_MS 50 #define BMI08X_ASIC_INIT_TIME_MS 150 /* allowed ODR values */ enum bmi08x_odr { BMI08X_ODR_25_2, BMI08X_ODR_25, BMI08X_ODR_50, BMI08X_ODR_100, BMI08X_ODR_200, BMI08X_ODR_400, BMI08X_ODR_800, BMI08X_ODR_1600, }; /* Range values for accelerometer */ #define BMI08X_ACC_RANGE_2G_3G 0x0 #define BMI08X_ACC_RANGE_4G_6G 0x1 #define BMI08X_ACC_RANGE_8G_12G 0x2 #define BMI08X_ACC_RANGE_16G_24G 0x3 /* Range values for gyro */ #define BMI08X_GYR_RANGE_2000DPS 0 #define BMI08X_GYR_RANGE_1000DPS 1 #define BMI08X_GYR_RANGE_500DPS 2 #define BMI08X_GYR_RANGE_250DPS 3 #define BMI08X_GYR_RANGE_125DPS 4 #define BMI08X_ACC_SCALE(range_g) ((2 * range_g * SENSOR_G) / 65536LL) #define BMI08X_GYR_SCALE(range_dps) ((2 * range_dps * SENSOR_PI) / 180LL / 65536LL) /* report of data sync is selected */ #define BMI08X_ACCEL_DATA_SYNC_EN(inst) DT_NODE_HAS_STATUS_OKAY(DT_INST_PHANDLE(inst, data_sync)) /* Macro used for compile time optimization to compile in/out code used for data-sync * if at least 1 bmi08x has data-sync enabled */ #define ACCEL_HELPER(inst) BMI08X_ACCEL_DATA_SYNC_EN(inst) || #define BMI08X_ACCEL_ANY_INST_HAS_DATA_SYNC DT_INST_FOREACH_STATUS_OKAY(ACCEL_HELPER) 0 #define GYRO_HELPER(inst) DT_INST_PROP(inst, data_sync) || #define BMI08X_GYRO_ANY_INST_HAS_DATA_SYNC DT_INST_FOREACH_STATUS_OKAY(GYRO_HELPER) 0 struct bmi08x_range { uint16_t range; uint8_t reg_val; }; union bmi08x_bus { #if DT_ANY_INST_ON_BUS_STATUS_OKAY(spi) struct spi_dt_spec spi; #endif #if DT_ANY_INST_ON_BUS_STATUS_OKAY(i2c) struct i2c_dt_spec i2c; #endif }; struct bmi08x_accel_bus_io { int (*check)(const union bmi08x_bus *bus); int (*bus_init)(const struct device *dev); int (*transceive)(const struct device *dev, uint8_t reg, bool write, void *data, size_t length); #if BMI08X_ACCEL_ANY_INST_HAS_DATA_SYNC int (*write_config_file)(const struct device *dev); #endif }; struct bmi08x_gyro_bus_io { int (*check)(const union bmi08x_bus *bus); int (*transceive)(const struct device *dev, uint8_t reg, bool write, void *data, size_t length); }; struct bmi08x_accel_config { union bmi08x_bus bus; const struct bmi08x_accel_bus_io *api; #if defined(CONFIG_BMI08X_ACCEL_TRIGGER) struct gpio_dt_spec int_gpio; #endif #if defined(CONFIG_BMI08X_ACCEL_TRIGGER) || BMI08X_ACCEL_ANY_INST_HAS_DATA_SYNC uint8_t int1_map; uint8_t int2_map; uint8_t int1_conf_io; uint8_t int2_conf_io; #endif uint8_t accel_hz; uint8_t accel_fs; #if BMI08X_ACCEL_ANY_INST_HAS_DATA_SYNC uint8_t data_sync; #endif }; struct bmi08x_gyro_config { union bmi08x_bus bus; const struct bmi08x_gyro_bus_io *api; #if defined(CONFIG_BMI08X_GYRO_TRIGGER) struct gpio_dt_spec int_gpio; #endif #if defined(CONFIG_BMI08X_GYRO_TRIGGER) || BMI08X_GYRO_ANY_INST_HAS_DATA_SYNC uint8_t int3_4_map; uint8_t int3_4_conf_io; #endif uint8_t gyro_hz; uint16_t gyro_fs; }; struct bmi08x_accel_data { #if defined(CONFIG_BMI08X_ACCEL_TRIGGER) struct gpio_callback gpio_cb; #endif uint16_t acc_sample[3]; uint16_t scale; /* micro m/s^2/lsb */ #if defined(CONFIG_BMI08X_ACCEL_TRIGGER_OWN_THREAD) K_KERNEL_STACK_MEMBER(thread_stack, CONFIG_BMI08X_ACCEL_THREAD_STACK_SIZE); struct k_thread thread; struct k_sem sem; #elif defined(CONFIG_BMI08X_ACCEL_TRIGGER_GLOBAL_THREAD) struct k_work work; const struct device *dev; #endif #ifdef CONFIG_BMI08X_ACCEL_TRIGGER sensor_trigger_handler_t handler_drdy_acc; const struct sensor_trigger *drdy_trig_acc; #endif /* CONFIG_BMI08X_ACCEL_TRIGGER */ uint8_t accel_chip_id; }; struct bmi08x_gyro_data { #if defined(CONFIG_BMI08X_GYRO_TRIGGER) struct gpio_callback gpio_cb; #endif uint16_t gyr_sample[3]; uint16_t scale; /* micro radians/s/lsb */ #if defined(CONFIG_BMI08X_GYRO_TRIGGER_OWN_THREAD) K_KERNEL_STACK_MEMBER(thread_stack, CONFIG_BMI08X_GYRO_THREAD_STACK_SIZE); struct k_thread thread; struct k_sem sem; #elif defined(CONFIG_BMI08X_GYRO_TRIGGER_GLOBAL_THREAD) struct k_work work; const struct device *dev; #endif #ifdef CONFIG_BMI08X_GYRO_TRIGGER sensor_trigger_handler_t handler_drdy_gyr; const struct sensor_trigger *drdy_trig_gyr; #endif /* CONFIG_BMI08X_GYRO_TRIGGER */ }; /* common functions for accel and gyro */ int bmi08x_freq_to_odr_val(uint16_t freq_int, uint16_t freq_milli); int32_t bmi08x_range_to_reg_val(uint16_t range, const struct bmi08x_range *range_map, uint16_t range_map_size); int32_t bmi08x_reg_val_to_range(uint8_t reg_val, const struct bmi08x_range *range_map, uint16_t range_map_size); int bmi08x_accel_read(const struct device *dev, uint8_t reg_addr, uint8_t *data, uint8_t len); int bmi08x_accel_write(const struct device *dev, uint8_t reg_addr, uint8_t *data, uint16_t len); int bmi08x_accel_byte_read(const struct device *dev, uint8_t reg_addr, uint8_t *byte); int bmi08x_accel_byte_write(const struct device *dev, uint8_t reg_addr, uint8_t byte); int bmi08x_accel_word_write(const struct device *dev, uint8_t reg_addr, uint16_t word); int bmi08x_accel_reg_field_update(const struct device *dev, uint8_t reg_addr, uint8_t pos, uint8_t mask, uint8_t val); static inline int bmi08x_accel_reg_update(const struct device *dev, uint8_t reg_addr, uint8_t mask, uint8_t val) { return bmi08x_accel_reg_field_update(dev, reg_addr, 0, mask, val); } int bmi08x_gyro_read(const struct device *dev, uint8_t reg_addr, uint8_t *data, uint8_t len); int bmi08x_gyro_byte_read(const struct device *dev, uint8_t reg_addr, uint8_t *byte); int bmi08x_gyro_byte_write(const struct device *dev, uint8_t reg_addr, uint8_t byte); int bmi08x_gyro_word_write(const struct device *dev, uint8_t reg_addr, uint16_t word); int bmi08x_gyro_reg_field_update(const struct device *dev, uint8_t reg_addr, uint8_t pos, uint8_t mask, uint8_t val); static inline int bmi08x_gyro_reg_update(const struct device *dev, uint8_t reg_addr, uint8_t mask, uint8_t val) { return bmi08x_gyro_reg_field_update(dev, reg_addr, 0, mask, val); } int bmi08x_acc_trigger_mode_init(const struct device *dev); int bmi08x_trigger_set_acc(const struct device *dev, const struct sensor_trigger *trig, sensor_trigger_handler_t handler); int bmi08x_acc_slope_config(const struct device *dev, enum sensor_attribute attr, const struct sensor_value *val); int32_t bmi08x_acc_reg_val_to_range(uint8_t reg_val); int bmi08x_gyr_trigger_mode_init(const struct device *dev); int bmi08x_trigger_set_gyr(const struct device *dev, const struct sensor_trigger *trig, sensor_trigger_handler_t handler); int bmi08x_gyr_slope_config(const struct device *dev, enum sensor_attribute attr, const struct sensor_value *val); int32_t bmi08x_gyr_reg_val_to_range(uint8_t reg_val); #endif /* ZEPHYR_DRIVERS_SENSOR_BMI08X_H_ */