zephyr/drivers/sensor/adt7420/adt7420.h

104 lines
3.1 KiB
C

/*
* 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_ */