sensor: add driver for LSM6DS0
Add driver for LSM6DS0 accelerometer, gyroscope and temperature sensor. Change-Id: Ic04fa8d0bbf935e7f04ed7981554d8095ceb5ccf Signed-off-by: Murtaza Alexandru <alexandru.murtaza@intel.com>
This commit is contained in:
parent
caa506102e
commit
b3a485147f
|
@ -47,6 +47,8 @@ source "drivers/sensor/Kconfig.lis3dh"
|
|||
|
||||
source "drivers/sensor/Kconfig.lis3mdl"
|
||||
|
||||
source "drivers/sensor/Kconfig.lsm6ds0"
|
||||
|
||||
source "drivers/sensor/Kconfig.lsm9ds0_gyro"
|
||||
|
||||
source "drivers/sensor/Kconfig.lsm9ds0_mfd"
|
||||
|
|
173
drivers/sensor/Kconfig.lsm6ds0
Normal file
173
drivers/sensor/Kconfig.lsm6ds0
Normal file
|
@ -0,0 +1,173 @@
|
|||
# Kconfig.lsm6ds0 - LSM6DS0 accelerometer and gyroscope sensor configuration
|
||||
# options
|
||||
|
||||
#
|
||||
# Copyright (c) 2016 Intel Corporation
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
|
||||
menuconfig LSM6DS0
|
||||
bool "LSM6DS0 I2C accelerometer and gyroscope Chip"
|
||||
depends on SENSOR && I2C && NANO_TIMEOUTS
|
||||
default n
|
||||
help
|
||||
Enable driver for LSM6DS0 I2C-based accelerometer and gyroscope
|
||||
sensor.
|
||||
|
||||
config LSM6DS0_SYS_LOG_LEVEL
|
||||
int "LSM6DS0 Log level"
|
||||
depends on SYS_LOG && LSM6DS0
|
||||
default 0
|
||||
range 0 4
|
||||
help
|
||||
Sets log level for LSM6DS0 driver.
|
||||
Levels are:
|
||||
0 OFF, do not write
|
||||
1 ERROR, only write SYS_LOG_ERR
|
||||
2 WARNING, write SYS_LOG_WRN in addition to previous level
|
||||
3 INFO, write SYS_LOG_INF in addition to previous levels
|
||||
4 DEBUG, write SYS_LOG_DBG in addition to previous levels
|
||||
|
||||
config LSM6DS0_DEV_NAME
|
||||
string "LSM6DS0 device name"
|
||||
depends on LSM6DS0
|
||||
default "lsm6ds0"
|
||||
|
||||
config LSM6DS0_INIT_PRIORITY
|
||||
int
|
||||
depends on LSM6DS0
|
||||
default 70
|
||||
prompt "Init priority"
|
||||
help
|
||||
Device driver initialization priority.
|
||||
|
||||
config LSM6DS0_I2C_ADDR
|
||||
hex
|
||||
prompt "I2C address"
|
||||
depends on LSM6DS0
|
||||
default "0x6B"
|
||||
help
|
||||
I2C address of the LSM6DS0 sensor.
|
||||
Use 0x6A if the SA0 pin is pulled to GND or 0x6B if the SA0 pin
|
||||
is pulled to VCC.
|
||||
|
||||
config LSM6DS0_I2C_MASTER_DEV_NAME
|
||||
string "I2C master where LSM6DS0 chip is connected"
|
||||
depends on LSM6DS0
|
||||
default "I2C_0"
|
||||
help
|
||||
Specify the device name of the I2C master device to which LSM6DS0 is
|
||||
connected.
|
||||
|
||||
config LSM6DS0_ACCEL_ENABLE_X_AXIS
|
||||
bool "Enable accelerometer X axis"
|
||||
depends on LSM6DS0
|
||||
default y
|
||||
help
|
||||
Enable/disable accelerometer X axis totally by stripping everything
|
||||
related in driver.
|
||||
|
||||
config LSM6DS0_ACCEL_ENABLE_Y_AXIS
|
||||
bool "Enable accelerometer Y axis"
|
||||
depends on LSM6DS0
|
||||
default y
|
||||
help
|
||||
Enable/disable accelerometer Y axis totally by stripping everything
|
||||
related in driver.
|
||||
|
||||
config LSM6DS0_ACCEL_ENABLE_Z_AXIS
|
||||
bool "Enable accelerometer Z axis"
|
||||
depends on LSM6DS0
|
||||
default y
|
||||
help
|
||||
Enable/disable accelerometer Z axis totally by stripping everything
|
||||
related in driver.
|
||||
|
||||
config LSM6DS0_GYRO_ENABLE_X_AXIS
|
||||
bool "Enable gyroscope X axis"
|
||||
depends on LSM6DS0
|
||||
default y
|
||||
help
|
||||
Enable/disable gyroscope X axis totally by stripping everything
|
||||
related in driver.
|
||||
|
||||
config LSM6DS0_GYRO_ENABLE_Y_AXIS
|
||||
bool "Enable gyroscope Y axis"
|
||||
depends on LSM6DS0
|
||||
default y
|
||||
help
|
||||
Enable/disable gyroscope Y axis totally by stripping everything
|
||||
related in driver.
|
||||
|
||||
config LSM6DS0_GYRO_ENABLE_Z_AXIS
|
||||
bool "Enable gyroscope Z axis"
|
||||
depends on LSM6DS0
|
||||
default y
|
||||
help
|
||||
Enable/disable gyroscope Z axis totally by stripping everything
|
||||
related in driver.
|
||||
|
||||
config LSM6DS0_ENABLE_TEMP
|
||||
bool "Enable temperature"
|
||||
depends on LSM6DS0
|
||||
default n
|
||||
help
|
||||
Enable/disable temperature totally by stripping everything related in
|
||||
driver.
|
||||
|
||||
menu "Attributes"
|
||||
depends on LSM6DS0
|
||||
|
||||
config LSM6DS0_GYRO_FULLSCALE
|
||||
int
|
||||
prompt "Gyroscope full-scale range"
|
||||
depends on LSM6DS0
|
||||
default 245
|
||||
help
|
||||
Specify the default gyroscope full-scale range.
|
||||
An X value for the config represents a range of +/- X degree per
|
||||
second. Valid values are 245, 500 and 2000.
|
||||
|
||||
config LSM6DS0_GYRO_SAMPLING_RATE
|
||||
int
|
||||
prompt "Output data rate"
|
||||
depends on LIS3MDL
|
||||
default 15
|
||||
help
|
||||
Specify the default gyroscope output data rate expressed in samples
|
||||
per second (Hz).
|
||||
Data rates supported by the chip are 0, 15, 60, 119, 238, 476,
|
||||
952.
|
||||
|
||||
config LSM6DS0_ACCEL_FULLSCALE
|
||||
int
|
||||
prompt "Accelerometer full-scale range"
|
||||
depends on LSM6DS0
|
||||
default 2
|
||||
help
|
||||
Specify the default accelerometer full-scale range.
|
||||
An X value for the config represents a range of +/- X G. Valid values
|
||||
are 2, 4, 8 and 16.
|
||||
|
||||
config LSM6DS0_ACCEL_SAMPLING_RATE
|
||||
int
|
||||
prompt "Output data rate"
|
||||
depends on LIS3MDL
|
||||
default 10
|
||||
help
|
||||
Specify the default accelerometer output data rate expressed in
|
||||
samples per second (Hz).
|
||||
Data rates supported by the chip are 0, 10, 50, 119, 238, 476, 952.
|
||||
|
||||
endmenu
|
|
@ -20,6 +20,7 @@ obj-$(CONFIG_LIS3DH) += sensor_lis3dh.o
|
|||
obj-$(CONFIG_LIS3DH_TRIGGER) += sensor_lis3dh_trigger.o
|
||||
obj-$(CONFIG_LIS3MDL) += sensor_lis3mdl.o
|
||||
obj-$(CONFIG_LIS3MDL_TRIGGER) += sensor_lis3mdl_trigger.o
|
||||
obj-$(CONFIG_LSM6DS0) += sensor_lsm6ds0.o
|
||||
obj-$(CONFIG_LSM9DS0_GYRO) += sensor_lsm9ds0_gyro.o
|
||||
obj-$(CONFIG_LSM9DS0_GYRO_TRIGGER_DRDY) += sensor_lsm9ds0_gyro_trigger.o
|
||||
obj-$(CONFIG_LSM9DS0_MFD) += sensor_lsm9ds0_mfd.o
|
||||
|
|
509
drivers/sensor/sensor_lsm6ds0.c
Normal file
509
drivers/sensor/sensor_lsm6ds0.c
Normal file
|
@ -0,0 +1,509 @@
|
|||
/* sensor_lsm6ds0.c - Driver for LSM6DS0 accelerometer, gyroscope and
|
||||
* temperature sensor
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (c) 2016 Intel Corporation
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#include <sensor.h>
|
||||
#include <nanokernel.h>
|
||||
#include <device.h>
|
||||
#include <init.h>
|
||||
#include <misc/byteorder.h>
|
||||
#include <misc/__assert.h>
|
||||
|
||||
#include "sensor_lsm6ds0.h"
|
||||
|
||||
static inline int lsm6ds0_reboot(struct device *dev)
|
||||
{
|
||||
struct lsm6ds0_data *data = dev->driver_data;
|
||||
struct lsm6ds0_config *config = dev->config->config_info;
|
||||
|
||||
if (i2c_reg_update_byte(data->i2c_master, config->i2c_slave_addr,
|
||||
LSM6DS0_REG_CTRL_REG8,
|
||||
LSM6DS0_MASK_CTRL_REG8_BOOT,
|
||||
1 << LSM6DS0_SHIFT_CTRL_REG8_BOOT) < 0) {
|
||||
return -EIO;
|
||||
}
|
||||
|
||||
sys_thread_busy_wait(50 * USEC_PER_MSEC);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline int lsm6ds0_accel_axis_ctrl(struct device *dev, int x_en,
|
||||
int y_en, int z_en)
|
||||
{
|
||||
struct lsm6ds0_data *data = dev->driver_data;
|
||||
struct lsm6ds0_config *config = dev->config->config_info;
|
||||
uint8_t state = (x_en << LSM6DS0_SHIFT_CTRL_REG5_XL_XEN_XL) |
|
||||
(y_en << LSM6DS0_SHIFT_CTRL_REG5_XL_YEN_XL) |
|
||||
(z_en << LSM6DS0_SHIFT_CTRL_REG5_XL_ZEN_XL);
|
||||
|
||||
return i2c_reg_update_byte(data->i2c_master, config->i2c_slave_addr,
|
||||
LSM6DS0_REG_CTRL_REG5_XL,
|
||||
LSM6DS0_MASK_CTRL_REG5_XL_XEN_XL |
|
||||
LSM6DS0_MASK_CTRL_REG5_XL_YEN_XL |
|
||||
LSM6DS0_MASK_CTRL_REG5_XL_ZEN_XL,
|
||||
state);
|
||||
}
|
||||
|
||||
static int lsm6ds0_accel_set_fs_raw(struct device *dev, uint8_t fs)
|
||||
{
|
||||
struct lsm6ds0_data *data = dev->driver_data;
|
||||
struct lsm6ds0_config *config = dev->config->config_info;
|
||||
|
||||
if (i2c_reg_update_byte(data->i2c_master, config->i2c_slave_addr,
|
||||
LSM6DS0_REG_CTRL_REG6_XL,
|
||||
LSM6DS0_MASK_CTRL_REG6_XL_FS_XL,
|
||||
fs << LSM6DS0_SHIFT_CTRL_REG6_XL_FS_XL) < 0) {
|
||||
return -EIO;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int lsm6ds0_accel_set_odr_raw(struct device *dev, uint8_t odr)
|
||||
{
|
||||
struct lsm6ds0_data *data = dev->driver_data;
|
||||
struct lsm6ds0_config *config = dev->config->config_info;
|
||||
|
||||
if (i2c_reg_update_byte(data->i2c_master, config->i2c_slave_addr,
|
||||
LSM6DS0_REG_CTRL_REG6_XL,
|
||||
LSM6DS0_MASK_CTRL_REG6_XL_ODR_XL,
|
||||
odr << LSM6DS0_SHIFT_CTRL_REG6_XL_ODR_XL) < 0) {
|
||||
return -EIO;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline int lsm6ds0_gyro_axis_ctrl(struct device *dev, int x_en, int y_en,
|
||||
int z_en)
|
||||
{
|
||||
struct lsm6ds0_data *data = dev->driver_data;
|
||||
struct lsm6ds0_config *config = dev->config->config_info;
|
||||
uint8_t state = (x_en << LSM6DS0_SHIFT_CTRL_REG4_XEN_G) |
|
||||
(y_en << LSM6DS0_SHIFT_CTRL_REG4_YEN_G) |
|
||||
(z_en << LSM6DS0_SHIFT_CTRL_REG4_ZEN_G);
|
||||
|
||||
return i2c_reg_update_byte(data->i2c_master, config->i2c_slave_addr,
|
||||
LSM6DS0_REG_CTRL_REG4,
|
||||
LSM6DS0_MASK_CTRL_REG4_XEN_G |
|
||||
LSM6DS0_MASK_CTRL_REG4_YEN_G |
|
||||
LSM6DS0_MASK_CTRL_REG4_ZEN_G,
|
||||
state);
|
||||
}
|
||||
|
||||
static int lsm6ds0_gyro_set_fs_raw(struct device *dev, uint8_t fs)
|
||||
{
|
||||
struct lsm6ds0_data *data = dev->driver_data;
|
||||
struct lsm6ds0_config *config = dev->config->config_info;
|
||||
|
||||
if (i2c_reg_update_byte(data->i2c_master, config->i2c_slave_addr,
|
||||
LSM6DS0_REG_CTRL_REG1_G,
|
||||
LSM6DS0_MASK_CTRL_REG1_G_FS_G,
|
||||
fs << LSM6DS0_SHIFT_CTRL_REG1_G_FS_G) < 0) {
|
||||
return -EIO;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int lsm6ds0_gyro_set_odr_raw(struct device *dev, uint8_t odr)
|
||||
{
|
||||
struct lsm6ds0_data *data = dev->driver_data;
|
||||
struct lsm6ds0_config *config = dev->config->config_info;
|
||||
|
||||
if (i2c_reg_update_byte(data->i2c_master, config->i2c_slave_addr,
|
||||
LSM6DS0_REG_CTRL_REG1_G,
|
||||
LSM6DS0_MASK_CTRL_REG1_G_ODR_G,
|
||||
odr << LSM6DS0_SHIFT_CTRL_REG1_G_ODR_G) < 0) {
|
||||
return -EIO;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int lsm6ds0_sample_fetch_accel(struct device *dev)
|
||||
{
|
||||
struct lsm6ds0_data *data = dev->driver_data;
|
||||
struct lsm6ds0_config *config = dev->config->config_info;
|
||||
uint8_t buf[6];
|
||||
|
||||
if (i2c_burst_read(data->i2c_master, config->i2c_slave_addr,
|
||||
LSM6DS0_REG_OUT_X_L_XL, buf, sizeof(buf)) < 0) {
|
||||
SYS_LOG_DBG("failed to read sample");
|
||||
return -EIO;
|
||||
}
|
||||
|
||||
#if defined(CONFIG_LSM6DS0_ACCEL_ENABLE_X_AXIS)
|
||||
data->accel_sample_x = (int16_t)((uint16_t)(buf[0]) |
|
||||
((uint16_t)(buf[1]) << 8));
|
||||
#endif
|
||||
#if defined(CONFIG_LSM6DS0_ACCEL_ENABLE_Y_AXIS)
|
||||
data->accel_sample_y = (int16_t)((uint16_t)(buf[2]) |
|
||||
((uint16_t)(buf[3]) << 8));
|
||||
#endif
|
||||
#if defined(CONFIG_LSM6DS0_ACCEL_ENABLE_Z_AXIS)
|
||||
data->accel_sample_z = (int16_t)((uint16_t)(buf[4]) |
|
||||
((uint16_t)(buf[5]) << 8));
|
||||
#endif
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int lsm6ds0_sample_fetch_gyro(struct device *dev)
|
||||
{
|
||||
struct lsm6ds0_data *data = dev->driver_data;
|
||||
struct lsm6ds0_config *config = dev->config->config_info;
|
||||
uint8_t buf[6];
|
||||
|
||||
if (i2c_burst_read(data->i2c_master, config->i2c_slave_addr,
|
||||
LSM6DS0_REG_OUT_X_L_G, buf, sizeof(buf)) < 0) {
|
||||
SYS_LOG_DBG("failed to read sample");
|
||||
return -EIO;
|
||||
}
|
||||
|
||||
#if defined(CONFIG_LSM6DS0_GYRO_ENABLE_X_AXIS)
|
||||
data->gyro_sample_x = (int16_t)((uint16_t)(buf[0]) |
|
||||
((uint16_t)(buf[1]) << 8));
|
||||
#endif
|
||||
#if defined(CONFIG_LSM6DS0_GYRO_ENABLE_Y_AXIS)
|
||||
data->gyro_sample_y = (int16_t)((uint16_t)(buf[2]) |
|
||||
((uint16_t)(buf[3]) << 8));
|
||||
#endif
|
||||
#if defined(CONFIG_LSM6DS0_GYRO_ENABLE_Z_AXIS)
|
||||
data->gyro_sample_z = (int16_t)((uint16_t)(buf[4]) |
|
||||
((uint16_t)(buf[5]) << 8));
|
||||
#endif
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
#if defined(CONFIG_LSM6DS0_ENABLE_TEMP)
|
||||
static int lsm6ds0_sample_fetch_temp(struct device *dev)
|
||||
{
|
||||
struct lsm6ds0_data *data = dev->driver_data;
|
||||
struct lsm6ds0_config *config = dev->config->config_info;
|
||||
uint8_t buf[2];
|
||||
|
||||
if (i2c_burst_read(data->i2c_master, config->i2c_slave_addr,
|
||||
LSM6DS0_REG_OUT_TEMP_L, buf, sizeof(buf)) < 0) {
|
||||
SYS_LOG_DBG("failed to read sample");
|
||||
return -EIO;
|
||||
}
|
||||
|
||||
data->temp_sample = (int16_t)((uint16_t)(buf[0]) |
|
||||
((uint16_t)(buf[1]) << 8));
|
||||
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
static int lsm6ds0_sample_fetch(struct device *dev, enum sensor_channel chan)
|
||||
{
|
||||
__ASSERT(chan == SENSOR_CHAN_ALL || chan == SENSOR_CHAN_GYRO_ANY ||
|
||||
chan == SENSOR_CHAN_GYRO_ANY);
|
||||
|
||||
switch (chan) {
|
||||
case SENSOR_CHAN_ACCEL_ANY:
|
||||
lsm6ds0_sample_fetch_accel(dev);
|
||||
break;
|
||||
case SENSOR_CHAN_GYRO_ANY:
|
||||
lsm6ds0_sample_fetch_gyro(dev);
|
||||
break;
|
||||
#if defined(CONFIG_LSM6DS0_ENABLE_TEMP)
|
||||
case SENSOR_CHAN_TEMP:
|
||||
lsm6ds0_sample_fetch_temp(dev);
|
||||
break;
|
||||
#endif
|
||||
case SENSOR_CHAN_ALL:
|
||||
lsm6ds0_sample_fetch_accel(dev);
|
||||
lsm6ds0_sample_fetch_gyro(dev);
|
||||
#if defined(CONFIG_LSM6DS0_ENABLE_TEMP)
|
||||
lsm6ds0_sample_fetch_temp(dev);
|
||||
#endif
|
||||
break;
|
||||
default:
|
||||
return -ENOTSUP;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline void lsm6ds0_accel_convert(struct sensor_value *val, int raw_val,
|
||||
float scale)
|
||||
{
|
||||
val->type = SENSOR_VALUE_TYPE_DOUBLE;
|
||||
val->dval = (double)(raw_val) * scale / 32767.0;
|
||||
}
|
||||
|
||||
static inline int lsm6ds0_accel_get_channel(enum sensor_channel chan,
|
||||
struct sensor_value *val,
|
||||
struct lsm6ds0_data *data,
|
||||
float scale)
|
||||
{
|
||||
switch (chan) {
|
||||
#if defined(CONFIG_LSM6DS0_ACCEL_ENABLE_X_AXIS)
|
||||
case SENSOR_CHAN_ACCEL_X:
|
||||
lsm6ds0_accel_convert(val, data->accel_sample_x, scale);
|
||||
break;
|
||||
#endif
|
||||
#if defined(CONFIG_LSM6DS0_ACCEL_ENABLE_Y_AXIS)
|
||||
case SENSOR_CHAN_ACCEL_Y:
|
||||
lsm6ds0_accel_convert(val, data->accel_sample_y, scale);
|
||||
break;
|
||||
#endif
|
||||
#if defined(CONFIG_LSM6DS0_ACCEL_ENABLE_Z_AXIS)
|
||||
case SENSOR_CHAN_ACCEL_Z:
|
||||
lsm6ds0_accel_convert(val, data->accel_sample_z, scale);
|
||||
break;
|
||||
#endif
|
||||
case SENSOR_CHAN_ACCEL_ANY:
|
||||
#if defined(CONFIG_LSM6DS0_ACCEL_ENABLE_X_AXIS)
|
||||
lsm6ds0_accel_convert(val, data->accel_sample_x, scale);
|
||||
#endif
|
||||
#if defined(CONFIG_LSM6DS0_ACCEL_ENABLE_Y_AXIS)
|
||||
lsm6ds0_accel_convert(val + 1, data->accel_sample_y, scale);
|
||||
#endif
|
||||
#if defined(CONFIG_LSM6DS0_ACCEL_ENABLE_Z_AXIS)
|
||||
lsm6ds0_accel_convert(val + 2, data->accel_sample_z, scale);
|
||||
#endif
|
||||
break;
|
||||
default:
|
||||
return -ENOTSUP;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int lsm6ds0_accel_channel_get(enum sensor_channel chan,
|
||||
struct sensor_value *val,
|
||||
struct lsm6ds0_data *data)
|
||||
{
|
||||
return lsm6ds0_accel_get_channel(chan, val, data,
|
||||
LSM6DS0_DEFAULT_ACCEL_FULLSCALE_FACTOR);
|
||||
}
|
||||
|
||||
static inline void lsm6ds0_gyro_convert(struct sensor_value *val, int raw_val,
|
||||
float numerator)
|
||||
{
|
||||
val->type = SENSOR_VALUE_TYPE_DOUBLE;
|
||||
val->dval = (double)(raw_val) * numerator / 1000.0 *
|
||||
SENSOR_DEG2RAD_DOUBLE;
|
||||
}
|
||||
|
||||
static inline int lsm6ds0_gyro_get_channel(enum sensor_channel chan,
|
||||
struct sensor_value *val,
|
||||
struct lsm6ds0_data *data,
|
||||
float numerator)
|
||||
{
|
||||
switch (chan) {
|
||||
#if defined(CONFIG_LSM6DS0_GYRO_ENABLE_X_AXIS)
|
||||
case SENSOR_CHAN_GYRO_X:
|
||||
lsm6ds0_gyro_convert(val, data->gyro_sample_x, numerator);
|
||||
break;
|
||||
#endif
|
||||
#if defined(CONFIG_LSM6DS0_GYRO_ENABLE_Y_AXIS)
|
||||
case SENSOR_CHAN_GYRO_Y:
|
||||
lsm6ds0_gyro_convert(val, data->gyro_sample_y, numerator);
|
||||
break;
|
||||
#endif
|
||||
#if defined(CONFIG_LSM6DS0_GYRO_ENABLE_Z_AXIS)
|
||||
case SENSOR_CHAN_GYRO_Z:
|
||||
lsm6ds0_gyro_convert(val, data->gyro_sample_z, numerator);
|
||||
break;
|
||||
#endif
|
||||
case SENSOR_CHAN_GYRO_ANY:
|
||||
#if defined(CONFIG_LSM6DS0_GYRO_ENABLE_X_AXIS)
|
||||
lsm6ds0_gyro_convert(val, data->gyro_sample_x, numerator);
|
||||
#endif
|
||||
#if defined(CONFIG_LSM6DS0_GYRO_ENABLE_Y_AXIS)
|
||||
lsm6ds0_gyro_convert(val + 1, data->gyro_sample_y, numerator);
|
||||
#endif
|
||||
#if defined(CONFIG_LSM6DS0_GYRO_ENABLE_Z_AXIS)
|
||||
lsm6ds0_gyro_convert(val + 2, data->gyro_sample_z, numerator);
|
||||
#endif
|
||||
break;
|
||||
default:
|
||||
return -ENOTSUP;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int lsm6ds0_gyro_channel_get(enum sensor_channel chan,
|
||||
struct sensor_value *val,
|
||||
struct lsm6ds0_data *data)
|
||||
{
|
||||
return lsm6ds0_gyro_get_channel(chan, val, data,
|
||||
LSM6DS0_DEFAULT_GYRO_FULLSCALE_FACTOR);
|
||||
}
|
||||
|
||||
#if defined(CONFIG_LSM6DS0_ENABLE_TEMP)
|
||||
static void lsm6ds0_gyro_channel_get_temp(struct sensor_value *val,
|
||||
struct lsm6ds0_data *data)
|
||||
{
|
||||
val->type = SENSOR_VALUE_TYPE_DOUBLE;
|
||||
val->dval = (double)(data->temp_sample) / 16.0 + 25.0;
|
||||
}
|
||||
#endif
|
||||
|
||||
static int lsm6ds0_channel_get(struct device *dev,
|
||||
enum sensor_channel chan,
|
||||
struct sensor_value *val)
|
||||
{
|
||||
struct lsm6ds0_data *data = dev->driver_data;
|
||||
|
||||
switch (chan) {
|
||||
case SENSOR_CHAN_ACCEL_X:
|
||||
case SENSOR_CHAN_ACCEL_Y:
|
||||
case SENSOR_CHAN_ACCEL_Z:
|
||||
case SENSOR_CHAN_ACCEL_ANY:
|
||||
lsm6ds0_accel_channel_get(chan, val, data);
|
||||
break;
|
||||
case SENSOR_CHAN_GYRO_X:
|
||||
case SENSOR_CHAN_GYRO_Y:
|
||||
case SENSOR_CHAN_GYRO_Z:
|
||||
case SENSOR_CHAN_GYRO_ANY:
|
||||
lsm6ds0_gyro_channel_get(chan, val, data);
|
||||
break;
|
||||
#if defined(CONFIG_LSM6DS0_ENABLE_TEMP)
|
||||
case SENSOR_CHAN_TEMP:
|
||||
lsm6ds0_gyro_channel_get_temp(val, data);
|
||||
break;
|
||||
#endif
|
||||
default:
|
||||
return -ENOTSUP;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct sensor_driver_api lsm6ds0_api_funcs = {
|
||||
.sample_fetch = lsm6ds0_sample_fetch,
|
||||
.channel_get = lsm6ds0_channel_get,
|
||||
};
|
||||
|
||||
static int lsm6ds0_init_chip(struct device *dev)
|
||||
{
|
||||
struct lsm6ds0_data *data = dev->driver_data;
|
||||
struct lsm6ds0_config *config = dev->config->config_info;
|
||||
uint8_t chip_id;
|
||||
|
||||
if (lsm6ds0_reboot(dev) < 0) {
|
||||
SYS_LOG_DBG("failed to reboot device");
|
||||
return -EIO;
|
||||
}
|
||||
|
||||
if (i2c_reg_read_byte(data->i2c_master, config->i2c_slave_addr,
|
||||
LSM6DS0_REG_WHO_AM_I, &chip_id) < 0) {
|
||||
SYS_LOG_DBG("failed reading chip id");
|
||||
return -EIO;
|
||||
}
|
||||
if (chip_id != LSM6DS0_VAL_WHO_AM_I) {
|
||||
SYS_LOG_DBG("invalid chip id 0x%x", chip_id);
|
||||
return -EIO;
|
||||
}
|
||||
SYS_LOG_DBG("chip id 0x%x", chip_id);
|
||||
|
||||
if (lsm6ds0_accel_axis_ctrl(dev, LSM6DS0_ACCEL_ENABLE_X_AXIS,
|
||||
LSM6DS0_ACCEL_ENABLE_Y_AXIS,
|
||||
LSM6DS0_ACCEL_ENABLE_Z_AXIS) < 0) {
|
||||
SYS_LOG_DBG("failed to set accelerometer axis");
|
||||
return -EIO;
|
||||
}
|
||||
|
||||
if (lsm6ds0_accel_set_fs_raw(dev, LSM6DS0_DEFAULT_ACCEL_FULLSCALE)
|
||||
< 0) {
|
||||
SYS_LOG_DBG("failed to set accelerometer full-scale");
|
||||
return -EIO;
|
||||
}
|
||||
|
||||
if (lsm6ds0_accel_set_odr_raw(dev, LSM6DS0_DEFAULT_ACCEL_SAMPLING_RATE)
|
||||
< 0) {
|
||||
SYS_LOG_DBG("failed to set accelerometer sampling rate");
|
||||
return -EIO;
|
||||
}
|
||||
|
||||
if (lsm6ds0_gyro_axis_ctrl(dev, LSM6DS0_GYRO_ENABLE_X_AXIS,
|
||||
LSM6DS0_GYRO_ENABLE_Y_AXIS,
|
||||
LSM6DS0_GYRO_ENABLE_Z_AXIS) < 0) {
|
||||
SYS_LOG_DBG("failed to set gyroscope axis");
|
||||
return -EIO;
|
||||
}
|
||||
|
||||
if (lsm6ds0_gyro_set_fs_raw(dev, LSM6DS0_DEFAULT_GYRO_FULLSCALE)
|
||||
< 0) {
|
||||
SYS_LOG_DBG("failed to set gyroscope full-scale");
|
||||
return -EIO;
|
||||
}
|
||||
|
||||
if (lsm6ds0_gyro_set_odr_raw(dev, LSM6DS0_DEFAULT_GYRO_SAMPLING_RATE)
|
||||
< 0) {
|
||||
SYS_LOG_DBG("failed to set gyroscope sampling rate");
|
||||
return -EIO;
|
||||
}
|
||||
|
||||
if (i2c_reg_update_byte(data->i2c_master, config->i2c_slave_addr,
|
||||
LSM6DS0_REG_CTRL_REG8,
|
||||
LSM6DS0_MASK_CTRL_REG8_BDU |
|
||||
LSM6DS0_MASK_CTRL_REG8_BLE |
|
||||
LSM6DS0_MASK_CTRL_REG8_IF_ADD_INC,
|
||||
(1 << LSM6DS0_SHIFT_CTRL_REG8_BDU) |
|
||||
(0 << LSM6DS0_SHIFT_CTRL_REG8_BLE) |
|
||||
(1 << LSM6DS0_SHIFT_CTRL_REG8_IF_ADD_INC))
|
||||
< 0) {
|
||||
SYS_LOG_DBG("failed to set BDU, BLE and burst");
|
||||
return -EIO;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int lsm6ds0_init(struct device *dev)
|
||||
{
|
||||
const struct lsm6ds0_config * const config = dev->config->config_info;
|
||||
struct lsm6ds0_data *data = dev->driver_data;
|
||||
|
||||
data->i2c_master = device_get_binding(config->i2c_master_dev_name);
|
||||
if (!data->i2c_master) {
|
||||
SYS_LOG_DBG("i2c master not found: %s",
|
||||
config->i2c_master_dev_name);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (lsm6ds0_init_chip(dev) < 0) {
|
||||
SYS_LOG_DBG("failed to initialize chip");
|
||||
return -EIO;
|
||||
}
|
||||
|
||||
dev->driver_api = &lsm6ds0_api_funcs;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct lsm6ds0_config lsm6ds0_config = {
|
||||
.i2c_master_dev_name = CONFIG_LSM6DS0_I2C_MASTER_DEV_NAME,
|
||||
.i2c_slave_addr = CONFIG_LSM6DS0_I2C_ADDR,
|
||||
};
|
||||
|
||||
struct lsm6ds0_data lsm6ds0_data;
|
||||
|
||||
DEVICE_INIT(lsm6ds0, CONFIG_LSM6DS0_DEV_NAME, lsm6ds0_init,
|
||||
&lsm6ds0_data, &lsm6ds0_config, NANOKERNEL,
|
||||
CONFIG_LSM6DS0_INIT_PRIORITY);
|
514
drivers/sensor/sensor_lsm6ds0.h
Normal file
514
drivers/sensor/sensor_lsm6ds0.h
Normal file
|
@ -0,0 +1,514 @@
|
|||
/* sensor_lsm6ds0.h - header file for LSM6DS0 accelerometer, gyroscope and
|
||||
* temperature sensor driver
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (c) 2016 Intel Corporation
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#ifndef __SENSOR_LSM6DS0_H__
|
||||
#define __SENSOR_LSM6DS0_H__
|
||||
|
||||
#include <stdint.h>
|
||||
#include <i2c.h>
|
||||
#include <misc/util.h>
|
||||
|
||||
#define LSM6DS0_REG_ACT_THS 0x04
|
||||
#define LSM6DS0_MASK_ACT_THS_SLEEP_ON_INACT_EN BIT(7)
|
||||
#define LSM6DS0_SHIFT_ACT_THS_SLEEP_ON_INACT_EN 7
|
||||
#define LSM6DS0_MASK_ACT_THS_ACT_THS (BIT(6) | BIT(5) | BIT(4) | \
|
||||
BIT(3) | BIT(2) | BIT(1) | \
|
||||
BIT(0))
|
||||
#define LSM6DS0_SHIFT_ACT_THS_ACT_THS 0
|
||||
|
||||
#define LSM6DS0_REG_ACT_DUR 0x05
|
||||
|
||||
#define LSM6DS0_REG_INT_GEN_CFG_XL 0x06
|
||||
#define LSM6DS0_MASK_INT_GEN_CFG_XL_AOI_XL BIT(7)
|
||||
#define LSM6DS0_SHIFT_INT_GEN_CFG_XL_AOI_XL 7
|
||||
#define LSM6DSO_MASK_INT_GEN_CFG_XL_6D BIT(6)
|
||||
#define LSM6DS0_SHIFT_INT_GEN_CFG_XL_6D 6
|
||||
#define LSM6DS0_MASK_INT_GEN_CFG_XL_ZHIE_XL BIT(5)
|
||||
#define LSM6DS0_SHIFT_INT_GEN_CFG_XL_ZHIE_XL 5
|
||||
#define LSM6DS0_MASK_INT_GEN_CFG_XL_ZLIE_XL BIT(4)
|
||||
#define LSM6DS0_SHIFT_INT_GEN_CFG_XL_ZLIE_XL 4
|
||||
#define LSM6DS0_MASK_INT_GEN_CFG_XL_YHIE_XL BIT(3)
|
||||
#define LSM6DS0_SHIFT_INT_GEN_CFG_XL_YHIE_XL 3
|
||||
#define LSM6DS0_MASK_INT_GEN_CFG_XL_YLIE_XL BIT(2)
|
||||
#define LSM6DS0_SHIFT_INT_GEN_CFG_XL_YLIE_XL 2
|
||||
#define LSM6DS0_MASK_INT_GEN_CFG_XL_XHIE_XL BIT(1)
|
||||
#define LSM6DS0_SHIFT_INT_GEN_CFG_XL_XHIE_XL 1
|
||||
#define LSM6DS0_MASK_INT_GEN_CFG_XL_XLIE_XL BIT(0)
|
||||
#define LSM6DS0_SHIFT_INT_GEN_CFG_XL_XLIE_XL 0
|
||||
|
||||
#define LSM6DS0_REG_INT_GEN_THS_X_XL 0x07
|
||||
#define LSM6DS0_REG_INT_GEN_THS_Y_XL 0x08
|
||||
#define LSM6DS0_REG_INT_GEN_THS_Z_XL 0x09
|
||||
#define LSM6DS0_REG_INT_GEN_DUR_XL 0x0A
|
||||
#define LSM6DS0_REG_REFERENCE_G 0x0B
|
||||
|
||||
#define LSM6DS0_REG_INT_CTRL 0x0C
|
||||
#define LSM6DS0_MASK_INT_CTRL_INT_IG_G BIT(7)
|
||||
#define LSM6DS0_SHIFT_INT_CTRL_INT_IG_G 7
|
||||
#define LSM6DS0_MASK_INT_CTRL_INT_IG_XL BIT(6)
|
||||
#define LSM6DS0_SHIFT_INT_CTRL_INT_IG_XL 6
|
||||
#define LSM6DS0_MASK_INT_CTRL_INT_FSS5 BIT(5)
|
||||
#define LSM6DS0_SHIFT_INT_CTRL_INT_FSS5 5
|
||||
#define LSM6DS0_MASK_INT_CTRL_INT_OVR BIT(4)
|
||||
#define LSM6DS0_SHIFT_INT_CTRL_INT_OVR 4
|
||||
#define LSM6DS0_MASK_INT_CTRL_INT_FTH BIT(3)
|
||||
#define LSM6DS0_SHIFT_INT_CTRL_INT_FTH 3
|
||||
#define LSM6DS0_MASK_INT_CTRL_INT_BOOT BIT(2)
|
||||
#define LSM6DS0_SHIFT_INT_CTRL_INT_BOOT 2
|
||||
#define LSM6DS0_MASK_INT_CTRL_INT_DRDY_G BIT(1)
|
||||
#define LSM6DS0_SHIFT_INT_CTRL_INT_DRDY_G 1
|
||||
#define LSM6DS0_MASK_INT_CTRL_INT_DRDY_XL BIT(0)
|
||||
#define LSM6DS0_SHIFT_INT_CTRL_INT_DRDY_XL 0
|
||||
|
||||
#define LSM6DS0_REG_WHO_AM_I 0x0F
|
||||
#define LSM6DS0_VAL_WHO_AM_I 0x68
|
||||
|
||||
#define LSM6DS0_REG_CTRL_REG1_G 0x10
|
||||
#define LSM6DS0_MASK_CTRL_REG1_G_ODR_G (BIT(7) | BIT(6) | BIT(5))
|
||||
#define LSM6DS0_SHIFT_CTRL_REG1_G_ODR_G 5
|
||||
#define LSM6DS0_MASK_CTRL_REG1_G_FS_G (BIT(4) | BIT(3))
|
||||
#define LSM6DS0_SHIFT_CTRL_REG1_G_FS_G 3
|
||||
#define LSM6DS0_MASK_CTRL_REG1_G_BW_G (BIT(1) | BIT(0))
|
||||
#define LSM6DS0_SHIFT_CTRL_REG1_G_BW_G 0
|
||||
|
||||
#define LSM6DS0_REG_CTRL_REG2_G 0x11
|
||||
#define LSM6DS0_MASK_CTRL_REG2_G_INT_SEL (BIT(3) | BIT(2))
|
||||
#define LSM6DS0_SHIFT_CTRL_REG2_G_INT_SEL 2
|
||||
#define LSM6DS0_MASK_CTRL_REG2_G_OUT_SEL (BIT(1) | BIT(0))
|
||||
#define LSM6DS0_SHIFT_CTRL_REG2_G_OUT_SEL 0
|
||||
|
||||
#define LSM6DS0_REG_CTRL_REG3_G 0x12
|
||||
#define LSM6DS0_MASK_CTRL_REG3_G_LP_MODE BIT(7)
|
||||
#define LSM6DS0_SHIFT_CTRL_REG3_G_LP_MODE 7
|
||||
#define LSM6DS0_MASK_CTRL_REG3_G_HP_EN BIT(6)
|
||||
#define LSM6DS0_SHIFT_CTRL_REG3_G_HP_EN 6
|
||||
#define LSM6DS0_MASK_CTRL_REG3_G_HPCF_G (BIT(3) | BIT(2) | BIT(1) | \
|
||||
BIT(0))
|
||||
#define LSM6DS0_SHIFT_CTRL_REG3_G_HPCF_G 0
|
||||
|
||||
#define LSM6DS0_REG_ORIENT_CFG_G 0x13
|
||||
#define LSM6DS0_MASK_ORIENT_CFG_G_SIGNX_G BIT(5)
|
||||
#define LSM6DS0_SHIFT_ORIENT_CFG_G_SIGNX_G 5
|
||||
#define LSM6DS0_MASK_ORIENT_CFG_G_SIGNY_G BIT(4)
|
||||
#define LSM6DS0_SHIFT_ORIENT_CFG_G_SIGNY_G 4
|
||||
#define LSM6DS0_MASK_ORIENT_CFG_G_SIGNZ_G BIT(3)
|
||||
#define LSM6DS0_SHIFT_ORIENT_CFG_G_SIGNZ_G 3
|
||||
#define LSM6DS0_MASK_ORIENT_CFG_ORIENT (BIT(2) | BIT(1) | BIT(0))
|
||||
#define LSM6DS0_SHIFT_ORIENT_CFG_ORIENT 0
|
||||
|
||||
#define LSM6DS0_REG_INT_GEN_SRC_G 0x14
|
||||
#define LSM6DS0_MASK_INT_GEN_SRC_G_IA_G BIT(6)
|
||||
#define LSM6DS0_SHIFT_INT_GEN_SRC_G_IA_G 6
|
||||
#define LSM6DS0_MASK_INT_GEN_SRC_G_ZH_G BIT(5)
|
||||
#define LSM6DS0_SHIFT_INT_GEN_SRC_G_ZH_G 5
|
||||
#define LSM6DS0_MASK_INT_GEN_SRC_G_ZL_G BIT(4)
|
||||
#define LSM6DS0_SHIFT_INT_GEN_SRC_G_ZL_G 4
|
||||
#define LSM6DS0_MASK_INT_GEN_SRC_G_YH_G BIT(3)
|
||||
#define LSM6DS0_SHIFT_INT_GEN_SRC_G_YH_G 3
|
||||
#define LSM6DS0_MASK_INT_GEN_SRC_G_YL_G BIT(2)
|
||||
#define LSM6DS0_SHIFT_INT_GEN_SRC_G_YL_G 2
|
||||
#define LSM6DS0_MASK_INT_GEN_SRC_G_XH_G BIT(1)
|
||||
#define LSM6DS0_SHIFT_INT_GEN_SRC_G_XH_G 1
|
||||
#define LSM6DS0_MASK_INT_GEN_SRC_G_XL_G BIT(0)
|
||||
#define LSM6DS0_SHIFT_INT_GEN_SRC_G_XL_G 0
|
||||
|
||||
#define LSM6DS0_REG_OUT_TEMP_L 0x15
|
||||
#define LSM6DS0_REG_OUT_TEMP_H 0x16
|
||||
|
||||
#define LSM6DS0_REG_STATUS_REG_G 0x17
|
||||
#define LSM6DS0_MASK_STATUS_REG_G_IG_XL BIT(6)
|
||||
#define LSM6DS0_SHIFT_STATUS_REG_G_IG_XL 6
|
||||
#define LSM6DS0_MASK_STATUS_REG_G_IG_G BIT(5)
|
||||
#define LSM6DS0_SHIFT_STATUS_REG_G_IG_G 5
|
||||
#define LSM6DS0_MASK_STATUS_REG_G_INACT BIT(4)
|
||||
#define LSM6DS0_SHIFT_STATUS_REG_G_INACT 4
|
||||
#define LSM6DS0_MASK_STATUS_REG_G_BOOT_STATUS BIT(3)
|
||||
#define LSM6DS0_SHIFT_STATUS_REG_G_BOOT_STATUS 3
|
||||
#define LSM6DS0_MASK_STATUS_REG_G_TDA BIT(2)
|
||||
#define LSM6DS0_SHIFT_STATUS_REG_G_TDA 2
|
||||
#define LSM6DS0_MASK_STATUS_REG_G_GDA BIT(1)
|
||||
#define LSM6DS0_SHIFT_STATUS_REG_G_GDA 1
|
||||
#define LSM6DS0_MASK_STATUS_REG_G_XLDA BIT(0)
|
||||
#define LSM6DS0_SHIFT_STATUS_REG_G_XLDA 0
|
||||
|
||||
#define LSM6DS0_REG_OUT_X_L_G 0x18
|
||||
#define LSM6DS0_REG_OUT_X_H_G 0x19
|
||||
#define LSM6DS0_REG_OUT_Y_L_G 0x1A
|
||||
#define LSM6DS0_REG_OUT_Y_H_G 0x1B
|
||||
#define LSM6DS0_REG_OUT_Z_L_G 0x1C
|
||||
#define LSM6DS0_REG_OUT_Z_H_G 0x1D
|
||||
|
||||
#define LSM6DS0_REG_CTRL_REG4 0x1E
|
||||
#define LSM6DS0_MASK_CTRL_REG4_ZEN_G BIT(5)
|
||||
#define LSM6DS0_SHIFT_CTRL_REG4_ZEN_G 5
|
||||
#define LSM6DS0_MASK_CTRL_REG4_YEN_G BIT(4)
|
||||
#define LSM6DS0_SHIFT_CTRL_REG4_YEN_G 4
|
||||
#define LSM6DS0_MASK_CTRL_REG4_XEN_G BIT(3)
|
||||
#define LSM6DS0_SHIFT_CTRL_REG4_XEN_G 3
|
||||
#define LSM6DS0_MASK_CTRL_REG4_LIR_XL1 BIT(1)
|
||||
#define LSM6DS0_SHIFT_CTRL_REG4_LIR_XL1 1
|
||||
#define LSM6DS0_MASK_CTRL_REG4_4D_XL1 BIT(0)
|
||||
#define LSM6DS0_SHIFT_CTRL_REG4_4D_XL1 0
|
||||
|
||||
#define LSM6DS0_REG_CTRL_REG5_XL 0x1F
|
||||
#define LSM6DS0_MASK_CTRL_REG5_XL_DEC (BIT(7) | BIT(6))
|
||||
#define LSM6DS0_SHIFT_CTRL_REG5_XL_DEC 6
|
||||
#define LSM6DS0_MASK_CTRL_REG5_XL_ZEN_XL BIT(5)
|
||||
#define LSM6DS0_SHIFT_CTRL_REG5_XL_ZEN_XL 5
|
||||
#define LSM6DS0_MASK_CTRL_REG5_XL_YEN_XL BIT(4)
|
||||
#define LSM6DS0_SHIFT_CTRL_REG5_XL_YEN_XL 4
|
||||
#define LSM6DS0_MASK_CTRL_REG5_XL_XEN_XL BIT(3)
|
||||
#define LSM6DS0_SHIFT_CTRL_REG5_XL_XEN_XL 3
|
||||
|
||||
#define LSM6DS0_REG_CTRL_REG6_XL 0x20
|
||||
#define LSM6DS0_MASK_CTRL_REG6_XL_ODR_XL (BIT(7) | BIT(6) | BIT(5))
|
||||
#define LSM6DS0_SHIFT_CTRL_REG6_XL_ODR_XL 5
|
||||
#define LSM6DS0_MASK_CTRL_REG6_XL_FS_XL (BIT(4) | BIT(3))
|
||||
#define LSM6DS0_SHIFT_CTRL_REG6_XL_FS_XL 3
|
||||
#define LSM6DS0_MASK_CTRL_REG6_XL_BW_SCAL_ODR BIT(2)
|
||||
#define LSM6DS0_SHIFT_CTRL_REG6_XL_BW_SCAL_ODR 2
|
||||
#define LSM6DS0_MASK_CTRL_REG6_XL_BW_XL (BIT(1) | BIT(0))
|
||||
#define LSM6DS0_SHIFT_CTRL_REG6_XL_BW_XL 0
|
||||
|
||||
#define LSM6DS0_REG_CTRL_REG7_XL 0x21
|
||||
#define LSM6DS0_MASK_CTRL_REG7_XL_HR BIT(7)
|
||||
#define LSM6DS0_SHIFT_CTRL_REG7_XL_HR 7
|
||||
#define LSM6DS0_MASK_CTRL_REG7_XL_DCF (BIT(6) | BIT(5))
|
||||
#define LSM6DS0_SHIFT_CTRL_REG7_XL_DCF 5
|
||||
#define LSM6DS0_MASK_CTRL_REG7_XL_FDS BIT(2)
|
||||
#define LSM6DS0_SHIFT_CTRL_REG7_XL_FDS 2
|
||||
#define LSM6DS0_MASK_CTRL_REG7_XL_HPIS1 BIT(0)
|
||||
#define LSM6DS0_SHIFT_CTRL_REG7_XL_HPIS 0
|
||||
|
||||
#define LSM6DS0_REG_CTRL_REG8 0x22
|
||||
#define LSM6DS0_MASK_CTRL_REG8_BOOT BIT(7)
|
||||
#define LSM6DS0_SHIFT_CTRL_REG8_BOOT 7
|
||||
#define LSM6DS0_MASK_CTRL_REG8_BDU BIT(6)
|
||||
#define LSM6DS0_SHIFT_CTRL_REG8_BDU 6
|
||||
#define LSM6DS0_MASK_CTRL_REG8_H_LACTIVE BIT(5)
|
||||
#define LSM6DS0_SHIFT_CTRL_REG8_H_LACTIVE 5
|
||||
#define LSM6DS0_MASK_CTRL_REG8_PP_OD BIT(4)
|
||||
#define LSM6DS0_SHIFT_CTRL_REG8_PP_OD 4
|
||||
#define LSM6DS0_MASK_CTRL_REG8_SIM BIT(3)
|
||||
#define LSM6DS0_SHIFT_CTRL_REG8_SIM 3
|
||||
#define LSM6DS0_MASK_CTRL_REG8_IF_ADD_INC BIT(2)
|
||||
#define LSM6DS0_SHIFT_CTRL_REG8_IF_ADD_INC 2
|
||||
#define LSM6DS0_MASK_CTRL_REG8_BLE BIT(1)
|
||||
#define LSM6DS0_SHIFT_CTRL_REG8_BLE 1
|
||||
#define LSM6DS0_MASK_CTRL_REG8_SW_RESET BIT(0)
|
||||
#define LSM6DS0_SHIFT_CTRL_REG8_SW_RESET 0
|
||||
|
||||
#define LSM6DS0_REG_CTRL_REG9 0x23
|
||||
#define LSM6DS0_MASK_CTRL_REG9_SLEEP_G BIT(6)
|
||||
#define LSM6DS0_SHIFT_CTRL_REG9_SLEEP_G 6
|
||||
#define LSM6DS0_MASK_CTRL_REG9_FIFO_TEMP_EN BIT(4)
|
||||
#define LSM6DS0_SHIFT_CTRL_REG9_FIFO_TEMP_EN 4
|
||||
#define LSM6DS0_MASK_CTRL_REG9_DRDY_MASK_BIT BIT(3)
|
||||
#define LSM6DS0_SHIFT_CTRL_REG9_DRDY_MASK_BIT 3
|
||||
#define LSM6DS0_MASK_CTRL_REG9_DRDY_I2C_DIS BIT(2)
|
||||
#define LSM6DS0_SHIFT_CTRL_REG9_DRDY_I2C_DIS 2
|
||||
#define LSM6DS0_MASK_CTRL_REG9_FIFO_EN BIT(1)
|
||||
#define LSM6DS0_SHIFT_CTRL_REG9_FIFO_EN 1
|
||||
#define LSM6DS0_MASK_CTRL_REG9_STOP_ON_FTH BIT(0)
|
||||
#define LSM6DS0_SHIFT_CTRL_REG9_STOP_ON_FTH 0
|
||||
|
||||
#define LSM6DS0_REG_CTRL_REG10 0x24
|
||||
#define LSM6DS0_MASK_CTRL_REG10_ST_G BIT(2)
|
||||
#define LSM6DS0_SHIFT_CTRL_REG10_ST_G 2
|
||||
#define LSM6DS0_MASK_CTRL_REG10_ST_XL BIT(0)
|
||||
#define LSM6DS0_SHIFT_CTRL_REG10_ST_XL 0
|
||||
|
||||
#define LSM6DS0_REG_INT_GEN_SRC_XL 0x26
|
||||
#define LSM6DS0_MASK_INT_GEN_SRC_XL_IA_XL BIT(6)
|
||||
#define LSM6DS0_SHIFT_INT_GEN_SRC_XL_IA_XL 6
|
||||
#define LSM6DS0_MASK_INT_GEN_SRC_XL_ZH_XL BIT(5)
|
||||
#define LSM6DS0_SHIFT_INT_GEN_SRC_XL_ZH_XL 5
|
||||
#define LSM6DS0_MASK_INT_GEN_SRC_XL_ZL_XL BIT(4)
|
||||
#define LSM6DS0_SHIFT_INT_GEN_SRC_XL_ZL_XL 4
|
||||
#define LSM6DS0_MASK_INT_GEN_SRC_XL_YH_XL BIT(3)
|
||||
#define LSM6DS0_SHIFT_INT_GEN_SRC_XL_YH_XL 3
|
||||
#define LSM6DS0_MASK_INT_GEN_SRC_XL_YL_XL BIT(2)
|
||||
#define LSM6DS0_SHIFT_INT_GEN_SRC_XL_YL_XL 2
|
||||
#define LSM6DS0_MASK_INT_GEN_SRC_XL_XH_XL BIT(1)
|
||||
#define LSM6DS0_SHIFT_INT_GEN_SRC_XL_XH_XL 1
|
||||
#define LSM6DS0_MASK_INT_GEN_SRC_XL_XL_XL BIT(0)
|
||||
#define LSM6DS0_SHIFT_INT_GEN_SRC_XL_XL_XL 0
|
||||
|
||||
#define LSM6DS0_REG_STATUS_REG_XL 0x27
|
||||
#define LSM6DS0_MASK_STATUS_REG_XL_IG_XL BIT(6)
|
||||
#define LSM6DS0_SHIFT_STATUS_REG_XL_IG_XL 6
|
||||
#define LSM6DS0_MASK_STATUS_REG_XL_IG_G BIT(5)
|
||||
#define LSM6DS0_SHIFT_STATUS_REG_XL_IG_G 5
|
||||
#define LSM6DS0_MASK_STATUS_REG_XL_INACT BIT(4)
|
||||
#define LSM6DS0_SHIFT_STATUS_REG_XL_INACT 4
|
||||
#define LSM6DS0_MASK_STATUS_REG_XL_BOOT_STATUS BIT(3)
|
||||
#define LSM6DS0_SHIFT_STATUS_REG_XL_BOOT_STATUS 3
|
||||
#define LSM6DS0_MASK_STATUS_REG_XL_TDA BIT(2)
|
||||
#define LSM6DS0_SHIFT_STATUS_REG_XL_TDA 2
|
||||
#define LSM6DS0_MASK_STATUS_REG_XL_GDA BIT(1)
|
||||
#define LSM6DS0_SHIFT_STATUS_REG_XL_GDA 1
|
||||
#define LSM6DS0_MASK_STATUS_REG_XL_XLDA BIT(0)
|
||||
#define LSM6DS0_SHIFT_STATUS_REG_XL_XLDA 0
|
||||
|
||||
#define LSM6DS0_REG_OUT_X_L_XL 0x28
|
||||
#define LSM6DS0_REG_OUT_X_H_XL 0x29
|
||||
#define LSM6DS0_REG_OUT_Y_L_XL 0x2A
|
||||
#define LSM6DS0_REG_OUT_Y_H_XL 0x2B
|
||||
#define LSM6DS0_REG_OUT_Z_L_XL 0x2C
|
||||
#define LSM6DS0_REG_OUT_Z_H_XL 0x2D
|
||||
|
||||
#define LSM6DS0_REG_FIFO_CTRL 0x2E
|
||||
#define LSM6DS0_MASK_FIFO_CTRL_FMODE (BIT(7) | BIT(6) | BIT(5))
|
||||
#define LSM6DS0_SHIFT_FIFO_CTRL_FMODE 5
|
||||
#define LSM6DS0_MASK_FIFO_CTRL_FTH (BIT(4) | BIT(3) | BIT(2) | \
|
||||
BIT(1) | BIT(0))
|
||||
#define LSM6DS0_SHIFT_FIFO_CTRL_FTH 0
|
||||
|
||||
#define LSM6DS0_REG_FIFO_SRC 0x2F
|
||||
#define LSM6DS0_MASK_FIFO_SRC_FTH BIT(7)
|
||||
#define LSM6DS0_SHIFT_FIFO_SRC_FTH 7
|
||||
#define LSM6DS0_MASK_FIFO_SRC_OVRN BIT(6)
|
||||
#define LSM6DS0_SHIFT_FIFO_SRC_OVRN 6
|
||||
#define LSM6DS0_MASK_FIFO_SRC_FSS (BIT(5) | BIT(4) | BIT(3) | \
|
||||
BIT(2) | BIT(1) | BIT(0))
|
||||
#define LSM6DS0_SHIFT_FIFO_SRC_FSS 0
|
||||
|
||||
#define LSM6DS0_REG_INT_GEN_CFG_G 0x30
|
||||
#define LSM6DS0_MASK_INT_GEN_CFG_G_AOI_G BIT(7)
|
||||
#define LSM6DS0_SHIFT_INT_GEN_CFG_G_AOI_G 7
|
||||
#define LSM6DS0_MASK_INT_GEN_CFG_G_LIR_G BIT(6)
|
||||
#define LSM6DS0_SHIFT_INT_GEN_CFG_G_LIR_G 6
|
||||
#define LSM6DS0_MASK_INT_GEN_CFG_G_ZHIE_G BIT(5)
|
||||
#define LSM6DS0_SHIFT_INT_GEN_CFG_G_ZHIE_G 5
|
||||
#define LSM6DS0_MASK_INT_GEN_CFG_G_ZLIE_G BIT(4)
|
||||
#define LSM6DS0_SHIFT_INT_GEN_CFG_G_ZLIE_G 4
|
||||
#define LSM6DS0_MASK_INT_GEN_CFG_G_YHIE_G BIT(3)
|
||||
#define LSM6DS0_SHIFT_INT_GEN_CFG_G_YHIE_G 3
|
||||
#define LSM6DS0_MASK_INT_GEN_CFG_G_YLIE_G BIT(2)
|
||||
#define LSM6DS0_SHIFT_INT_GEN_CFG_G_YLIE_G 2
|
||||
#define LSM6DS0_MASK_INT_GEN_CFG_G_XHIE_G BIT(1)
|
||||
#define LSM6DS0_SHIFT_INT_GEN_CFG_G_XHIE_G 1
|
||||
#define LSM6DS0_MASK_INT_GEN_CFG_G_XLIE_G BIT(0)
|
||||
#define LSM6DS0_SHIFT_INT_GEN_CFG_G_XLIE_G 0
|
||||
|
||||
#define LSM6DS0_REG_INT_GEN_THS_XH_G 0x31
|
||||
#define LSM6DS0_MASK_INT_GEN_THS_XH_G_DCRM_G BIT(7)
|
||||
#define LSM6DS0_SHIFT_INT_GEN_THS_XH_G_DCRM_G 7
|
||||
|
||||
#define LSM6DS0_REG_INT_GEN_THS_XL_G 0x32
|
||||
#define LSM6DS0_REG_INT_GEN_THS_YH_G 0x33
|
||||
#define LSM6DS0_REG_INT_GEN_THS_YL_G 0x34
|
||||
#define LSM6DS0_REG_INT_GEN_THS_ZH_G 0x35
|
||||
#define LSM6DS0_REG_INT_GEN_THS_ZL_G 0x36
|
||||
|
||||
#define LSM6DS0_REG_INT_GEN_DUR_G 0x37
|
||||
#define LSM6DS0_MASK_INT_GEN_DUR_G_WAIT_G BIT(7)
|
||||
#define LSM6DS0_SHIFT_INT_GEN_DUR_G_WAIT_G 7
|
||||
|
||||
#define SENSOR_G_DOUBLE (SENSOR_G / 1000000.0)
|
||||
#define SENSOR_PI_DOUBLE (SENSOR_PI / 1000000.0)
|
||||
#define SENSOR_DEG2RAD_DOUBLE (180.0 / SENSOR_PI_DOUBLE)
|
||||
|
||||
#if defined(CONFIG_LSM6DS0_I2C_ADDR_6A)
|
||||
#define LSM6DS0_I2C_ADDR 0x6A
|
||||
#elif defined(CONFIG_LSM6DS0_I2C_ADDR_6B)
|
||||
#define LSM6DS0_I2C_ADDR 0x6B
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_LSM6DS0_ACCEL_ENABLE_X_AXIS)
|
||||
#define LSM6DS0_ACCEL_ENABLE_X_AXIS 1
|
||||
#else
|
||||
#define LSM6DS0_ACCEL_ENABLE_X_AXIS 0
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_LSM6DS0_ACCEL_ENABLE_Y_AXIS)
|
||||
#define LSM6DS0_ACCEL_ENABLE_Y_AXIS 1
|
||||
#else
|
||||
#define LSM6DS0_ACCEL_ENABLE_Y_AXIS 0
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_LSM6DS0_ACCEL_ENABLE_Z_AXIS)
|
||||
#define LSM6DS0_ACCEL_ENABLE_Z_AXIS 1
|
||||
#else
|
||||
#define LSM6DS0_ACCEL_ENABLE_Z_AXIS 0
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_LSM6DS0_GYRO_ENABLE_X_AXIS)
|
||||
#define LSM6DS0_GYRO_ENABLE_X_AXIS 1
|
||||
#else
|
||||
#define LSM6DS0_GYRO_ENABLE_X_AXIS 0
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_LSM6DS0_GYRO_ENABLE_Y_AXIS)
|
||||
#define LSM6DS0_GYRO_ENABLE_Y_AXIS 1
|
||||
#else
|
||||
#define LSM6DS0_GYRO_ENABLE_Y_AXIS 0
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_LSM6DS0_GYRO_ENABLE_Z_AXIS)
|
||||
#define LSM6DS0_GYRO_ENABLE_Z_AXIS 1
|
||||
#else
|
||||
#define LSM6DS0_GYRO_ENABLE_Z_AXIS 0
|
||||
#endif
|
||||
|
||||
#if CONFIG_LSM6DS0_ACCEL_FULLSCALE == 2
|
||||
#define LSM6DS0_ACCEL_FULLSCALE_2G
|
||||
#elif CONFIG_LSM6DS0_ACCEL_FULLSCALE == 4
|
||||
#define LSM6DS0_ACCEL_FULLSCALE_4G
|
||||
#elif CONFIG_LSM6DS0_ACCEL_FULLSCALE == 8
|
||||
#define LSM6DS0_ACCEL_FULLSCALE_8G
|
||||
#elif CONFIG_LSM6DS0_ACCEL_FULLSCALE == 16
|
||||
#define LSM6DS0_ACCEL_FULLSCALE_16G
|
||||
#endif
|
||||
|
||||
#if defined(LSM6DS0_ACCEL_FULLSCALE_2G)
|
||||
#define LSM6DS0_DEFAULT_ACCEL_FULLSCALE 0
|
||||
#define LSM6DS0_DEFAULT_ACCEL_FULLSCALE_FACTOR (2.0 * SENSOR_G_DOUBLE)
|
||||
#elif defined(LSM6DS0_ACCEL_FULLSCALE_4G)
|
||||
#define LSM6DS0_DEFAULT_ACCEL_FULLSCALE 2
|
||||
#define LSM6DS0_DEFAULT_ACCEL_FULLSCALE_FACTOR (4.0 * SENSOR_G_DOUBLE)
|
||||
#elif defined(LSM6DS0_ACCEL_FULLSCALE_8G)
|
||||
#define LSM6DS0_DEFAULT_ACCEL_FULLSCALE 3
|
||||
#define LSM6DS0_DEFAULT_ACCEL_FULLSCALE_FACTOR (8.0 * SENSOR_G_DOUBLE)
|
||||
#elif defined(LSM6DS0_ACCEL_FULLSCALE_16G)
|
||||
#define LSM6DS0_DEFALUT_ACCEL_FULLSCALE 1
|
||||
#define LSM6DS0_DEFAULT_ACCEL_FULLSCALE_FACTOR (16.0 * SENSOR_G_DOUBLE)
|
||||
#endif
|
||||
|
||||
#if CONFIG_LSM6DS0_ACCEL_SAMPLING_RATE == 0
|
||||
#define LSM6DS0_ACCEL_SAMPLING_RATE_0
|
||||
#elif CONFIG_LSM6DS0_ACCEL_SAMPLING_RATE == 10
|
||||
#define LSM6DS0_ACCEL_SAMPLING_RATE_10
|
||||
#elif CONFIG_LSM6DS0_ACCEL_SAMPLING_RATE == 50
|
||||
#define LSM6DS0_ACCEL_SAMPLING_RATE_50
|
||||
#elif CONFIG_LSM6DS0_ACCEL_SAMPLING_RATE == 119
|
||||
#define LSM6DS0_ACCEL_SAMPLING_RATE_119
|
||||
#elif CONFIG_LSM6DS0_ACCEL_SAMPLING_RATE == 238
|
||||
#define LSM6DS0_ACCEL_SAMPLING_RATE_238
|
||||
#elif CONFIG_LSM6DS0_ACCEL_SAMPLING_RATE == 476
|
||||
#define LSM6DS0_ACCEL_SAMPLING_RATE_476
|
||||
#elif CONFIG_LSM6DS0_ACCEL_SAMPLING_RATE == 952
|
||||
#define LSM6DS0_ACCEL_SAMPLING_RATE_952
|
||||
#endif
|
||||
|
||||
#if defined(LSM6DS0_ACCEL_SAMPLING_RATE_0)
|
||||
#define LSM6DS0_DEFAULT_ACCEL_SAMPLING_RATE 0
|
||||
#elif defined(LSM6DS0_ACCEL_SAMPLING_RATE_10)
|
||||
#define LSM6DS0_DEFAULT_ACCEL_SAMPLING_RATE 1
|
||||
#elif defined(LSM6DS0_ACCEL_SAMPLING_RATE_50)
|
||||
#define LSM6DS0_DEFAULT_ACCEL_SAMPLING_RATE 2
|
||||
#elif defined(LSM6DS0_ACCEL_SAMPLING_RATE_119)
|
||||
#define LSM6DS0_DEFAULT_ACCEL_SAMPLING_RATE 3
|
||||
#elif defined(LSM6DS0_ACCEL_SAMPLING_RATE_238)
|
||||
#define LSM6DS0_DEFAULT_ACCEL_SAMPLING_RATE 4
|
||||
#elif defined(LSM6DS0_ACCEL_SAMPLING_RATE_476)
|
||||
#define LSM6DS0_DEFAULT_ACCEL_SAMPLING_RATE 5
|
||||
#elif defined(LSM6DS0_ACCEL_SAMPLING_RATE_952)
|
||||
#define LSM6DS0_DEFAULT_ACCEL_SAMPLING_RATE 6
|
||||
#endif
|
||||
|
||||
#if CONFIG_LSM6DS0_GYRO_FULLSCALE == 245
|
||||
#define LSM6DS0_GYRO_FULLSCALE_245
|
||||
#elif CONFIG_LSM6DS0_GYRO_FULLSCALE == 500
|
||||
#define LSM6DS0_GYRO_FULLSCALE_500
|
||||
#elif CONFIG_LSM6DS0_GYRO_FULLSCALE == 2000
|
||||
#define LSM6DS0_GYRO_FULLSCALE_2000
|
||||
#endif
|
||||
|
||||
#if defined(LSM6DS0_GYRO_FULLSCALE_245)
|
||||
#define LSM6DS0_DEFAULT_GYRO_FULLSCALE 0
|
||||
#define LSM6DS0_DEFAULT_GYRO_FULLSCALE_FACTOR 8.75
|
||||
#elif defined(LSM6DS0_GYRO_FULLSCALE_500)
|
||||
#define LSM6DS0_DEFAULT_GYRO_FULLSCALE 1
|
||||
#define LSM6DS0_DEFAULT_GYRO_FULLSCALE_FACTOR 17.50
|
||||
#elif defined(LSM6DS0_GYRO_FULLSCALE_2000)
|
||||
#define LSM6DS0_DEFAULT_GYRO_FULLSCALE 3
|
||||
#define LSM6DS0_DEFAULT_GYRO_FULLSCALE_FACTOR 70.0
|
||||
#endif
|
||||
|
||||
#if CONFIG_LSM6DS0_GYRO_SAMPLING_RATE == 0
|
||||
#define LSM6DS0_GYRO_SAMPLING_RATE_0
|
||||
#elif CONFIG_LSM6DS0_GYRO_SAMPLING_RATE == 15
|
||||
#define LSM6DS0_GYRO_SAMPLING_RATE_14_9
|
||||
#elif CONFIG_LSM6DS0_GYRO_SAMPLING_RATE == 60
|
||||
#define LSM6DS0_GYRO_SAMPLING_RATE_59_5
|
||||
#elif CONFIG_LSM6DS0_GYRO_SAMPLING_RATE == 119
|
||||
#define LSM6DS0_GYRO_SAMPLING_RATE_119
|
||||
#elif CONFIG_LSM6DS0_GYRO_SAMPLING_RATE == 238
|
||||
#define LSM6DS0_GYRO_SAMPLING_RATE_238
|
||||
#elif CONFIG_LSM6DS0_GYRO_SAMPLING_RATE == 476
|
||||
#define LSM6DS0_GYRO_SAMPLING_RATE_476
|
||||
#elif CONFIG_LSM6DS0_GYRO_SAMPLING_RATE == 952
|
||||
#define LSM6DS0_GYRO_SAMPLING_RATE_952
|
||||
#endif
|
||||
|
||||
#if defined(LSM6DS0_GYRO_SAMPLING_RATE_0)
|
||||
#define LSM6DS0_DEFAULT_GYRO_SAMPLING_RATE 0
|
||||
#elif defined(LSM6DS0_GYRO_SAMPLING_RATE_14_9)
|
||||
#define LSM6DS0_DEFAULT_GYRO_SAMPLING_RATE 1
|
||||
#elif defined(LSM6DS0_GYRO_SAMPLING_RATE_59_5)
|
||||
#define LSM6DS0_DEFAULT_GYRO_SAMPLING_RATE 2
|
||||
#elif defined(LSM6DS0_GYRO_SAMPLING_RATE_119)
|
||||
#define LSM6DS0_DEFAULT_GYRO_SAMPLING_RATE 3
|
||||
#elif defined(LSM6DS0_GYRO_SAMPLING_RATE_238)
|
||||
#define LSM6DS0_DEFAULT_GYRO_SAMPLING_RATE 4
|
||||
#elif defined(LSM6DS0_GYRO_SAMPLING_RATE_476)
|
||||
#define LSM6DS0_DEFAULT_GYRO_SAMPLING_RATE 5
|
||||
#elif defined(LSM6DS0_GYRO_SAMPLING_RATE_952)
|
||||
#define LSM6DS0_DEFAULT_GYRO_SAMPLING_RATE 6
|
||||
#endif
|
||||
|
||||
struct lsm6ds0_config {
|
||||
char *i2c_master_dev_name;
|
||||
uint16_t i2c_slave_addr;
|
||||
};
|
||||
|
||||
struct lsm6ds0_data {
|
||||
struct device *i2c_master;
|
||||
|
||||
#if defined(CONFIG_LSM6DS0_ACCEL_ENABLE_X_AXIS)
|
||||
int accel_sample_x;
|
||||
#endif
|
||||
#if defined(CONFIG_LSM6DS0_ACCEL_ENABLE_Y_AXIS)
|
||||
int accel_sample_y;
|
||||
#endif
|
||||
#if defined(CONFIG_LSM6DS0_ACCEL_ENABLE_Z_AXIS)
|
||||
int accel_sample_z;
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_LSM6DS0_GYRO_ENABLE_X_AXIS)
|
||||
int gyro_sample_x;
|
||||
#endif
|
||||
#if defined(CONFIG_LSM6DS0_GYRO_ENABLE_Y_AXIS)
|
||||
int gyro_sample_y;
|
||||
#endif
|
||||
#if defined(CONFIG_LSM6DS0_GYRO_ENABLE_Z_AXIS)
|
||||
int gyro_sample_z;
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_LSM6DS0_ENABLE_TEMP)
|
||||
int temp_sample;
|
||||
#endif
|
||||
};
|
||||
|
||||
#define SYS_LOG_DOMAIN "LSM6DS0"
|
||||
#define SYS_LOG_LEVEL CONFIG_LSM6DS0_SYS_LOG_LEVEL
|
||||
#include <misc/sys_log.h>
|
||||
#endif /* __SENSOR_LSM6DS0_H__ */
|
Loading…
Reference in a new issue