[PATCH v2 03/12] power: pmic: Add a driver for X-Powers AXP PMICs

Andre Przywara andre.przywara at arm.com
Tue Oct 12 12:47:14 CEST 2021


On Fri,  8 Oct 2021 00:17:16 -0500
Samuel Holland <samuel at sholland.org> wrote:

> These PMICs provide some combination of battery charger, fuel gauge,
> GPIOs, regulators, and VBUS routing. These functions are represented
> as child nodes in the device tree. Add the minimal driver needed to
> probe these child devices and provide the DM_PMIC ops.
> 
> Enable the driver by default for SoCs that normally pair with a PMIC.

Looks indeed like a minimal I2C passthrough DM driver.

> Signed-off-by: Samuel Holland <samuel at sholland.org>

Reviewed-by: Andre Przywara <andre.przywara at arm.com>

Cheers,
Andre

> ---
> 
> Changes in v2:
> - Replace axp_pmic_bind() with `.bind = dm_scan_fdt_dev`
> 
>  drivers/power/pmic/Kconfig  | 14 ++++++++++++++
>  drivers/power/pmic/Makefile |  1 +
>  drivers/power/pmic/axp.c    | 38 +++++++++++++++++++++++++++++++++++++
>  3 files changed, 53 insertions(+)
>  create mode 100644 drivers/power/pmic/axp.c
> 
> diff --git a/drivers/power/pmic/Kconfig b/drivers/power/pmic/Kconfig
> index e8a04325f85..fcb517f1044 100644
> --- a/drivers/power/pmic/Kconfig
> +++ b/drivers/power/pmic/Kconfig
> @@ -63,6 +63,20 @@ config PMIC_ACT8846
>  	functions. It uses an I2C interface and is designed for use with
>  	tablets and smartphones.
>  
> +config PMIC_AXP
> +	bool "Enable Driver Model for X-Powers AXP PMICs"
> +	depends on DM_I2C
> +	help
> +	  This config enables driver-model PMIC uclass features for
> +	  X-Powers AXP152, AXP2xx, and AXP8xx PMICs.
> +
> +config SPL_PMIC_AXP
> +	bool "Enable Driver Model for X-Powers AXP PMICs in SPL"
> +	depends on SPL_DM_I2C && SPL_DM_PMIC
> +	help
> +	  This config enables driver-model PMIC uclass features in the SPL for
> +	  X-Powers AXP152, AXP2xx, and AXP8xx PMICs.
> +
>  config DM_PMIC_DA9063
>  	bool "Enable Driver Model for the Dialog DA9063 PMIC"
>  	help
> diff --git a/drivers/power/pmic/Makefile b/drivers/power/pmic/Makefile
> index 5250eac12f2..e1922df00f8 100644
> --- a/drivers/power/pmic/Makefile
> +++ b/drivers/power/pmic/Makefile
> @@ -18,6 +18,7 @@ obj-$(CONFIG_DM_PMIC_SANDBOX) += sandbox.o i2c_pmic_emul.o
>  obj-$(CONFIG_PMIC_AB8500) += ab8500.o
>  obj-$(CONFIG_PMIC_ACT8846) += act8846.o
>  obj-$(CONFIG_PMIC_AS3722) += as3722.o as3722_gpio.o
> +obj-$(CONFIG_$(SPL_)PMIC_AXP) += axp.o
>  obj-$(CONFIG_PMIC_MAX8997) += max8997.o
>  obj-$(CONFIG_PMIC_PM8916) += pm8916.o
>  obj-$(CONFIG_$(SPL_TPL_)PMIC_RK8XX) += rk8xx.o
> diff --git a/drivers/power/pmic/axp.c b/drivers/power/pmic/axp.c
> new file mode 100644
> index 00000000000..74c94bdb47b
> --- /dev/null
> +++ b/drivers/power/pmic/axp.c
> @@ -0,0 +1,38 @@
> +// SPDX-License-Identifier: GPL-2.0+
> +
> +#include <dm.h>
> +#include <i2c.h>
> +#include <power/pmic.h>
> +
> +static int axp_pmic_reg_count(struct udevice *dev)
> +{
> +	/* TODO: Get the specific value from driver data. */
> +	return 0x100;
> +}
> +
> +static struct dm_pmic_ops axp_pmic_ops = {
> +	.reg_count	= axp_pmic_reg_count,
> +	.read		= dm_i2c_read,
> +	.write		= dm_i2c_write,
> +};
> +
> +static const struct udevice_id axp_pmic_ids[] = {
> +	{ .compatible = "x-powers,axp152" },
> +	{ .compatible = "x-powers,axp202" },
> +	{ .compatible = "x-powers,axp209" },
> +	{ .compatible = "x-powers,axp221" },
> +	{ .compatible = "x-powers,axp223" },
> +	{ .compatible = "x-powers,axp803" },
> +	{ .compatible = "x-powers,axp806" },
> +	{ .compatible = "x-powers,axp809" },
> +	{ .compatible = "x-powers,axp813" },
> +	{ }
> +};
> +
> +U_BOOT_DRIVER(axp_pmic) = {
> +	.name		= "axp_pmic",
> +	.id		= UCLASS_PMIC,
> +	.of_match	= axp_pmic_ids,
> +	.bind		= dm_scan_fdt_dev,
> +	.ops		= &axp_pmic_ops,
> +};



More information about the U-Boot mailing list