/*
 * 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 <device.h>
#include <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 {
	const struct device *i2c;
	int16_t sample;
#ifdef CONFIG_ADT7420_TRIGGER
	const struct device *gpio;
	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 {
	const char *i2c_port;
	uint16_t i2c_addr;
#ifdef CONFIG_ADT7420_TRIGGER
	gpio_pin_t int_pin;
	gpio_flags_t int_flags;
	const char *int_name;
#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_ */
