blob: 0d2b3954a44e73ab1b051d943af43361a8ae643a [file] [log] [blame]
/*
* Copyright (c) 2022 Intel Corporation
*
* SPDX-License-Identifier: Apache-2.0
*/
#ifndef _ADC_NPCX_THRESHOLD_H_
#define _ADC_NPCX_THRESHOLD_H_
#include <zephyr/device.h>
enum adc_npcx_threshold_param_l_h {
ADC_NPCX_THRESHOLD_PARAM_L_H_HIGHER,
ADC_NPCX_THRESHOLD_PARAM_L_H_LOWER,
};
enum adc_npcx_threshold_param_type {
/* Selects ADC channel to be used for measurement */
ADC_NPCX_THRESHOLD_PARAM_CHNSEL,
/* Sets relation between measured value and assetion threshold value.*/
ADC_NPCX_THRESHOLD_PARAM_L_H,
/* Sets the threshol value to which measured data is compared. */
ADC_NPCX_THRESHOLD_PARAM_THVAL,
/* Sets worker queue thread to be notified */
ADC_NPCX_THRESHOLD_PARAM_WORK,
ADC_NPCX_THRESHOLD_PARAM_MAX,
};
struct adc_npcx_threshold_param {
/* Threshold ocntrol parameter */
enum adc_npcx_threshold_param_type type;
/* Parameter value */
uint32_t val;
};
/**
* @brief Convert input value in millivolts to corresponding threshold register
* value.
*
* @note This function is available only if @kconfig{CONFIG_ADC_CMP_NPCX}
* is selected.
*
* @param val_mv Input value in millivolts to be converted.
* @param thrval Pointer of variable to hold the result of conversion.
*
* @returns 0 on success, negative result if input cannot be converted due to
* overflow.
*/
int adc_npcx_threshold_mv_to_thrval(uint32_t val_mv, uint32_t *thrval);
/**
* @brief Set ADC threshold parameter.
*
* @note This function is available only if @kconfig{CONFIG_ADC_CMP_NPCX}
* is selected.
*
* @param dev Pointer to the device structure for the driver instance.
* @param th_sel Threshold selected.
* @param param Pointer of parameter structure.
* See struct adc_npcx_threshold_param for supported
* parameters.
*
* @returns 0 on success, negative error code otherwise.
*/
int adc_npcx_threshold_ctrl_set_param(const struct device *dev,
const uint8_t th_sel,
const struct adc_npcx_threshold_param
*param);
/**
* @brief Enables/Disables ADC threshold interruption.
*
* @note This function is available only if @kconfig{CONFIG_ADC_CMP_NPCX}
* is selected.
*
* @param dev Pointer to the device structure for the driver instance.
* @param th_sel Threshold selected.
* @param enable Enable or disables threshold interruption.
*
* @returns 0 on success, negative error code otherwise.
* all parameters must be configure prior enabling threshold
* interruption, otherwhise error will be returned.
*/
int adc_npcx_threshold_ctrl_enable(const struct device *dev, uint8_t th_sel,
const bool enable);
#endif /*_ADC_NPCX_THRESHOLD_H_ */