[U-Boot] [PATCH 2/3] cmd: thermal: Add command line interface to read out temperatures

Simon Glass sjg at chromium.org
Fri Mar 22 07:53:15 UTC 2019


Hi Keerthy,

On Mon, 11 Mar 2019 at 14:13, Keerthy <j-keerthy at ti.com> wrote:
>
> Add command line interface to read out temperatures from SoC.
> Takes two arguments. One is 'temperature' and the other is
> instance number. In case instance number is not provided by
> default 0th instance temperature is read out.
>
> Signed-off-by: Keerthy <j-keerthy at ti.com>
> ---
>  cmd/Kconfig   |  5 +++++
>  cmd/Makefile  |  1 +
>  cmd/thermal.c | 59 +++++++++++++++++++++++++++++++++++++++++++++++++++
>  3 files changed, 65 insertions(+)
>  create mode 100644 cmd/thermal.c
>
> diff --git a/cmd/Kconfig b/cmd/Kconfig
> index 4bcc5c4557..d252e93d64 100644
> --- a/cmd/Kconfig
> +++ b/cmd/Kconfig
> @@ -1044,6 +1044,11 @@ config CMD_SPI
>         help
>           SPI utility command.
>
> +config CMD_THERMAL
> +       bool "thermal"
> +       help
> +         THERMAL support.

Thermal support

> +
>  config CMD_TSI148
>         bool "tsi148 - Command to access tsi148 device"
>         help
> diff --git a/cmd/Makefile b/cmd/Makefile
> index acb85f49fb..2b66f9e36a 100644
> --- a/cmd/Makefile
> +++ b/cmd/Makefile
> @@ -128,6 +128,7 @@ obj-$(CONFIG_CMD_SPI) += spi.o
>  obj-$(CONFIG_CMD_STRINGS) += strings.o
>  obj-$(CONFIG_CMD_SMC) += smccc.o
>  obj-$(CONFIG_CMD_TERMINAL) += terminal.o
> +obj-$(CONFIG_CMD_THERMAL) += thermal.o
>  obj-$(CONFIG_CMD_TIME) += time.o
>  obj-$(CONFIG_CMD_TRACE) += trace.o
>  obj-$(CONFIG_HUSH_PARSER) += test.o
> diff --git a/cmd/thermal.c b/cmd/thermal.c
> new file mode 100644
> index 0000000000..a31f992425
> --- /dev/null
> +++ b/cmd/thermal.c
> @@ -0,0 +1,59 @@
> +// SPDX-License-Identifier: GPL-2.0+
> +/*
> + * Thermal CMD
> + *
> + * Copyright (C) 2019 Texas Instruments Incorporated - http://www.ti.com/
> + */
> +#include <common.h>
> +#include <errno.h>
> +#include <dm.h>
> +#include <dm/uclass-internal.h>

Should go at the end

> +#include <thermal.h>
> +
> +#define MAX_TEMP       150

Is this in celsius?

> +
> +static int do_read_temp(cmd_tbl_t *cmdtp, int flag, int argc,
> +                       char * const argv[])
> +{
> +       struct udevice *tdev;
> +       int cpu_temp, ret = 0;
> +       u8 instance;

uint

Please use channel instead

> +       const char *units;
> +
> +       if (argc > 2) {
> +               printf("Max Number of arguments is 2\n");
> +               return -EINVAL;

return CMD_RET_USAGE

If you return -ve values it can do strange things like cause the
calling shell to exit.

> +       }
> +
> +       /* In case instance is not given default 0th instnace is reported */

instance

> +       if (argc == 2)
> +               instance = (u8)simple_strtoul(argv[1], NULL, 10);

Drop u8 cast

> +       else
> +               instance = 0;
> +
> +       ret = uclass_get_device(UCLASS_THERMAL, 0, &tdev);

uclass_first_device_err()?

That is more robust than requiring it be seq #0.

> +       if (!ret) {
> +               ret = thermal_get_temp(tdev, instance, &cpu_temp);
> +               if (!ret) {
> +                       if (abs(cpu_temp) < MAX_TEMP)
> +                               units = "C";
> +                       else
> +                               units = "mC";

The interface should be in mC, then. We can't have the range of the
value determine the units.

> +
> +                       printf("Instance %d Temperature at %d%s\n", instance,
> +                              cpu_temp, units);
> +               } else {
> +                       debug(" - invalid sensor data\n");

Maybe -ENOENT means invalid channel
-ENODATA means the channel exists but temperature could not be read?

> +               }
> +       } else {
> +               printf(" - invalid sensor device\n");
> +       }
> +

if (ret)
   return CMD_RET_FAILURE;

return 0

> +       return ret;

Don't return -ve values from commands.

> +}
> +
> +U_BOOT_CMD(
> +       temperature, 2, 0, do_read_temp,
> +       "Reads temperature of a given sensor",
> +       " [sensor number] - number of the temperature sensor"
> +);
> --
> 2.17.1
>

Could we have a pytest for this command for sandbox?

Regards,
Simon


More information about the U-Boot mailing list