mirror of
https://github.com/zephyrproject-rtos/zephyr
synced 2025-08-23 21:45:42 +00:00
Now that device_api attribute is unmodified at runtime, as well as all the other attributes, it is possible to switch all device driver instance to be constant. A coccinelle rule is used for this: @r_const_dev_1 disable optional_qualifier @ @@ -struct device * +const struct device * @r_const_dev_2 disable optional_qualifier @ @@ -struct device * const +const struct device * Fixes #27399 Signed-off-by: Tomasz Bursztyka <tomasz.bursztyka@linux.intel.com>
128 lines
2.9 KiB
C
128 lines
2.9 KiB
C
/* Würth Elektronic WSEN-ITDS 3-axis Accel sensor driver
|
|
*
|
|
* Copyright (c) 2020 Linumiz
|
|
*
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
|
|
#ifndef ZEPHYR_DRIVERS_SENSOR_ITDS_H_
|
|
#define ZEPHYR_DRIVERS_SENSOR_ITDS_H_
|
|
|
|
#include <drivers/gpio.h>
|
|
#include <drivers/i2c.h>
|
|
#include <sys/util.h>
|
|
|
|
/* registers */
|
|
#define ITDS_REG_TEMP_L 0x0d
|
|
#define ITDS_REG_DEV_ID 0x0f
|
|
#define ITDS_REG_CTRL1 0x20
|
|
#define ITDS_REG_CTRL2 0x21
|
|
#define ITDS_REG_CTRL3 0x22
|
|
#define ITDS_REG_CTRL4 0x23
|
|
#define ITDS_REG_CTRL5 0x24
|
|
#define ITDS_REG_CTRL6 0x25
|
|
#define ITDS_REG_STATUS 0x27
|
|
#define ITDS_REG_X_OUT_L 0x28
|
|
#define ITDS_REG_Y_OUT_L 0x2a
|
|
#define ITDS_REG_Z_OUT_L 0x2c
|
|
#define ITDS_REG_FIFO_CTRL 0x2e
|
|
#define ITDS_REG_FIFO_SAMPLES 0x2f
|
|
#define ITDS_REG_STATUS_DETECT 0x37
|
|
#define ITDS_REG_WAKEUP_EVENT 0x38
|
|
#define ITDS_REG_CTRL7 0x3f
|
|
|
|
/* bitfields */
|
|
#define ITDS_MASK_SCALE GENMASK(5, 4)
|
|
#define ITDS_MASK_BDU_INC_ADD GENMASK(3, 2)
|
|
#define ITDS_MASK_FIFOTH GENMASK(4, 0)
|
|
#define ITDS_MASK_FIFOMODE GENMASK(7, 5)
|
|
#define ITDS_MASK_MODE GENMASK(3, 0)
|
|
#define ITDS_MASK_SAMPLES_COUNT GENMASK(5, 0)
|
|
#define ITDS_MASK_ODR GENMASK(7, 4)
|
|
#define ITDS_MASK_INT_DRDY BIT(0)
|
|
#define ITDS_MASK_INT_FIFOTH BIT(1)
|
|
#define ITDS_MASK_INT_EN BIT(5)
|
|
|
|
#define ITDS_EVENT_DRDY BIT(0)
|
|
#define ITDS_EVENT_DRDY_T BIT(6)
|
|
#define ITDS_EVENT_FIFO_TH BIT(7)
|
|
#define ITDS_FIFO_MODE_BYPASS 0
|
|
#define ITDS_FIFO_MODE_FIFO BIT(5)
|
|
#define ITDS_DEVICE_ID 0x44
|
|
#define ITDS_ACCL_FIFO_SIZE 32
|
|
#define ITDS_TEMP_OFFSET 25
|
|
|
|
enum operation_mode {
|
|
ITDS_OP_MODE_LOW_POWER = BIT(0),
|
|
ITDS_OP_MODE_NORMAL = BIT(1),
|
|
ITDS_OP_MODE_HIGH_PERF = BIT(2),
|
|
};
|
|
|
|
enum itds_accel_range_const {
|
|
ITDS_ACCL_RANGE_2G,
|
|
ITDS_ACCL_RANGE_4G,
|
|
ITDS_ACCL_RANGE_8G,
|
|
ITDS_ACCL_RANGE_16G,
|
|
ITDS_ACCL_RANGE_END
|
|
};
|
|
|
|
enum itds_odr_const {
|
|
ITDS_ODR_0,
|
|
ITDS_ODR_1_6,
|
|
ITDS_ODR_12_5,
|
|
ITDS_ODR_25,
|
|
ITDS_ODR_50,
|
|
ITDS_ODR_100,
|
|
ITDS_ODR_200,
|
|
ITDS_ODR_400,
|
|
ITDS_ODR_800,
|
|
ITDS_ODR_1600,
|
|
ITDS_ODR_MAX
|
|
};
|
|
|
|
struct itds_odr {
|
|
uint16_t freq;
|
|
uint16_t mfreq;
|
|
};
|
|
|
|
struct itds_accel_range {
|
|
uint16_t range;
|
|
uint8_t reg_val;
|
|
};
|
|
|
|
struct itds_device_config {
|
|
const char *bus_name;
|
|
uint16_t i2c_addr;
|
|
const char *gpio_port;
|
|
gpio_pin_t int_pin;
|
|
gpio_dt_flags_t int_flags;
|
|
int def_odr;
|
|
int def_op_mode;
|
|
};
|
|
|
|
#define ITDS_SAMPLE_SIZE 3
|
|
struct itds_device_data {
|
|
const struct device *i2c;
|
|
#ifdef CONFIG_ITDS_TRIGGER
|
|
const struct device *gpio;
|
|
struct gpio_callback gpio_cb;
|
|
struct k_work work;
|
|
#endif
|
|
int16_t samples[ITDS_SAMPLE_SIZE];
|
|
int16_t temprature;
|
|
uint16_t scale;
|
|
enum operation_mode op_mode;
|
|
const struct device *dev;
|
|
|
|
#ifdef CONFIG_ITDS_TRIGGER
|
|
sensor_trigger_handler_t handler_drdy;
|
|
#endif /* CONFIG_ITDS_TRIGGER */
|
|
};
|
|
|
|
int itds_trigger_mode_init(const struct device *dev);
|
|
int itds_trigger_set(const struct device *dev,
|
|
const struct sensor_trigger *trig,
|
|
sensor_trigger_handler_t handler);
|
|
|
|
#endif /* ZEPHYR_DRIVERS_SENSOR_ITDS_H_*/
|