From patchwork Fri Apr 27 13:17:57 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Neil Armstrong X-Patchwork-Id: 905743 X-Patchwork-Delegate: trini@ti.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.denx.de (client-ip=81.169.180.215; helo=lists.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=baylibre.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=baylibre-com.20150623.gappssmtp.com header.i=@baylibre-com.20150623.gappssmtp.com header.b="JA9Rw1S0"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 40XZHn4sr0z9s08 for ; Fri, 27 Apr 2018 23:18:13 +1000 (AEST) Received: by lists.denx.de (Postfix, from userid 105) id 4C73AC2214E; Fri, 27 Apr 2018 13:18:06 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on lists.denx.de X-Spam-Level: X-Spam-Status: No, score=-0.0 required=5.0 tests=RCVD_IN_MSPIKE_H3, RCVD_IN_MSPIKE_WL, T_DKIM_INVALID autolearn=unavailable autolearn_force=no version=3.4.0 Received: from lists.denx.de (localhost [IPv6:::1]) by lists.denx.de (Postfix) with ESMTP id 5501BC22119; Fri, 27 Apr 2018 13:18:03 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id 2704FC220E5; Fri, 27 Apr 2018 13:18:02 +0000 (UTC) Received: from mail-wm0-f68.google.com (mail-wm0-f68.google.com [74.125.82.68]) by lists.denx.de (Postfix) with ESMTPS id C69A4C220DD for ; Fri, 27 Apr 2018 13:18:01 +0000 (UTC) Received: by mail-wm0-f68.google.com with SMTP id i3so2839852wmf.3 for ; Fri, 27 Apr 2018 06:18:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id; bh=sXoAVphKpdw8IklfVT+1Qhpd+ZtSex/on9Ou3fqJA/E=; b=JA9Rw1S07Qe7ukWT945ZARtGxUJI1NkMr2MmVQsvUzwIa2NysfsipAPzMRFuCJQkfQ Khp2/NVRmx6PdQJkRZWW+OYENGzgG3DDrjrB0ykQWMgy4dcqLwkCNDP2wiiqYGz2ncX+ ycaUsbBWU53+/IoCPaOVa2XB6W/SbDMr3AMP0owCL685sbAULyPONh87NViXw4RMW7de NsyIvR4StuN50fw2Dna1kC6s4SBepmcB99+Tn1i8xL50mgoPleE4qBqyCkX4KpL+wS27 0BisKiQ3lXO850dIneM+cynTuqkF55SrIzasxhPjBH8Ca2nF/K8FVqZxfT43PWM2s/TN LXKw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=sXoAVphKpdw8IklfVT+1Qhpd+ZtSex/on9Ou3fqJA/E=; b=egqIgDzFHRMTdAVn10tY6txv3KlGefjXZgGk7iFHTsfoBe/o12Gfct0+VbfQryXjxo YE+fWFaiJ44QXR91QIgwDH9T9xI1yFFiDhOXyItbtA41199sBJXscngNEuooIDQZX0Ui z81N8gE8lG4t0ePkIiHxHkTE4v74qLrjLE8YYO+Mqgj565HAYow7QvHeBnOOig1pXS3K 6V/QpVJc3UFFiJmDMDnoSPZtj5KLl5r1xw0hp+nVCCPp/+5gFa5omSw/bt5ZyGGYwGlb yOOfA8Fm8RUC1xDme9FB9Y6DP7SOkIS56mOlKGIs2mqw62eLWZk25QI28oih9hMV38b0 FliQ== X-Gm-Message-State: ALQs6tAq/rWgtKe/xgcPKAv5NHGJhygj94bcbhIN9rMSThY/PPU7k+T0 jYLflX+a4nNjeKppF2fBL3Gh3UBtESY= X-Google-Smtp-Source: AB8JxZolrK6EnLTu5QKSHTyQrWoaXLlXZoR0UdPukgCpKEk1K+lf+GO5WphtOsvv4DL5Sa5mfAZtqg== X-Received: by 10.28.217.211 with SMTP id q202mr1358592wmg.84.1524835081272; Fri, 27 Apr 2018 06:18:01 -0700 (PDT) Received: from bender.baylibre.local ([2a01:e34:eeb6:4690:35c7:f264:355a:6031]) by smtp.gmail.com with ESMTPSA id a10-v6sm1684499wri.10.2018.04.27.06.17.59 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Fri, 27 Apr 2018 06:18:00 -0700 (PDT) From: Neil Armstrong To: trini@konsulko.com, sjg@chromium.org, u-boot@lists.denx.de Date: Fri, 27 Apr 2018 15:17:57 +0200 Message-Id: <1524835077-4139-1-git-send-email-narmstrong@baylibre.com> X-Mailer: git-send-email 2.7.4 Subject: [U-Boot] [PATCH v2] cmd: add ADC cli commands X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.18 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" Add an 'adc' cli command to get adc devices informations and read single shots datas. Signed-off-by: Neil Armstrong --- cmd/Kconfig | 8 ++++ cmd/Makefile | 1 + cmd/adc.c | 121 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 130 insertions(+) create mode 100644 cmd/adc.c diff --git a/cmd/Kconfig b/cmd/Kconfig index bc1d2f3..495c634 100644 --- a/cmd/Kconfig +++ b/cmd/Kconfig @@ -601,6 +601,14 @@ config CMD_ARMFLASH help ARM Ltd reference designs flash partition access +config CMD_ADC + bool "adc - Access Analog to Digital Converters info and data" + select ADC + select DM_REGULATOR + help + Shows ADC device info and permit printing one-shot analog converted + data from a named Analog to Digital Converter. + config CMD_CLK bool "clk - Show clock frequencies" help diff --git a/cmd/Makefile b/cmd/Makefile index c4269ac..4c66353 100644 --- a/cmd/Makefile +++ b/cmd/Makefile @@ -14,6 +14,7 @@ obj-y += version.o # command obj-$(CONFIG_CMD_AES) += aes.o +obj-$(CONFIG_CMD_ADC) += adc.o obj-$(CONFIG_CMD_ARMFLASH) += armflash.o obj-y += blk_common.o obj-$(CONFIG_SOURCE) += source.o diff --git a/cmd/adc.c b/cmd/adc.c new file mode 100644 index 0000000..66d4a4a --- /dev/null +++ b/cmd/adc.c @@ -0,0 +1,121 @@ +/* + * Copyright (C) 2018 BayLibre, SAS + * Author: Neil Armstrong + * + * SPDX-License-Identifier: GPL-2.0+ + */ +#include +#include +#include +#include + +static int do_adc_list(cmd_tbl_t *cmdtp, int flag, int argc, + char *const argv[]) +{ + struct udevice *dev; + int ret; + + ret = uclass_first_device_err(UCLASS_ADC, &dev); + if (ret) { + printf("No available ADC device\n"); + return CMD_RET_FAILURE; + } + + do { + printf("- %s\n", dev->name); + + ret = uclass_next_device(&dev); + if (ret) + return CMD_RET_FAILURE; + } while (dev); + + return CMD_RET_SUCCESS; +} + +static int do_adc_info(cmd_tbl_t *cmdtp, int flag, int argc, + char *const argv[]) +{ + struct udevice *dev; + unsigned int data_mask; + int ret, vss, vdd; + + if (argc < 2) + return CMD_RET_USAGE; + + ret = uclass_get_device_by_name(UCLASS_ADC, argv[1], &dev); + if (ret) { + printf("Unknown ADC device %s\n", argv[1]); + return CMD_RET_FAILURE; + } + + printf("ADC Device '%s' :\n", argv[1]); + + ret = adc_data_mask(dev, &data_mask); + if (!ret) + printf("data mask: %x\n", data_mask); + + ret = adc_vdd_value(dev, &vdd); + if (!ret) + printf("vdd: %duV\n", vdd); + + ret = adc_vss_value(dev, &vss); + if (!ret) + printf("vss: %duV\n", vss); + + return CMD_RET_SUCCESS; +} + +static int do_adc_single(cmd_tbl_t *cmdtp, int flag, int argc, + char *const argv[]) +{ + unsigned int data; + int ret; + + if (argc < 3) + return CMD_RET_USAGE; + + ret = adc_channel_single_shot(argv[1], simple_strtol(argv[2], NULL, 0), + &data); + if (ret) { + printf("Error getting single shot for device %s channel %s\n", + argv[1], argv[2]); + return CMD_RET_FAILURE; + } + + printf("%u\n", data); + + return CMD_RET_SUCCESS; +} + +static cmd_tbl_t cmd_adc_sub[] = { + U_BOOT_CMD_MKENT(list, 1, 1, do_adc_list, "", ""), + U_BOOT_CMD_MKENT(info, 2, 1, do_adc_info, "", ""), + U_BOOT_CMD_MKENT(single, 3, 1, do_adc_single, "", ""), +}; + +static int do_adc(cmd_tbl_t *cmdtp, int flag, int argc, + char *const argv[]) +{ + cmd_tbl_t *c; + + if (argc < 2) + return CMD_RET_USAGE; + + /* Strip off leading 'adc' command argument */ + argc--; + argv++; + + c = find_cmd_tbl(argv[0], &cmd_adc_sub[0], ARRAY_SIZE(cmd_adc_sub)); + + if (c) + return c->cmd(cmdtp, flag, argc, argv); + else + return CMD_RET_USAGE; +} + +static char adc_help_text[] = + "list - list ADC devices\n" + "adc info - Get ADC device info\n" + "adc single - Get Single data of ADC device channel"; + +U_BOOT_CMD(adc, 4, 1, do_adc, "ADC sub-system", adc_help_text);