From patchwork Mon Apr 23 14:18:19 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Neil Armstrong X-Patchwork-Id: 902964 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="mI9quVuq"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 40V7qD2nT6z9s02 for ; Tue, 24 Apr 2018 00:18:32 +1000 (AEST) Received: by lists.denx.de (Postfix, from userid 105) id 0C313C21C93; Mon, 23 Apr 2018 14:18:28 +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_DNSWL_BLOCKED, RCVD_IN_MSPIKE_H2, 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 9ED99C21C93; Mon, 23 Apr 2018 14:18:25 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id 12925C21C93; Mon, 23 Apr 2018 14:18:23 +0000 (UTC) Received: from mail-wr0-f195.google.com (mail-wr0-f195.google.com [209.85.128.195]) by lists.denx.de (Postfix) with ESMTPS id 8A921C21C29 for ; Mon, 23 Apr 2018 14:18:23 +0000 (UTC) Received: by mail-wr0-f195.google.com with SMTP id p18-v6so22599846wrm.1 for ; Mon, 23 Apr 2018 07:18:23 -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=8jwI/YKdiE45SsUUdFAtZoffSwlWajR/+LBWPs713HU=; b=mI9quVuqjsDNwVJ4MVjjiK/eDhft+FQyeBRfws75gmg6fqLYxWymlVBZZCELp0B7/c mdexcOAYoEM5jEQAnETWPHHx5xdeocsRoBhQrs77Btk1thufzprDNo38LmyhKJY/GIms Huvwg3Mk2mbE9dr7mqBqqSHjoq5GNctQ2eI3sLU0s2G+9yLes0xBh7qrCvlHYIidNX5m c02rSGy503Dqo82R1TblzFMTCQWwl5gaNdqWXUMA79TBalkm5ffySkwCPeE+65t5J+Cs 2AHVTjD1tm3ArTVqxMDpLT+LBR/rjs2DPpbdO8pbmXAYR4qBnuw8OlRL2WPG4SJpVRy+ GSaQ== 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=8jwI/YKdiE45SsUUdFAtZoffSwlWajR/+LBWPs713HU=; b=BaRhb/1RZguqoV6s/kFTm/Yn4imF6c9KoMuhYdeA3zYgqqFfHyGB09QKwlqQkQ8fyF B03KUf7nDqq5t3Ai8/LiuCh9JMwCPttn6DwyJrENq6j9Y9fFVp55WaDi4t1sz3k9yGi9 OeNd8aouFbiMcGSKET6WyUURRSpylXiZQvfqr0mV35CWDahc+xdrXNidtVIIiLIJZav7 pc9TWX/cYZPBeaNsrZbmmvxK5j1lfHOb2poQimw85rhz3Jl2e3pX/NkU+3CgxNzx8TeQ GIUXUclEL7nweUl8go+yk77n0TCGobXAUzyMOeh/Xp0fdCwI8XkgqKYu/x98e+fonM1L Sutw== X-Gm-Message-State: ALQs6tANQJ5OSlVPq0VGu5zF9JDkWDvOkq3dEVqS+8fpxylNHVGJuHJ2 RZyuFgqgGXIFIswVi84tzlJPSTaBMHk= X-Google-Smtp-Source: AIpwx48wWl+y0Df3forUX+KB4WgyiEHwkZHeIrIlBk0PxxhvnTxMFQBYBpA+I8TVXnaTxm2b1HDD+A== X-Received: by 10.28.32.132 with SMTP id g126mr10584362wmg.52.1524493103081; Mon, 23 Apr 2018 07:18:23 -0700 (PDT) Received: from bender.baylibre.local ([90.63.244.31]) by smtp.gmail.com with ESMTPSA id k89sm8856518wmc.15.2018.04.23.07.18.21 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 23 Apr 2018 07:18:22 -0700 (PDT) From: Neil Armstrong To: trini@konsulko.com, sjg@chromium.org, u-boot@lists.denx.de Date: Mon, 23 Apr 2018 16:18:19 +0200 Message-Id: <1524493099-13054-1-git-send-email-narmstrong@baylibre.com> X-Mailer: git-send-email 2.7.4 Subject: [U-Boot] [PATCH] 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 Reviewed-by: Simon Glass --- cmd/Kconfig | 7 ++++ cmd/Makefile | 1 + cmd/adc.c | 126 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 134 insertions(+) create mode 100644 cmd/adc.c diff --git a/cmd/Kconfig b/cmd/Kconfig index bc1d2f3..631daee 100644 --- a/cmd/Kconfig +++ b/cmd/Kconfig @@ -601,6 +601,13 @@ config CMD_ARMFLASH help ARM Ltd reference designs flash partition access +config CMD_ADC + bool "adc - Access ADC info and data" + select ADC + select DM_REGULATOR + help + Shows ADC device info and get single shot data; + 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..f82305c --- /dev/null +++ b/cmd/adc.c @@ -0,0 +1,126 @@ +/* + * 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 || !dev) { + printf("No available ADC device\n"); + } + + 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: Error %d\n", ret); + else + printf("data mask: %x\n", data_mask); + + ret = adc_vdd_value(dev, &vdd); + if (ret) + printf("vdd: Error %d\n", ret); + else + printf("vdd: %duV\n", vdd); + + ret = adc_vss_value(dev, &vss); + if (ret) + printf("vss: Error %d\n", ret); + else + 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);