diff mbox series

[U-Boot,v3,06/11] pmic: Rewrite the pmic command to not only work with single byte transmission

Message ID 20180515142643.11599-7-lukma@denx.de
State Accepted
Commit d4505c8e0dec72effc1b6017eafe1f6aa025cc5d
Delegated to: Stefano Babic
Headers show
Series pmic: sandbox: Add support for MC34709 PMIC | expand

Commit Message

Lukasz Majewski May 15, 2018, 2:26 p.m. UTC
Up till now it was only possible to use 'pmic' command with a single byte
transmission.
The pmic_read|write functions has been replaced with ones, which don't need
the transmission length as a parameter.

Due to that it is possible now to read data from PMICs transmitting more
data than 1 byte at once (e.g. mc34708)

Signed-off-by: Lukasz Majewski <lukma@denx.de>
Reviewed-by: Simon Glass <sjg@chromium.org>

---

Changes in v3:
- Replace dm_pmic_info with uc_pmic_priv
- Replace pmic_info with priv

Changes in v2:
- New patch

 cmd/pmic.c | 31 +++++++++++++++++++------------
 1 file changed, 19 insertions(+), 12 deletions(-)
diff mbox series

Patch

diff --git a/cmd/pmic.c b/cmd/pmic.c
index f4b4a3f588..e46d813a70 100644
--- a/cmd/pmic.c
+++ b/cmd/pmic.c
@@ -75,8 +75,9 @@  static int do_list(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 
 static int do_dump(cmd_tbl_t *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;
 
@@ -86,12 +87,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) {
 			printf("Can't read register: %d\n", reg);
 			return failure(ret);
 		}
@@ -99,7 +103,7 @@  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);
+		printf(fmt, ret);
 	}
 	printf("\n");
 
@@ -108,9 +112,10 @@  static int do_dump(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 
 static int do_read(cmd_tbl_t *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) {
@@ -119,6 +124,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;
@@ -130,13 +136,15 @@  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;
 }
@@ -144,9 +152,8 @@  static int do_read(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 static int do_write(cmd_tbl_t *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");
@@ -167,7 +174,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);