mirror of
https://github.com/Telecominfraproject/OpenCellular.git
synced 2025-12-28 02:35:28 +00:00
Add support for continuously writing ADC samples to a circular buffer. CONFIG_ADC_PROFILE_FAST_CONTINUOUS should be defined and an appropriate sized buffer must be passed to adc_read_all_channels(). BUG=chromium:569994 TEST=Manual on snoball. Verify 'adc' continues to function (single mode). With pending commit, verify that continuous conversion interrupt is called at appropriate frequency and values look consistent. BRANCH=None Signed-off-by: Shawn Nematbakhsh <shawnn@chromium.org> Change-Id: I025825d72a698f8f1f4f95a89477df791bd5e67e Reviewed-on: https://chromium-review.googlesource.com/318505 Commit-Ready: Shawn N <shawnn@chromium.org> Tested-by: Shawn N <shawnn@chromium.org> Reviewed-by: Shawn N <shawnn@chromium.org>
76 lines
2.0 KiB
C
76 lines
2.0 KiB
C
/* Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
|
|
* Use of this source code is governed by a BSD-style license that can be
|
|
* found in the LICENSE file.
|
|
*/
|
|
|
|
/* ADC interface for Chrome EC */
|
|
|
|
#ifndef __CROS_EC_ADC_H
|
|
#define __CROS_EC_ADC_H
|
|
|
|
#include "common.h"
|
|
|
|
#define HOOK_PRIO_INIT_ADC HOOK_PRIO_DEFAULT /* ADC priority */
|
|
|
|
#define ADC_READ_ERROR -1 /* Value returned by adc_read_channel() on error */
|
|
|
|
/*
|
|
* Boards which use the ADC interface must provide enum adc_channel in the
|
|
* board.h file. See chip/$CHIP/adc_chip.h for additional chip-specific
|
|
* requirements.
|
|
*/
|
|
|
|
/**
|
|
* Read an ADC channel.
|
|
*
|
|
* @param ch Channel to read
|
|
*
|
|
* @return The scaled ADC value, or ADC_READ_ERROR if error.
|
|
*/
|
|
int adc_read_channel(enum adc_channel ch);
|
|
|
|
/**
|
|
* Read all ADC channels.
|
|
*
|
|
* @param data Destination array for channel data; must be
|
|
* ADC_CH_COUNT elements long for single-read profile,
|
|
* or sized according to dma_buffer_size in
|
|
* continuous profiles.
|
|
*
|
|
* @return EC_SUCCESS, or non-zero on error.
|
|
*/
|
|
int adc_read_all_channels(int *data);
|
|
|
|
/**
|
|
* Enable ADC watchdog. Note that interrupts might come in repeatedly very
|
|
* quickly when ADC output goes out of the accepted range.
|
|
*
|
|
* @param ain_id The AIN to be watched by the watchdog.
|
|
* @param high The high threshold that the watchdog would trigger
|
|
* an interrupt when exceeded.
|
|
* @param low The low threshold.
|
|
*
|
|
* @return EC_SUCCESS, or non-zero if any error.
|
|
*/
|
|
int adc_enable_watchdog(int ain_id, int high, int low);
|
|
|
|
/**
|
|
* Disable ADC watchdog.
|
|
*
|
|
* @return EC_SUCCESS, or non-zero if any error.
|
|
*/
|
|
int adc_disable_watchdog(void);
|
|
|
|
/**
|
|
* Set the delay between ADC watchdog samples. This can be used as a trade-off
|
|
* of power consumption and performance.
|
|
*
|
|
* @param delay_ms The delay in milliseconds between two ADC watchdog
|
|
* samples.
|
|
*
|
|
* @return EC_SUCCESS, or non-zero if any error or not supported.
|
|
*/
|
|
int adc_set_watchdog_delay(int delay_ms);
|
|
|
|
#endif /* __CROS_EC_ADC_H */
|