diff options
author | Aseda Aboagye <aaboagye@google.com> | 2020-01-29 23:19:43 -0800 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2020-02-05 08:28:42 +0000 |
commit | 5d4a91818b08cee77fef812ea5acf9d31e110f27 (patch) | |
tree | 5bd92408f2385c456b83085560f9a969446cca3b /chip/npcx/adc_chip.h | |
parent | c7313be9af31a4a2cd833b2e2440404aab52c04e (diff) | |
download | chrome-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.h | 60 |
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 */ |