pmic: Rewrite the pmic command to not only work with single byte transmission

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>
This commit is contained in:
Lukasz Majewski 2018-05-15 16:26:38 +02:00 committed by Stefano Babic
parent c57a226ac4
commit d4505c8e0d

View file

@ -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);