blob: ddb6c8246eb02da7e20405e0fa95dfdf226f5261 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
|
/* Copyright 2012 The ChromiumOS Authors
* 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 "adc_chip.h"
#include "common.h"
#define ADC_READ_ERROR -1 /* Value returned by adc_read_channel() on error */
#ifdef CONFIG_ZEPHYR
#include <zephyr_adc.h>
#endif /* CONFIG_ZEPHYR */
/*
* Boards must provide this list of ADC channel definitions. This must match
* the enum adc_channel list provided by the board.
*/
#ifndef CONFIG_ADC_CHANNELS_RUNTIME_CONFIG
extern const struct adc_t adc_channels[];
#else
extern struct adc_t adc_channels[];
#endif
/**
* ADC initial.
*/
#ifdef CONFIG_KEYBOARD_SCAN_ADC
void adc_init(void);
#endif
/*
* 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);
/**
* 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 */
|