diff options
author | Simon Glass <sjg@chromium.org> | 2015-06-23 21:39:01 (GMT) |
---|---|---|
committer | Simon Glass <sjg@chromium.org> | 2015-07-21 23:39:27 (GMT) |
commit | 6c69c7fb57be1e184126aa29782942243ced7421 (patch) | |
tree | 6f24f5288bc0f1185732db39b2a9390d482be14d /drivers | |
parent | 59c26a9c22cecf7404fc0d1db0264c6a911141dc (diff) | |
download | u-boot-6c69c7fb57be1e184126aa29782942243ced7421.tar.xz |
dm: pmic: Add functions to adjust PMIC registers
It is a common requirement to update some PMIC registers. Provide some
simple convenience functions to do this.
Signed-off-by: Simon Glass <sjg@chromium.org>
Tested-by: Przemyslaw Marczak <p.marczak@samsung.com>
Acked-by: Przemyslaw Marczak <p.marczak@samsung.com>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/power/pmic/pmic-uclass.c | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/drivers/power/pmic/pmic-uclass.c b/drivers/power/pmic/pmic-uclass.c index 40b5135..dbab3e3 100644 --- a/drivers/power/pmic/pmic-uclass.c +++ b/drivers/power/pmic/pmic-uclass.c @@ -139,6 +139,38 @@ int pmic_write(struct udevice *dev, uint reg, const uint8_t *buffer, int len) return ops->write(dev, reg, buffer, len); } +int pmic_reg_read(struct udevice *dev, uint reg) +{ + u8 byte; + int ret; + + ret = pmic_read(dev, reg, &byte, 1); + debug("%s: reg=%x, value=%x\n", __func__, reg, byte); + + return ret ? ret : byte; +} + +int pmic_reg_write(struct udevice *dev, uint reg, uint value) +{ + u8 byte = value; + + debug("%s: reg=%x, value=%x\n", __func__, reg, value); + return pmic_read(dev, reg, &byte, 1); +} + +int pmic_clrsetbits(struct udevice *dev, uint reg, uint clr, uint set) +{ + u8 byte; + int ret; + + ret = pmic_reg_read(dev, reg); + if (ret < 0) + return ret; + byte = (ret & ~clr) | set; + + return pmic_reg_write(dev, reg, byte); +} + UCLASS_DRIVER(pmic) = { .id = UCLASS_PMIC, .name = "pmic", |