104 lines
3.1 KiB
C
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_ */
|