mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-10 15:14:43 +00:00
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:
parent
c57a226ac4
commit
d4505c8e0d
1 changed files with 19 additions and 12 deletions
31
cmd/pmic.c
31
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);
|
||||
|
|
Loading…
Reference in a new issue