blob: 289b51d84a7ce76f803518bcdf4ddeb754942c85 [file] [log] [blame]
/* 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 <zephyr/types.h>
#include <zephyr/device.h>
#include <zephyr/devicetree.h>
#include <zephyr/drivers/spi.h>
#include <zephyr/drivers/i2c.h>
#include <zephyr/sys/util.h>
#include <zephyr/kernel.h>
#include <zephyr/device.h>
#include <zephyr/drivers/sensor.h>
#include <zephyr/sys/__assert.h>
#include <zephyr/drivers/gpio.h>
#include <stdint.h>
#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__ */