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
|
|
@ -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);
|
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) = {
|
UCLASS_DRIVER(pmic) = {
|
||||||
.id = UCLASS_PMIC,
|
.id = UCLASS_PMIC,
|
||||||
.name = "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_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);
|
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 */
|
#endif /* CONFIG_DM_PMIC */
|
||||||
|
|
||||||
#ifdef CONFIG_POWER
|
#ifdef CONFIG_POWER
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue