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 /common | |
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
Diffstat (limited to 'common')
-rw-r--r-- | common/adc.c | 57 | ||||
-rw-r--r-- | common/build.mk | 1 |
2 files changed, 58 insertions, 0 deletions
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 |