[U-Boot] [PATCH v3 39/54] dm: pmic: Add functions to adjust PMIC registers

Przemyslaw Marczak p.marczak at samsung.com
Wed Jul 1 11:44:30 CEST 2015


Hello Simon,

On 06/23/2015 11:39 PM, Simon Glass wrote:
> It is a common requirement to update some PMIC registers. Provide some
> simple convenience functions to do this.
>
> Signed-off-by: Simon Glass <sjg at chromium.org>
> ---
>
> Changes in v3: None
> Changes in v2: None
>
>   drivers/power/pmic/pmic-uclass.c | 32 ++++++++++++++++++++++++++++++++
>   include/power/pmic.h             | 34 ++++++++++++++++++++++++++++++++++
>   2 files changed, 66 insertions(+)
>
> 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",
> diff --git a/include/power/pmic.h b/include/power/pmic.h
> index eb152ef..6ba4b6e 100644
> --- a/include/power/pmic.h
> +++ b/include/power/pmic.h
> @@ -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
>

Tested on:
- Odroid U3 (odroid_defconfig)
- Sandbox - ut pmic/regulator

Tested-by: Przemyslaw Marczak <p.marczak at samsung.com>
Acked-by: Przemyslaw Marczak <p.marczak at samsung.com>

Best regards,
-- 
Przemyslaw Marczak
Samsung R&D Institute Poland
Samsung Electronics
p.marczak at samsung.com


More information about the U-Boot mailing list