/* * Copyright (c) 2018 Philémon Jaermann * * SPDX-License-Identifier: Apache-2.0 */ #ifndef __SENSOR_LSM303DLHC_MAGN_ #define __SENSOR_LSM303DLHC_MAGN_ #include #define LSM303_DLHC_MAGN_X_EN_BIT BIT(0) #define LSM303DLHC_MAGN_Y_EN_BIT BIT(1) #define LSM303DLHC_MAGN_Z_EN_BIT BIT(2) #define LSM303DLHC_MAGN_EN_BITS (LSM303_DLHC_MAGN_X_EN_BIT | \ LSM303DLHC_MAGN_Y_EN_BIT | \ LSM303DLHC_MAGN_Z_EN_BIT) #if (CONFIG_LSM303DLHC_MAGN_ODR == 0) #define LSM303DLHC_MAGN_DRDY_WAIT_TIME 134 #elif (CONFIG_LSM303DLHC_MAGN_ODR == 1) #define LSM303DLHC_MAGN_DRDY_WAIT_TIME 67 #elif (CONFIG_LSM303DLHC_MAGN_ODR == 2) #define LSM303DLHC_MAGN_DRDY_WAIT_TIME 34 #elif (CONFIG_LSM303DLHC_MAGN_ODR == 3) #define LSM303DLHC_MAGN_DRDY_WAIT_TIME 14 #elif (CONFIG_LSM303DLHC_MAGN_ODR == 4) #define LSM303DLHC_MAGN_DRDY_WAIT_TIME 7 #elif (CONFIG_LSM303DLHC_MAGN_ODR == 5) #define LSM303DLHC_MAGN_DRDY_WAIT_TIME 4 #elif (CONFIG_LSM303DLHC_MAGN_ODR == 6) #define LSM303DLHC_MAGN_DRDY_WAIT_TIME 2 #elif (CONFIG_LSM303DLHC_MAGN_ODR == 7) #define LSM303DLHC_MAGN_DRDY_WAIT_TIME 1 #endif #define LSM303DLHC_MAGN_ODR_SHIFT 2 #define LSM303DLHC_MAGN_ODR_BITS (CONFIG_LSM303DLHC_MAGN_ODR << \ LSM303DLHC_MAGN_ODR_SHIFT) #if (CONFIG_LSM303DLHC_MAGN_RANGE == 1) #define LSM303DLHC_MAGN_LSB_GAUSS_XY 1100 #define LSM303DLHC_MAGN_LSB_GAUSS_Z 980 #elif (CONFIG_LSM303DLHC_MAGN_RANGE == 2) #define LSM303DLHC_MAGN_LSB_GAUSS_XY 855 #define LSM303DLHC_MAGN_LSB_GAUSS_Z 760 #elif (CONFIG_LSM303DLHC_MAGN_RANGE == 3) #define LSM303DLHC_MAGN_LSB_GAUSS_XY 670 #define LSM303DLHC_MAGN_LSB_GAUSS_Z 600 #elif (CONFIG_LSM303DLHC_MAGN_RANGE == 4) #define LSM303DLHC_MAGN_LSB_GAUSS_XY 450 #define LSM303DLHC_MAGN_LSB_GAUSS_Z 400 #elif (CONFIG_LSM303DLHC_MAGN_RANGE == 5) #define LSM303DLHC_MAGN_LSB_GAUSS_XY 400 #define LSM303DLHC_MAGN_LSB_GAUSS_Z 355 #elif (CONFIG_LSM303DLHC_MAGN_RANGE == 6) #define LSM303DLHC_MAGN_LSB_GAUSS_XY 330 #define LSM303DLHC_MAGN_LSB_GAUSS_Z 295 #elif (CONFIG_LSM303DLHC_MAGN_RANGE == 7) #define LSM303DLHC_MAGN_LSB_GAUSS_XY 230 #define LSM303DLHC_MAGN_LSB_GAUSS_Z 205 #endif #define LSM303DLHC_MAGN_FS_SHIFT 5 #define LSM303DLHC_MAGN_FS_BITS (CONFIG_LSM303DLHC_MAGN_RANGE << \ LSM303DLHC_MAGN_FS_SHIFT) #define LSM303DLHC_MAGN_CONT_UPDATE 0x00 #define LSM303DLHC_MAGN_DRDY BIT(0) #define LSM303DLHC_CRA_REG_M 0x00 #define LSM303DLHC_CRB_REG_M 0x01 #define LSM303DLHC_MR_REG_M 0x02 #define LSM303DLHC_REG_MAGN_X_LSB 0x03 #define LSM303DLHC_SR_REG_M 0x09 struct lsm303dlhc_magn_data { int16_t magn_x; int16_t magn_y; int16_t magn_z; }; struct lsm303dlhc_magn_config { struct i2c_dt_spec i2c; }; #endif /* _SENSOR_LSM303DLHC_MAGN_ */