summaryrefslogtreecommitdiff
path: root/chip/lm4/adc.c
diff options
context:
space:
mode:
Diffstat (limited to 'chip/lm4/adc.c')
-rw-r--r--chip/lm4/adc.c16
1 files changed, 15 insertions, 1 deletions
diff --git a/chip/lm4/adc.c b/chip/lm4/adc.c
index 365a2776c9..b3e24809a8 100644
--- a/chip/lm4/adc.c
+++ b/chip/lm4/adc.c
@@ -120,7 +120,17 @@ static void lm4_adc_configure(const struct adc_t *adc)
int adc_read_channel(enum adc_channel ch)
{
const struct adc_t *adc = adc_channels + ch;
- int rv = lm4_adc_flush_and_read(adc->sequencer);
+ int rv;
+
+ /* Enable ADC0 module in run and sleep modes. */
+ clock_enable_peripheral(CGC_OFFSET_ADC, 0x1,
+ CGC_MODE_RUN | CGC_MODE_SLEEP);
+
+ rv = lm4_adc_flush_and_read(adc->sequencer);
+
+ /* Disable ADC0 module to conserve power. */
+ clock_disable_peripheral(CGC_OFFSET_ADC, 0x1,
+ CGC_MODE_RUN | CGC_MODE_SLEEP);
if (rv == ADC_READ_ERROR)
return ADC_READ_ERROR;
@@ -236,5 +246,9 @@ static void adc_init(void)
/* Initialize ADC sequencer */
for (i = 0; i < ADC_CH_COUNT; ++i)
lm4_adc_configure(adc_channels + i);
+
+ /* Disable ADC0 module until it is needed to conserve power. */
+ clock_disable_peripheral(CGC_OFFSET_ADC, 0x1,
+ CGC_MODE_RUN | CGC_MODE_SLEEP);
}
DECLARE_HOOK(HOOK_INIT, adc_init, HOOK_PRIO_DEFAULT);