/* * Copyright (c) 2016 Intel Corporation * * SPDX-License-Identifier: Apache-2.0 */ #ifndef __SENSOR_LIS3DH_H__ #define __SENSOR_LIS3DH_H__ #include #include #include #include #define LIS3DH_I2C_ADDRESS CONFIG_LIS3DH_I2C_ADDR #define LIS3DH_AUTOINCREMENT_ADDR BIT(7) #define LIS3DH_REG_CTRL1 0x20 #define LIS3DH_ACCEL_X_EN_BIT BIT(0) #define LIS3DH_ACCEL_Y_EN_BIT BIT(1) #define LIS3DH_ACCEL_Z_EN_BIT BIT(2) #define LIS3DH_ACCEL_EN_BITS (LIS3DH_ACCEL_X_EN_BIT | \ LIS3DH_ACCEL_Y_EN_BIT | LIS3DH_ACCEL_Z_EN_BIT) #if defined(CONFIG_LIS3DH_POWER_MODE_LOW) #define LIS3DH_LP_EN_BIT BIT(3) #elif defined(CONFIG_LIS3DH_POWER_MODE_NORMAL) #define LIS3DH_LP_EN_BIT 0 #endif #if defined(CONFIG_LIS3DH_ODR_1) #define LIS3DH_ODR_IDX 1 #elif defined(CONFIG_LIS3DH_ODR_2) #define LIS3DH_ODR_IDX 2 #elif defined(CONFIG_LIS3DH_ODR_3) #define LIS3DH_ODR_IDX 3 #elif defined(CONFIG_LIS3DH_ODR_4) #define LIS3DH_ODR_IDX 4 #elif defined(CONFIG_LIS3DH_ODR_5) #define LIS3DH_ODR_IDX 5 #elif defined(CONFIG_LIS3DH_ODR_6) #define LIS3DH_ODR_IDX 6 #elif defined(CONFIG_LIS3DH_ODR_7) #define LIS3DH_ODR_IDX 7 #elif defined(CONFIG_LIS3DH_ODR_8) #define LIS3DH_ODR_IDX 8 #elif defined(CONFIG_LIS3DH_ODR_9_NORMAL) || defined(CONFIG_LIS3DH_ODR_9_LOW) #define LIS3DH_ODR_IDX 9 #endif #define LIS3DH_ODR_SHIFT 4 #define LIS3DH_ODR_BITS (LIS3DH_ODR_IDX << LIS3DH_ODR_SHIFT) #define LIS3DH_REG_CTRL3 0x22 #define LIS3DH_EN_DRDY1_INT1 BIT(4) #define LIS3DH_REG_CTRL4 0x23 #define LIS3DH_FS_SHIFT 4 #define LIS3DH_FS_MASK (BIT_MASK(2) << LIS3DH_FS_SHIFT) #if defined(CONFIG_LIS3DH_ACCEL_RANGE_2G) #define LIS3DH_FS_IDX 0 #elif defined(CONFIG_LIS3DH_ACCEL_RANGE_4G) #define LIS3DH_FS_IDX 1 #elif defined(CONFIG_LIS3DH_ACCEL_RANGE_8G) #define LIS3DH_FS_IDX 2 #elif defined(CONFIG_LIS3DH_ACCEL_RANGE_16G) #define LIS3DH_FS_IDX 3 #endif #define LIS3DH_FS_BITS (LIS3DH_FS_IDX << LIS3DH_FS_SHIFT) #define LIS3DH_ACCEL_SCALE (SENSOR_G * (4 << LIS3DH_FS_IDX)) #define LIS3DH_REG_ACCEL_X_LSB 0x28 #define LIS3DH_REG_ACCEL_Y_LSB 0x2A #define LIS3DH_REG_ACCEL_Z_LSB 0x2C #define LIS3DH_REG_ACCEL_X_MSB 0x29 #define LIS3DH_REG_ACCEL_Y_MSB 0x2B #define LIS3DH_REG_ACCEL_Z_MSB 0x2D struct lis3dh_data { struct device *i2c; s16_t x_sample; s16_t y_sample; s16_t z_sample; #ifdef CONFIG_LIS3DH_TRIGGER struct device *gpio; struct gpio_callback gpio_cb; struct sensor_trigger data_ready_trigger; sensor_trigger_handler_t data_ready_handler; #if defined(CONFIG_LIS3DH_TRIGGER_OWN_THREAD) char __stack thread_stack[CONFIG_LIS3DH_THREAD_STACK_SIZE]; struct k_thread thread; struct k_sem gpio_sem; #elif defined(CONFIG_LIS3DH_TRIGGER_GLOBAL_THREAD) struct k_work work; struct device *dev; #endif #endif /* CONFIG_LIS3DH_TRIGGER */ }; #ifdef CONFIG_LIS3DH_TRIGGER int lis3dh_trigger_set(struct device *dev, const struct sensor_trigger *trig, sensor_trigger_handler_t handler); int lis3dh_sample_fetch(struct device *dev, enum sensor_channel chan); int lis3dh_init_interrupt(struct device *dev); #endif #define SYS_LOG_DOMAIN "LIS3DH" #define SYS_LOG_LEVEL CONFIG_SYS_LOG_SENSOR_LEVEL #include #endif /* __SENSOR_LIS3DH__ */