/* Bosch BMP388 pressure sensor
 *
 * Copyright (c) 2020 Facebook, Inc. and its affiliates
 *
 * SPDX-License-Identifier: Apache-2.0
 *
 * Datasheet:
 * https://www.bosch-sensortec.com/media/boschsensortec/downloads/datasheets/bst-bmp388-ds001.pdf
 */

#ifndef __BMP388_H
#define __BMP388_H

#include <zephyr/drivers/gpio.h>
#include <zephyr/drivers/spi.h>
#include <zephyr/sys/util.h>

/* registers */
#define BMP388_REG_CHIPID       0x00
#define BMP388_REG_ERR_REG      0x02
#define BMP388_REG_STATUS       0x03
#define BMP388_REG_DATA0        0x04
#define BMP388_REG_DATA1        0x05
#define BMP388_REG_DATA2        0x06
#define BMP388_REG_DATA3        0x07
#define BMP388_REG_DATA4        0x08
#define BMP388_REG_DATA5        0x09
#define BMP388_REG_SENSORTIME0  0x0C
#define BMP388_REG_SENSORTIME1  0x0D
#define BMP388_REG_SENSORTIME2  0x0E
#define BMP388_REG_SENSORTIME3  0x0F
#define BMP388_REG_EVENT        0x10
#define BMP388_REG_INT_STATUS   0x11
#define BMP388_REG_FIFO_LENGTH0 0x12
#define BMP388_REG_FIFO_LENGTH1 0x13
#define BMP388_REG_FIFO_DATA    0x14
#define BMP388_REG_FIFO_WTM0    0x15
#define BMP388_REG_FIFO_WTM1    0x16
#define BMP388_REG_FIFO_CONFIG1 0x17
#define BMP388_REG_FIFO_CONFIG2 0x18
#define BMP388_REG_INT_CTRL     0x19
#define BMP388_REG_IF_CONF      0x1A
#define BMP388_REG_PWR_CTRL     0x1B
#define BMP388_REG_OSR          0x1C
#define BMP388_REG_ODR          0x1D
#define BMP388_REG_CONFIG       0x1F
#define BMP388_REG_CALIB0       0x31
#define BMP388_REG_CMD          0x7E

/* BMP388_REG_CHIPID */
#define BMP388_CHIP_ID 0x50

/* BMP388_REG_STATUS */
#define BMP388_STATUS_FATAL_ERR  BIT(0)
#define BMP388_STATUS_CMD_ERR    BIT(1)
#define BMP388_STATUS_CONF_ERR   BIT(2)
#define BMP388_STATUS_CMD_RDY    BIT(4)
#define BMP388_STATUS_DRDY_PRESS BIT(5)
#define BMP388_STATUS_DRDY_TEMP  BIT(6)

/* BMP388_REG_INT_CTRL */
#define BMP388_INT_CTRL_DRDY_EN_POS  6
#define BMP388_INT_CTRL_DRDY_EN_MASK BIT(6)

/* BMP388_REG_PWR_CTRL */
#define BMP388_PWR_CTRL_PRESS_EN    BIT(0)
#define BMP388_PWR_CTRL_TEMP_EN     BIT(1)
#define BMP388_PWR_CTRL_MODE_POS    4
#define BMP388_PWR_CTRL_MODE_MASK   (0x03 << BMP388_PWR_CTRL_MODE_POS)
#define BMP388_PWR_CTRL_MODE_SLEEP  (0x00 << BMP388_PWR_CTRL_MODE_POS)
#define BMP388_PWR_CTRL_MODE_FORCED (0x01 << BMP388_PWR_CTRL_MODE_POS)
#define BMP388_PWR_CTRL_MODE_NORMAL (0x03 << BMP388_PWR_CTRL_MODE_POS)

/* BMP388_REG_OSR */
#define BMP388_ODR_POS  0
#define BMP388_ODR_MASK 0x1F

/* BMP388_REG_ODR */
#define BMP388_OSR_PRESSURE_POS  0
#define BMP388_OSR_PRESSURE_MASK (0x07 << BMP388_OSR_PRESSURE_POS)
#define BMP388_OSR_TEMP_POS      3
#define BMP388_OSR_TEMP_MASK     (0x07 << BMP388_OSR_TEMP_POS)

/* BMP388_REG_CONFIG */
#define BMP388_IIR_FILTER_POS  1
#define BMP388_IIR_FILTER_MASK (0x7 << BMP388_IIR_FILTER_POS)

/* BMP388_REG_CMD */
#define BMP388_CMD_FIFO_FLUSH 0xB0
#define BMP388_CMD_SOFT_RESET 0xB6

/* default PWR_CTRL settings */
#define BMP388_PWR_CTRL_ON	    \
	(BMP388_PWR_CTRL_PRESS_EN | \
	 BMP388_PWR_CTRL_TEMP_EN |  \
	 BMP388_PWR_CTRL_MODE_NORMAL)
#define BMP388_PWR_CTRL_OFF 0

#define BMP388_SAMPLE_BUFFER_SIZE (6)

struct bmp388_cal_data {
	uint16_t t1;
	uint16_t t2;
	int8_t t3;
	int16_t p1;
	int16_t p2;
	int8_t p3;
	int8_t p4;
	uint16_t p5;
	uint16_t p6;
	int8_t p7;
	int8_t p8;
	int16_t p9;
	int8_t p10;
	int8_t p11;
} __packed;

struct bmp388_sample {
	uint32_t press;
	uint32_t raw_temp;
	int64_t comp_temp;
};

struct bmp388_io_ops {
	int (*read)(const struct device *dev,
		    uint8_t reg,
		    void *data,
		    size_t length);
	int (*byte_read)(const struct device *dev,
			 uint8_t reg,
			 uint8_t *byte);
	int (*byte_write)(const struct device *dev,
			  uint8_t reg,
			  uint8_t byte);
	int (*reg_field_update)(const struct device *dev,
				uint8_t reg,
				uint8_t mask,
				uint8_t val);
};

struct bmp388_config {
	const struct device *bus;
	const struct bmp388_io_ops *ops;
	union {
#if DT_ANY_INST_ON_BUS_STATUS_OKAY(spi)
		struct spi_dt_spec spi_bus;
#endif
#if DT_ANY_INST_ON_BUS_STATUS_OKAY(i2c)
		uint16_t bus_addr;
#endif
	};

#ifdef CONFIG_BMP388_TRIGGER
	struct gpio_dt_spec gpio_int;
#endif

	uint8_t iir_filter;
};

struct bmp388_data {
	uint8_t odr;
	uint8_t osr_pressure;
	uint8_t osr_temp;
	struct bmp388_cal_data cal;

#if defined(CONFIG_BMP388_TRIGGER)
	struct gpio_callback gpio_cb;
#endif

	struct bmp388_sample sample;

#ifdef CONFIG_BMP388_TRIGGER_OWN_THREAD
	struct k_sem sem;
#endif

#ifdef CONFIG_BMP388_TRIGGER_GLOBAL_THREAD
	struct k_work work;
#endif

#if defined(CONFIG_BMP388_TRIGGER_GLOBAL_THREAD) || \
	defined(CONFIG_BMP388_TRIGGER_DIRECT)
	const struct device *dev;
#endif

#ifdef CONFIG_BMP388_TRIGGER
	sensor_trigger_handler_t handler_drdy;
#endif /* CONFIG_BMP388_TRIGGER */
};

int bmp388_trigger_mode_init(const struct device *dev);
int bmp388_trigger_set(const struct device *dev,
		       const struct sensor_trigger *trig,
		       sensor_trigger_handler_t handler);
int bmp388_reg_field_update(const struct device *dev,
			    uint8_t reg,
			    uint8_t mask,
			    uint8_t val);

#endif /* __BMP388_H */
