zephyr/drivers/sensor/lsm303dlhc_accel/lsm303dlhc_accel.h

74 lines
2.0 KiB
C

/*
* Copyright (c) 2018 Philémon Jaermann
*
* SPDX-License-Identifier: Apache-2.0
*/
#ifndef __SENSOR_LSM303DLHC_ACCEL_
#define __SENSOR_LSM303DLHC_ACCEL_
#define LSM303_DLHC_ACCEL_X_EN_BIT BIT(0)
#define LSM303DLHC_ACCEL_Y_EN_BIT BIT(1)
#define LSM303DLHC_ACCEL_Z_EN_BIT BIT(2)
#define LSM303DLHC_ACCEL_EN_BITS (LSM303_DLHC_ACCEL_X_EN_BIT | \
LSM303DLHC_ACCEL_Y_EN_BIT | \
LSM303DLHC_ACCEL_Z_EN_BIT)
#if (CONFIG_LSM303DLHC_ACCEL_POWER_MODE == 0)
#define LSM303DLHC_LP_EN_BIT 0
#elif (CONFIG_LSM303DLHC_ACCEL_POWER_MODE == 1)
#define LSM303DLHC_LP_EN_BIT BIT(3)
#endif
#define LSM303DLHC_ACCEL_ODR_SHIFT 4
#define LSM303DLHC_ACCEL_ODR_MASK 0xF0
#define LSM303DLHC_ACCEL_ODR_BITS (CONFIG_LSM303DLHC_ACCEL_ODR << \
LSM303DLHC_ACCEL_ODR_SHIFT)
#if (CONFIG_LSM303DLHC_ACCEL_RANGE == 0)
#define LSM303DLHC_ACCEL_SCALE 1
#elif (CONFIG_LSM303DLHC_ACCEL_RANGE == 1)
#define LSM303DLHC_ACCEL_SCALE 2
#elif (CONFIG_LSM303DLHC_ACCEL_RANGE == 2)
#define LSM303DLHC_ACCEL_SCALE 4
#elif (CONFIG_LSM303DLHC_ACCEL_RANGE == 3)
#define LSM303DLHC_ACCEL_SCALE 12
#endif
#define LSM303DLHC_ACCEL_AUTO_INC_ADDR BIT(7)
#define LSM303DLHC_ACCEL_FS_SHIFT 4
#define LSM303DLHC_ACCEL_FS_BITS (CONFIG_LSM303DLHC_ACCEL_RANGE << \
LSM303DLHC_ACCEL_FS_SHIFT)
#define LSM303DLHC_REG_CTRL_1 0x20
#define LSM303DLHC_REG_CTRL_4 0x23
#define LSM303DLHC_REG_ACCEL_X_LSB (0x28 | LSM303DLHC_ACCEL_AUTO_INC_ADDR)
enum lsm303dlhc_accel_odr {
LSM303DLHC_ACCEL_ODR_1HZ,
LSM303DLHC_ACCEL_ODR_10HZ,
LSM303DLHC_ACCEL_ODR_25HZ,
LSM303DLHC_ACCEL_ODR_50HZ,
LSM303DLHC_ACCEL_ODR_100HZ,
LSM303DLHC_ACCEL_ODR_200HZ,
LSM303DLHC_ACCEL_ODR_400HZ,
LSM303DLHC_ACCEL_ODR_1620HZ,
LSM303DLHC_ACCEL_ODR_1344HZ,
LSM303DLHC_ACCEL_ODR_5376HZ = LSM303DLHC_ACCEL_ODR_1344HZ,
};
struct lsm303dlhc_accel_data {
struct device *i2c;
s16_t accel_x;
s16_t accel_y;
s16_t accel_z;
};
struct lsm303dlhc_accel_config {
char *i2c_name;
u8_t i2c_address;
};
#endif /* __SENSOR_LSM303DLHC_ACCEL_ */