/*
 * Copyright (c) 2018 Analog Devices Inc.
 *
 * SPDX-License-Identifier: Apache-2.0
 */

#ifndef ZEPHYR_DRIVERS_SENSOR_ADT7420_ADT7420_H_
#define ZEPHYR_DRIVERS_SENSOR_ADT7420_ADT7420_H_

#include <zephyr/types.h>
#include <zephyr/device.h>
#include <zephyr/drivers/gpio.h>

/* ADT7420 registers */
#define ADT7420_REG_TEMP_MSB		0x00 /* Temperature value MSB */
#define ADT7420_REG_TEMP_LSB		0x01 /* Temperature value LSB */
#define ADT7420_REG_STATUS		0x02 /* Status */
#define ADT7420_REG_CONFIG		0x03 /* Configuration */
#define ADT7420_REG_T_HIGH_MSB		0x04 /* Temperature HIGH setpoint MSB */
#define ADT7420_REG_T_HIGH_LSB		0x05 /* Temperature HIGH setpoint LSB */
#define ADT7420_REG_T_LOW_MSB		0x06 /* Temperature LOW setpoint MSB */
#define ADT7420_REG_T_LOW_LSB		0x07 /* Temperature LOW setpoint LSB */
#define ADT7420_REG_T_CRIT_MSB		0x08 /* Temperature CRIT setpoint MSB */
#define ADT7420_REG_T_CRIT_LSB		0x09 /* Temperature CRIT setpoint LSB */
#define ADT7420_REG_HIST		0x0A /* Temperature HYST setpoint */
#define ADT7420_REG_ID			0x0B /* ID */
#define ADT7420_REG_RESET		0x2F /* Software reset */

/* ADT7420_REG_STATUS definition */
#define ADT7420_STATUS_T_LOW		BIT(4)
#define ADT7420_STATUS_T_HIGH		BIT(5)
#define ADT7420_STATUS_T_CRIT		BIT(6)
#define ADT7420_STATUS_RDY		BIT(7)

/* ADT7420_REG_CONFIG definition */
#define ADT7420_CONFIG_FAULT_QUEUE(x)	((x) & 0x3)
#define ADT7420_CONFIG_CT_POL		BIT(2)
#define ADT7420_CONFIG_INT_POL		BIT(3)
#define ADT7420_CONFIG_INT_CT_MODE	BIT(4)
#define ADT7420_CONFIG_OP_MODE(x)	(((x) & 0x3) << 5)
#define ADT7420_CONFIG_RESOLUTION	BIT(7)

/* ADT7420_CONFIG_FAULT_QUEUE(x) options */
#define ADT7420_FAULT_QUEUE_1_FAULT	0
#define ADT7420_FAULT_QUEUE_2_FAULTS	1
#define ADT7420_FAULT_QUEUE_3_FAULTS	2
#define ADT7420_FAULT_QUEUE_4_FAULTS	3

/* ADT7420_CONFIG_OP_MODE(x) options */
#define ADT7420_OP_MODE_CONT_CONV	0
#define ADT7420_OP_MODE_ONE_SHOT	1
#define ADT7420_OP_MODE_1_SPS		2
#define ADT7420_OP_MODE_SHUTDOWN	3

/* ADT7420 default ID */
#define ADT7420_DEFAULT_ID		0xCB

/* scale in micro degrees Celsius */
#define ADT7420_TEMP_SCALE		15625

struct adt7420_data {
	int16_t sample;
#ifdef CONFIG_ADT7420_TRIGGER
	struct gpio_callback gpio_cb;

	sensor_trigger_handler_t th_handler;
	struct sensor_trigger th_trigger;

	const struct device *dev;

#if defined(CONFIG_ADT7420_TRIGGER_OWN_THREAD)
	K_KERNEL_STACK_MEMBER(thread_stack, CONFIG_ADT7420_THREAD_STACK_SIZE);
	struct k_sem gpio_sem;
	struct k_thread thread;
#elif defined(CONFIG_ADT7420_TRIGGER_GLOBAL_THREAD)
	struct k_work work;
#endif
#endif /* CONFIG_ADT7420_TRIGGER */

};

struct adt7420_dev_config {
	struct i2c_dt_spec i2c;
#ifdef CONFIG_ADT7420_TRIGGER
	struct gpio_dt_spec int_gpio;
#endif
};

#ifdef CONFIG_ADT7420_TRIGGER
int adt7420_trigger_set(const struct device *dev,
			const struct sensor_trigger *trig,
			sensor_trigger_handler_t handler);

int adt7420_init_interrupt(const struct device *dev);
#endif /* CONFIG_ADT7420_TRIGGER */


#endif /* ZEPHYR_DRIVERS_SENSOR_ADT7420_ADT7420_H_ */
