mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-10 23:24:38 +00:00
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>
This commit is contained in:
parent
59c26a9c22
commit
6c69c7fb57
2 changed files with 66 additions and 0 deletions
|
@ -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",
|
||||
|
|
|
@ -264,6 +264,40 @@ int pmic_reg_count(struct udevice *dev);
|
|||
*/
|
||||
int pmic_read(struct udevice *dev, uint reg, uint8_t *buffer, int len);
|
||||
int pmic_write(struct udevice *dev, uint reg, const uint8_t *buffer, int len);
|
||||
|
||||
/**
|
||||
* pmic_reg_read() - read a PMIC register value
|
||||
*
|
||||
* @dev: PMIC device to read
|
||||
* @reg: Register to read
|
||||
* @return value read on success or negative value of errno.
|
||||
*/
|
||||
int pmic_reg_read(struct udevice *dev, uint reg);
|
||||
|
||||
/**
|
||||
* pmic_reg_write() - write a PMIC register value
|
||||
*
|
||||
* @dev: PMIC device to write
|
||||
* @reg: Register to write
|
||||
* @value: Value to write
|
||||
* @return 0 on success or negative value of errno.
|
||||
*/
|
||||
int pmic_reg_write(struct udevice *dev, uint reg, uint value);
|
||||
|
||||
/**
|
||||
* pmic_clrsetbits() - clear and set bits in a PMIC register
|
||||
*
|
||||
* This reads a register, optionally clears some bits, optionally sets some
|
||||
* bits, then writes the register.
|
||||
*
|
||||
* @dev: PMIC device to update
|
||||
* @reg: Register to update
|
||||
* @clr: Bit mask to clear (set those bits that you want cleared)
|
||||
* @set: Bit mask to set (set those bits that you want set)
|
||||
* @return 0 on success or negative value of errno.
|
||||
*/
|
||||
int pmic_clrsetbits(struct udevice *dev, uint reg, uint clr, uint set);
|
||||
|
||||
#endif /* CONFIG_DM_PMIC */
|
||||
|
||||
#ifdef CONFIG_POWER
|
||||
|
|
Loading…
Reference in a new issue