/* ist8310.h - header file for IST8310 Geomagnetic sensor driver */ /* * Copyright (c) 2023 NXP Semiconductors * Copyright (c) 2023 Cognipilot Foundation * * SPDX-License-Identifier: Apache-2.0 */ #ifndef ZEPHYR_DRIVERS_SENSOR_IST8310_IST8310_H_ #define ZEPHYR_DRIVERS_SENSOR_IST8310_IST8310_H_ #include #include #include #include #include #include #include #include #include #include #include #include #define DT_DRV_COMPAT isentek_ist8310 #define IST8310_BUS_I2C DT_ANY_INST_ON_BUS_STATUS_OKAY(i2c) union ist8310_bus { struct i2c_dt_spec i2c; }; typedef int (*ist8310_bus_check_fn)(const union ist8310_bus *bus); typedef int (*ist8310_reg_read_fn)(const union ist8310_bus *bus, uint8_t start, uint8_t *buf, int size); typedef int (*ist8310_reg_write_fn)(const union ist8310_bus *bus, uint8_t reg, uint8_t val); struct ist8310_bus_io { ist8310_bus_check_fn check; ist8310_reg_read_fn read; ist8310_reg_write_fn write; }; extern const struct ist8310_bus_io ist8310_bus_io_i2c; #define IST8310_WHO_AM_I 0x00 #define IST8310_WHO_AM_I_VALUE 0x10 #define IST8310_STATUS_REGISTER1 0x02 #define STAT1_DRDY 0x01 #define STAT1_DRO 0x02 #define IST8310_OUTPUT_VALUE_X_L 0x03 #define IST8310_OUTPUT_VALUE_X_H 0x04 #define IST8310_OUTPUT_VALUE_Y_L 0x05 #define IST8310_OUTPUT_VALUE_Y_H 0x06 #define IST8310_OUTPUT_VALUE_Z_L 0x07 #define IST8310_OUTPUT_VALUE_Z_H 0x08 #define IST8310_CONTROL_REGISTER1 0x0A #define CTRL1_MODE_SINGLE 0x1 #define IST8310_CONTROL_REGISTER2 0x0B #define CTRL2_SRST 0x01 #define IST8310_OUTPUT_VALUE_T_L 0x1C #define IST8310_OUTPUT_VALUE_T_H 0x1D #define IST8310_CONTROL_REGISTER3 0x0d #define Z_16BIT 0x40 #define Y_16BIT 0x20 #define X_16BIT 0x10 #define IST8310_AVG_REGISTER 0x41 #define Y_16TIMES_SET 0x20 #define Y_16TIMES_CLEAR 0x18 #define XZ_16TIMES_SET 0x04 #define XZ_16TIMES_CLEAR 0x03 #define IST8310_PDCNTL_REGISTER 0x42 #define PULSE_NORMAL 0xC0 struct ist8310_config { union ist8310_bus bus; const struct ist8310_bus_io *bus_io; }; struct ist8310_data { struct k_sem sem; int16_t sample_x, sample_y, sample_z; }; int ist8310_reg_update_byte(const struct device *dev, uint8_t reg, uint8_t mask, uint8_t value); #endif /* __SENSOR_IST8310_H__ */