summaryrefslogtreecommitdiff
path: root/common
diff options
context:
space:
mode:
authorVic (Chun-Ju) Yang <victoryang@chromium.org>2013-12-19 14:44:24 +0800
committerchrome-internal-fetch <chrome-internal-fetch@google.com>2013-12-20 05:07:58 +0000
commitc455d255076f50b217f35115f2591bc5ce5f0c69 (patch)
tree37706a3e649cd9dd1bc23110b5b4ed21f6149cb1 /common
parent9a11fab20e1e55fadcdcb748db02b84f938a68d1 (diff)
downloadchrome-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.c57
-rw-r--r--common/build.mk1
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