summaryrefslogtreecommitdiff
path: root/chip/npcx/adc_chip.h
diff options
context:
space:
mode:
authorAseda Aboagye <aaboagye@google.com>2020-01-29 23:19:43 -0800
committerCommit Bot <commit-bot@chromium.org>2020-02-05 08:28:42 +0000
commit5d4a91818b08cee77fef812ea5acf9d31e110f27 (patch)
tree5bd92408f2385c456b83085560f9a969446cca3b /chip/npcx/adc_chip.h
parentc7313be9af31a4a2cd833b2e2440404aab52c04e (diff)
downloadchrome-ec-5d4a91818b08cee77fef812ea5acf9d31e110f27.tar.gz
npcx: Add support for ADC threshold interrupts
The Nuvoton NPCX EC series support a threshold event detector for the ADC channels. There are three threshold event detectors and they can be mapped to any ADC channel. The block compares the measured voltage input to either a programmable threshold or a pair of thresholds and generates an interrupt if the measured voltage is above or below the thresholds. This commit adds support for this feature. A new structure is created, npcx_adc_thresh_t which allows a board to define the ADC channel that should be monitored, the assertion and deassertion thresholds, a callback that can be run when the interrupt fires and a flag for whether or not the interrupt should fire if the measured value is above or below the threshold. BUG=b:148169171 BRANCH=None TEST=Enable on waddledoo, verify that the ADC dual threshold interrupt functionality works. Change-Id: I5a3e517207a71b1298865fe36b80cc6298567e9e Signed-off-by: Aseda Aboagye <aaboagye@google.com> Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2030204 Tested-by: Aseda Aboagye <aaboagye@chromium.org> Reviewed-by: Diana Z <dzigterman@chromium.org> Commit-Queue: Aseda Aboagye <aaboagye@chromium.org>
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 */