]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
cmd: List all uclass devices regardless of probe error
authorMichal Suchanek <msuchanek@suse.de>
Wed, 12 Oct 2022 19:57:58 +0000 (21:57 +0200)
committerSimon Glass <sjg@chromium.org>
Tue, 18 Oct 2022 03:17:12 +0000 (21:17 -0600)
There are a few commands that iterate uclass with
uclass_first_device/uclass_next_device or the _err variant.

Use the _check class iterator variant to get devices that fail to probe
as well, and print the status.

Signed-off-by: Michal Suchanek <msuchanek@suse.de>
Reviewed-by: Simon Glass <sjg@chromium.org>
cmd/adc.c
cmd/demo.c
cmd/gpio.c
cmd/pmic.c
cmd/regulator.c

index 1c5d3e10a395a6be37917a8556f7b159c1e4f4ed..a739d9e464117f4f85edc20cfd74102a5c44e792 100644 (file)
--- a/cmd/adc.c
+++ b/cmd/adc.c
@@ -12,23 +12,19 @@ static int do_adc_list(struct cmd_tbl *cmdtp, int flag, int argc,
                       char *const argv[])
 {
        struct udevice *dev;
-       int ret;
+       int ret, err;
 
-       ret = uclass_first_device_err(UCLASS_ADC, &dev);
-       if (ret) {
-               printf("No available ADC device\n");
-               return CMD_RET_FAILURE;
-       }
+       ret = err = uclass_first_device_check(UCLASS_ADC, &dev);
 
-       do {
-               printf("- %s\n", dev->name);
+       while (dev) {
+               printf("- %s status: %i\n", dev->name, ret);
 
-               ret = uclass_next_device(&dev);
+               ret = uclass_next_device_check(&dev);
                if (ret)
-                       return CMD_RET_FAILURE;
-       } while (dev);
+                       err = ret;
+       }
 
-       return CMD_RET_SUCCESS;
+       return err ? CMD_RET_FAILURE : CMD_RET_SUCCESS;
 }
 
 static int do_adc_info(struct cmd_tbl *cmdtp, int flag, int argc,
index 571f562ec68b60cefdff3ae644d1883766c50a7a..ebd5a241c362c63ce813337df33aa353ec04ef8e 100644 (file)
@@ -64,20 +64,23 @@ static int do_demo_light(struct cmd_tbl *cmdtp, int flag, int argc,
 int do_demo_list(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
 {
        struct udevice *dev;
-       int i, ret;
+       int i, ret, err = 0;
 
        puts("Demo uclass entries:\n");
 
-       for (i = 0, ret = uclass_first_device(UCLASS_DEMO, &dev);
+       for (i = 0, ret = uclass_first_device_check(UCLASS_DEMO, &dev);
             dev;
-            ret = uclass_next_device(&dev)) {
-               printf("entry %d - instance %08x, ops %08x, plat %08x\n",
+            ret = uclass_next_device_check(&dev)) {
+               printf("entry %d - instance %08x, ops %08x, plat %08x, status %i\n",
                       i++, (uint)map_to_sysmem(dev),
                       (uint)map_to_sysmem(dev->driver->ops),
-                      (uint)map_to_sysmem(dev_get_plat(dev)));
+                      (uint)map_to_sysmem(dev_get_plat(dev)),
+                      ret);
+               if (ret)
+                       err = ret;
        }
 
-       return cmd_process_error(cmdtp, ret);
+       return cmd_process_error(cmdtp, err);
 }
 
 static struct cmd_tbl demo_commands[] = {
index 53e9ce666f94eff585dac7d12b3317ea61cd2a88..f4565982ecd9c60fcba1b08e62904a5eec7c453f 100644 (file)
@@ -77,17 +77,24 @@ static int do_gpio_status(bool all, const char *gpio_name)
        struct udevice *dev;
        int banklen;
        int flags;
-       int ret;
+       int ret, err = 0;
 
        flags = 0;
        if (gpio_name && !*gpio_name)
                gpio_name = NULL;
-       for (ret = uclass_first_device(UCLASS_GPIO, &dev);
+       for (ret = uclass_first_device_check(UCLASS_GPIO, &dev);
             dev;
-            ret = uclass_next_device(&dev)) {
+            ret = uclass_next_device_check(&dev)) {
                const char *bank_name;
                int num_bits;
 
+               if (ret) {
+                       printf("GPIO device %s probe error %i\n",
+                              dev->name, ret);
+                       err = ret;
+                       continue;
+               }
+
                flags |= FLAG_SHOW_BANK;
                if (all)
                        flags |= FLAG_SHOW_ALL;
@@ -120,7 +127,7 @@ static int do_gpio_status(bool all, const char *gpio_name)
                        flags |= FLAG_SHOW_NEWLINE;
        }
 
-       return ret;
+       return err;
 }
 #endif
 
index 0cb44d07409613810d8185d3d2356e69e5c440d5..49a405fa2973ec4f299f9eae091e3acd0902c3d5 100644 (file)
@@ -51,25 +51,26 @@ static int do_list(struct cmd_tbl *cmdtp, int flag, int argc,
                   char *const argv[])
 {
        struct udevice *dev;
-       int ret;
+       int ret, err = 0;
 
        printf("| %-*.*s| %-*.*s| %s @ %s\n",
               LIMIT_DEV, LIMIT_DEV, "Name",
               LIMIT_PARENT, LIMIT_PARENT, "Parent name",
               "Parent uclass", "seq");
 
-       for (ret = uclass_first_device(UCLASS_PMIC, &dev); dev;
-            ret = uclass_next_device(&dev)) {
+       for (ret = uclass_first_device_check(UCLASS_PMIC, &dev); dev;
+            ret = uclass_next_device_check(&dev)) {
                if (ret)
-                       continue;
+                       err = ret;
 
-               printf("| %-*.*s| %-*.*s| %s @ %d\n",
+               printf("| %-*.*s| %-*.*s| %s @ %d | status: %i\n",
                       LIMIT_DEV, LIMIT_DEV, dev->name,
                       LIMIT_PARENT, LIMIT_PARENT, dev->parent->name,
-                      dev_get_uclass_name(dev->parent), dev_seq(dev->parent));
+                      dev_get_uclass_name(dev->parent), dev_seq(dev->parent),
+                      ret);
        }
 
-       if (ret)
+       if (err)
                return CMD_RET_FAILURE;
 
        return CMD_RET_SUCCESS;
index 60a70036d681861eb75cf8a0edbdc87c4527a0d6..ed4996dbd2b7b6f05c3833fb283f7931499d3103 100644 (file)
@@ -205,7 +205,7 @@ static void do_status_detail(struct udevice *dev,
        constraint(" * mode id:", mode, mode_name);
 }
 
-static void do_status_line(struct udevice *dev)
+static void do_status_line(struct udevice *dev, int status)
 {
        struct dm_regulator_uclass_plat *pdata;
        int current, value, mode;
@@ -231,6 +231,7 @@ static void do_status_line(struct udevice *dev)
                printf("%-10s", mode_name);
        else
                printf("%-10s", "-");
+       printf(" %i", status);
        printf("\n");
 }
 
@@ -250,11 +251,11 @@ static int do_status(struct cmd_tbl *cmdtp, int flag, int argc,
        }
 
        /* Show all of them in a list, probing them as needed */
-       printf("%-20s %-10s %10s %10s %-10s\n", "Name", "Enabled", "uV", "mA",
-              "Mode");
-       for (ret = uclass_first_device(UCLASS_REGULATOR, &dev); dev;
-            ret = uclass_next_device(&dev))
-               do_status_line(dev);
+       printf("%-20s %-10s %10s %10s %-10s %s\n", "Name", "Enabled", "uV", "mA",
+              "Mode", "Status");
+       for (ret = uclass_first_device_check(UCLASS_REGULATOR, &dev); dev;
+            ret = uclass_next_device_check(&dev))
+               do_status_line(dev, ret);
 
        return CMD_RET_SUCCESS;
 }