summaryrefslogtreecommitdiff
path: root/chip/npcx/adc_chip.h
diff options
context:
space:
mode:
Diffstat (limited to 'chip/npcx/adc_chip.h')
-rw-r--r--chip/npcx/adc_chip.h60
1 files changed, 60 insertions, 0 deletions
diff --git a/chip/npcx/adc_chip.h b/chip/npcx/adc_chip.h
index 16c431d779..74f18c66d6 100644
--- a/chip/npcx/adc_chip.h
+++ b/chip/npcx/adc_chip.h
@@ -8,6 +8,8 @@
#ifndef __CROS_EC_ADC_CHIP_H
#define __CROS_EC_ADC_CHIP_H
+#include "adc.h"
+
/* Minimum and maximum values returned by raw ADC read. */
#define ADC_READ_MIN 0
#define ADC_READ_MAX 1023
@@ -45,4 +47,62 @@ struct adc_t {
*/
extern const struct adc_t adc_channels[];
+/*
+ * Boards may configure a ADC channel for use with thershold interrupts. For
+ * dual threshold detection, set both the thresh_assert and thresh_deassert
+ * member variables. The threshold levels may be set from 0 to ADC_MAX_VOLT
+ * inclusive.
+ */
+struct npcx_adc_thresh_t {
+ /* The ADC channel to monitor to generate threshold interrupts. */
+ enum adc_channel adc_ch;
+
+ /* Called when the interrupt fires */
+ void (*adc_thresh_cb)(void);
+
+ /* If set, threshold event is asserted when <= threshold level */
+ int lower_or_higher;
+
+ /*
+ * Desired level in mV to assert. Set for both single and dual
+ * thresholds.
+ */
+ int thresh_assert;
+
+ /* Desired level in mV to de-assert. Set to -1 for single thresholds. */
+ int thresh_deassert;
+};
+
+/**
+ * Boards should call this function to register their threshold interrupt with
+ * one of the 3 threshold detectors. threshold_idx is 1-based.
+ *
+ * @param threshold_idx - 1-based threshold detector index (max 3)
+ * @param thresh_cfg - Pointer to ADC threshold interrupt configuration
+ */
+void npcx_adc_register_thresh_irq(int threshold_idx,
+ const struct npcx_adc_thresh_t *thresh_cfg);
+
+/**
+ * Configure an ADC channel for repetitive conversion.
+ *
+ * If you are using ADC threshold interrupts and the need is timing critical,
+ * you will want to enable this on the ADC channels you have configured for
+ * threshold interrupts.
+ *
+ * NOTE: Enabling this will prevent the EC from entering deep sleep and will
+ * increase power consumption!
+ *
+ * @param input_ch - The ADC channel you wish to configure
+ * @param enable - 1 to enable, 0 to disable
+ */
+void npcx_set_adc_repetitive(enum npcx_adc_input_channel input_ch, int enable);
+
+/**
+ * Enable/Disable ADC threshold detector interrupt.
+ *
+ * @param threshold_idx - 1-based threshold detector index
+ * @param enable - 1 to enable, 0 to disable
+ */
+void npcx_adc_thresh_int_enable(int threshold_idx, int enable);
#endif /* __CROS_EC_ADC_CHIP_H */