]> git.ipfire.org Git - thirdparty/u-boot.git/blobdiff - cmd/pmic.c
arm: Check FEAT_CCIDX when parsing ccsidr_el1 register
[thirdparty/u-boot.git] / cmd / pmic.c
index e46d813a70b2b75431bec04a7a64d8cc8b1b5564..c9e9730adf909e30fd8420145b7d66a80cd6cbaf 100644 (file)
@@ -4,6 +4,7 @@
  * Przemyslaw Marczak <p.marczak@samsung.com>
  */
 #include <common.h>
+#include <command.h>
 #include <errno.h>
 #include <dm.h>
 #include <dm/uclass-internal.h>
@@ -21,7 +22,7 @@ static int failure(int ret)
        return CMD_RET_FAILURE;
 }
 
-static int do_dev(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+static int do_dev(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
 {
        char *name;
        int ret = -ENODEV;
@@ -40,40 +41,43 @@ static int do_dev(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
                        return CMD_RET_USAGE;
                }
 
-               printf("dev: %d @ %s\n", currdev->seq, currdev->name);
+               printf("dev: %d @ %s\n", dev_seq(currdev), currdev->name);
        }
 
        return CMD_RET_SUCCESS;
 }
 
-static int do_list(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+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->parent->seq);
+                      dev_get_uclass_name(dev->parent), dev_seq(dev->parent),
+                      ret);
        }
 
-       if (ret)
+       if (err)
                return CMD_RET_FAILURE;
 
        return CMD_RET_SUCCESS;
 }
 
-static int do_dump(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+static int do_dump(struct cmd_tbl *cmdtp, int flag, int argc,
+                  char *const argv[])
 {
        struct uc_pmic_priv *priv;
        struct udevice *dev;
@@ -95,7 +99,7 @@ static int do_dump(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 
        for (reg = 0; reg < pmic_reg_count(dev); reg++) {
                ret = pmic_reg_read(dev, reg);
-               if (ret < 0) {
+               if (ret < 0 && ret != -ENODATA) {
                        printf("Can't read register: %d\n", reg);
                        return failure(ret);
                }
@@ -103,14 +107,23 @@ static int do_dump(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
                if (!(reg % 16))
                        printf("\n0x%02x: ", reg);
 
-               printf(fmt, ret);
+               if (ret == -ENODATA) {
+                       int i;
+
+                       for (i = 0; i < priv->trans_len; i++)
+                               puts("--");
+                       puts(" ");
+               } else {
+                       printf(fmt, ret);
+               }
        }
        printf("\n");
 
        return CMD_RET_SUCCESS;
 }
 
-static int do_read(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+static int do_read(struct cmd_tbl *cmdtp, int flag, int argc,
+                  char *const argv[])
 {
        struct uc_pmic_priv *priv;
        struct udevice *dev;
@@ -149,7 +162,8 @@ static int do_read(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
        return CMD_RET_SUCCESS;
 }
 
-static int do_write(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+static int do_write(struct cmd_tbl *cmdtp, int flag, int argc,
+                   char *const argv[])
 {
        struct udevice *dev;
        uint reg, value;
@@ -183,7 +197,7 @@ static int do_write(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
        return CMD_RET_SUCCESS;
 }
 
-static cmd_tbl_t subcmd[] = {
+static struct cmd_tbl subcmd[] = {
        U_BOOT_CMD_MKENT(dev, 2, 1, do_dev, "", ""),
        U_BOOT_CMD_MKENT(list, 1, 1, do_list, "", ""),
        U_BOOT_CMD_MKENT(dump, 1, 1, do_dump, "", ""),
@@ -191,10 +205,10 @@ static cmd_tbl_t subcmd[] = {
        U_BOOT_CMD_MKENT(write, 3, 1, do_write, "", ""),
 };
 
-static int do_pmic(cmd_tbl_t *cmdtp, int flag, int argc,
-                       char * const argv[])
+static int do_pmic(struct cmd_tbl *cmdtp, int flag, int argc,
+                  char *const argv[])
 {
-       cmd_tbl_t *cmd;
+       struct cmd_tbl *cmd;
 
        argc--;
        argv++;
@@ -211,6 +225,6 @@ U_BOOT_CMD(pmic, CONFIG_SYS_MAXARGS, 1, do_pmic,
        "list          - list pmic devices\n"
        "pmic dev [name]    - show or [set] operating PMIC device\n"
        "pmic dump          - dump registers\n"
-       "pmic read address  - read byte of register at address\n"
-       "pmic write address - write byte to register at address\n"
+       "pmic read <reg>    - read byte of 'reg' register\n"
+       "pmic write <reg> <byte> - write 'byte' byte to 'reg' register\n"
 );