Merge tag 'efi-2020-07-rc6' of https://gitlab.denx.de/u-boot/custodians/u-boot-efi
[oweals/u-boot.git] / cmd / pmic.c
index 7bf23fb2a9f85e67837407871ede5e148d7f89cf..3bda0534a36c05baedd38f5647e796c84d4e6649 100644 (file)
@@ -1,10 +1,10 @@
+// SPDX-License-Identifier: GPL-2.0+
 /*
  * Copyright (C) 2014-2015 Samsung Electronics
  * Przemyslaw Marczak <p.marczak@samsung.com>
- *
- * SPDX-License-Identifier:    GPL-2.0+
  */
 #include <common.h>
+#include <command.h>
 #include <errno.h>
 #include <dm.h>
 #include <dm/uclass-internal.h>
@@ -22,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;
@@ -47,7 +47,8 @@ static int do_dev(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
        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;
@@ -74,10 +75,12 @@ static int do_list(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
        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;
-       uint8_t value;
+       char fmt[16];
        uint reg;
        int ret;
 
@@ -87,12 +90,15 @@ static int do_dump(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
        }
 
        dev = currdev;
-
+       priv = dev_get_uclass_priv(dev);
        printf("Dump pmic: %s registers\n", dev->name);
 
+       sprintf(fmt, "%%%d.%dx ", priv->trans_len * 2,
+               priv->trans_len * 2);
+
        for (reg = 0; reg < pmic_reg_count(dev); reg++) {
-               ret = pmic_read(dev, reg, &value, 1);
-               if (ret) {
+               ret = pmic_reg_read(dev, reg);
+               if (ret < 0 && ret != -ENODATA) {
                        printf("Can't read register: %d\n", reg);
                        return failure(ret);
                }
@@ -100,18 +106,28 @@ static int do_dump(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
                if (!(reg % 16))
                        printf("\n0x%02x: ", reg);
 
-               printf("%2.2x ", value);
+               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;
        int regs, ret;
-       uint8_t value;
+       char fmt[24];
        uint reg;
 
        if (!currdev) {
@@ -120,6 +136,7 @@ static int do_read(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
        }
 
        dev = currdev;
+       priv = dev_get_uclass_priv(dev);
 
        if (argc != 2)
                return CMD_RET_USAGE;
@@ -131,23 +148,25 @@ static int do_read(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
                return failure(-EFAULT);
        }
 
-       ret = pmic_read(dev, reg, &value, 1);
-       if (ret) {
+       ret = pmic_reg_read(dev, reg);
+       if (ret < 0) {
                printf("Can't read PMIC register: %d!\n", reg);
                return failure(ret);
        }
 
-       printf("0x%02x: 0x%2.2x\n", reg, value);
+       sprintf(fmt, "0x%%02x: 0x%%%d.%dx\n", priv->trans_len * 2,
+               priv->trans_len * 2);
+       printf(fmt, reg, ret);
 
        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;
        int regs, ret;
-       uint8_t value;
-       uint reg;
 
        if (!currdev) {
                printf("First, set the PMIC device!\n");
@@ -168,7 +187,7 @@ static int do_write(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 
        value = simple_strtoul(argv[2], NULL, 0);
 
-       ret = pmic_write(dev, reg, &value, 1);
+       ret = pmic_reg_write(dev, reg, value);
        if (ret) {
                printf("Can't write PMIC register: %d!\n", reg);
                return failure(ret);
@@ -177,7 +196,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, "", ""),
@@ -185,10 +204,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++;