[U-Boot] [PATCH] cmd: add ADC cli commands

Simon Glass sjg at chromium.org
Thu Apr 26 14:40:36 UTC 2018


Hi Neil,

On 23 April 2018 at 08:18, Neil Armstrong <narmstrong at baylibre.com> wrote:
> Add an 'adc' cli command to get adc devices informations and read single
> shots datas.
>
> Signed-off-by: Neil Armstrong <narmstrong at baylibre.com>
> ---
>  cmd/Kconfig  |   7 ++++
>  cmd/Makefile |   1 +
>  cmd/adc.c    | 126 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
>  3 files changed, 134 insertions(+)
>  create mode 100644 cmd/adc.c

Reviewed-by: Simon Glass <sjg at chromium.org>

Nits below

>
> 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;

Please spell out ADC in the help. Also, what is 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 <narmstrong at baylibre.com>
> + *
> + * SPDX-License-Identifier:    GPL-2.0+
> + */
> +#include <common.h>
> +#include <command.h>
> +#include <dm.h>
> +#include <adc.h>
> +
> +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);

This will probe the device. Is that what you want?

> +       if (ret || !dev) {

You don't need to check dev, since ret will return -ENODEV if there is
no device. See the docs for uclass_first_device_err().

> +               printf("No available ADC device\n");

return?

> +       }
> +
> +       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);

You could perhaps have a function to print the error or the value. I'm
not sure if it is worth it.

> +
> +       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;
> +}
> +

[..]

Regards,
Simon


More information about the U-Boot mailing list