blob: 0ce44f0cdf454abc94ba5b3ea1c8bb160c9f73d8 [file] [log] [blame]
/*
* Copyright (c) 2018 Philémon Jaermann
*
* SPDX-License-Identifier: Apache-2.0
*/
#ifndef __SENSOR_LSM303DLHC_MAGN_
#define __SENSOR_LSM303DLHC_MAGN_
#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 {
const struct device *i2c;
int16_t magn_x;
int16_t magn_y;
int16_t magn_z;
};
struct lsm303dlhc_magn_config {
char *i2c_name;
uint8_t i2c_address;
};
#endif /* _SENSOR_LSM303DLHC_MAGN_ */