diff options
author | Vic (Chun-Ju) Yang <victoryang@chromium.org> | 2013-12-19 14:44:24 +0800 |
---|---|---|
committer | chrome-internal-fetch <chrome-internal-fetch@google.com> | 2013-12-20 05:07:58 +0000 |
commit | c455d255076f50b217f35115f2591bc5ce5f0c69 (patch) | |
tree | 37706a3e649cd9dd1bc23110b5b4ed21f6149cb1 | |
parent | 9a11fab20e1e55fadcdcb748db02b84f938a68d1 (diff) | |
download | chrome-ec-c455d255076f50b217f35115f2591bc5ce5f0c69.tar.gz |
Move ADC console command to common
We have three duplicated ADC read console command, and we are about to
have the fourth. Let's consolidate them to a single implementation in
common/.
Note that we have to add a simple implementation of
adc_read_all_channels() for LM4.
BUG=chrome-os-partner:18343
TEST=Build all boards
TEST=Read single channel
TEST=Read all channels
BRANCH=None
Change-Id: I079c0b33ab6b81a188f309cf99875eb02e9d78a4
Signed-off-by: Vic (Chun-Ju) Yang <victoryang@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/180831
-rw-r--r-- | chip/lm4/adc.c | 27 | ||||
-rw-r--r-- | chip/stm32/adc-stm32f.c | 18 | ||||
-rw-r--r-- | chip/stm32/adc-stm32l.c | 18 | ||||
-rw-r--r-- | common/adc.c | 57 | ||||
-rw-r--r-- | common/build.mk | 1 |
5 files changed, 70 insertions, 51 deletions
diff --git a/chip/lm4/adc.c b/chip/lm4/adc.c index 1e4fdf16c5..19548b12bd 100644 --- a/chip/lm4/adc.c +++ b/chip/lm4/adc.c @@ -162,6 +162,18 @@ int adc_read_channel(enum adc_channel ch) return rv * adc->factor_mul / adc->factor_div + adc->shift; } +int adc_read_all_channels(int *data) +{ + int i; + + for (i = 0; i < ADC_CH_COUNT; ++i) { + data[i] = adc_read_channel(i); + if (data[i] == ADC_READ_ERROR) + return EC_ERROR_UNKNOWN; + } + return EC_SUCCESS; +} + /*****************************************************************************/ /* Interrupt handlers */ @@ -206,21 +218,6 @@ DECLARE_CONSOLE_COMMAND(ectemp, command_ectemp, NULL); #endif -static int command_adc(int argc, char **argv) -{ - int i; - - for (i = 0; i < ADC_CH_COUNT; ++i) - ccprintf("ADC channel \"%s\" = %d\n", - adc_channels[i].name, adc_read_channel(i)); - - return EC_SUCCESS; -} -DECLARE_CONSOLE_COMMAND(adc, command_adc, - NULL, - "Print ADC channels", - NULL); - /*****************************************************************************/ /* Initialization */ diff --git a/chip/stm32/adc-stm32f.c b/chip/stm32/adc-stm32f.c index 22d909a339..e2053e331b 100644 --- a/chip/stm32/adc-stm32f.c +++ b/chip/stm32/adc-stm32f.c @@ -289,21 +289,3 @@ static void adc_init(void) STM32_ADC_SMPR2 = 0x12492492; } DECLARE_HOOK(HOOK_INIT, adc_init, HOOK_PRIO_DEFAULT); - -static int command_adc(int argc, char **argv) -{ - int i; - int data[ADC_CH_COUNT]; - - if (adc_read_all_channels(data)) - return EC_ERROR_UNKNOWN; - for (i = 0; i < ADC_CH_COUNT; ++i) - ccprintf("ADC channel \"%s\" = %d\n", - adc_channels[i].name, data[i]); - - return EC_SUCCESS; -} -DECLARE_CONSOLE_COMMAND(adc, command_adc, - NULL, - "Print ADC channels", - NULL); diff --git a/chip/stm32/adc-stm32l.c b/chip/stm32/adc-stm32l.c index 75b640fde1..3e8edde278 100644 --- a/chip/stm32/adc-stm32l.c +++ b/chip/stm32/adc-stm32l.c @@ -211,21 +211,3 @@ exit_all_channels: return ret; } - -static int command_adc(int argc, char **argv) -{ - int i; - int data[ADC_CH_COUNT]; - - if (adc_read_all_channels(data)) - return EC_ERROR_UNKNOWN; - for (i = 0; i < ADC_CH_COUNT; ++i) - ccprintf("ADC channel \"%s\" = %d\n", - adc_channels[i].name, data[i]); - - return EC_SUCCESS; -} -DECLARE_CONSOLE_COMMAND(adc, command_adc, - NULL, - "Print ADC channels", - NULL); diff --git a/common/adc.c b/common/adc.c new file mode 100644 index 0000000000..696b017788 --- /dev/null +++ b/common/adc.c @@ -0,0 +1,57 @@ +/* Copyright (c) 2013 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 module for Chrome EC */ + +#include "adc.h" +#include "adc_chip.h" +#include "common.h" +#include "console.h" +#include "util.h" + +static enum adc_channel find_adc_channel_by_name(const char *name) +{ + const struct adc_t *ch = adc_channels; + int i; + + if (!name || !*name) + return ADC_CH_COUNT; + + for (i = 0; i < ADC_CH_COUNT; i++, ch++) { + if (!strcasecmp(name, ch->name)) + return i; + } + + return ADC_CH_COUNT; +} + +static int command_adc(int argc, char **argv) +{ + int i, v; + int data[ADC_CH_COUNT]; + + /* If a channel is specified, read only that one */ + if (argc == 2) { + i = find_adc_channel_by_name(argv[1]); + if (i == ADC_CH_COUNT) + return EC_ERROR_PARAM1; + v = adc_read_channel(i); + if (v == ADC_READ_ERROR) + return EC_ERROR_UNKNOWN; + ccprintf(" %s = %d\n", adc_channels[i].name, v); + return EC_SUCCESS; + } else { + /* Otherwise print them all */ + if (adc_read_all_channels(data)) + return EC_ERROR_UNKNOWN; + for (i = 0; i < ADC_CH_COUNT; ++i) + ccprintf(" %s = %d\n", adc_channels[i].name, data[i]); + return EC_SUCCESS; + } +} +DECLARE_CONSOLE_COMMAND(adc, command_adc, + "[name]", + "Print ADC channel(s)", + NULL); diff --git a/common/build.mk b/common/build.mk index 9e4b6c7fa3..b1ac341891 100644 --- a/common/build.mk +++ b/common/build.mk @@ -10,6 +10,7 @@ common-y=main.o util.o console_output.o uart_buffering.o common-y+=memory_commands.o shared_mem.o system.o hooks.o common-y+=gpio.o version.o printf.o queue.o +common-$(CONFIG_ADC)+=adc.o common-$(CONFIG_ALS)+=als.o common-$(CONFIG_AP_HANG_DETECT)+=ap_hang_detect.o common-$(CONFIG_BACKLIGHT_LID)+=backlight_lid.o |