On Sun, 22 Aug 2021 18:18:06 -0500 Samuel Holland <[email protected]> wrote:
Hi Samuel, > The AXP PMICs have the ability to power off the system. The existing > code for this is duplicated for each PMIC variant, and uses the legacy > non-DM "pmic_bus" interface. When SYSRESET is enabled, this can all be > replaced with a sysreset device using the DM_PMIC interface. > > Since the trigger bit is the same on all PMIC variants, use the register > definitions from the oldest supported PMIC. > > Signed-off-by: Samuel Holland <[email protected]> This looks alright, but doesn't apply anymore, since you removed axp_pmic_bind() in v2 of the DM_I2C series. Can you rebase this series (or just 4/4) on top of master? I will take the first three patches anyway, they apply cleanly. Thanks, Andre > --- > > drivers/power/pmic/Kconfig | 2 ++ > drivers/power/pmic/axp.c | 36 ++++++++++++++++++++++++++++++++++++ > 2 files changed, 38 insertions(+) > > diff --git a/drivers/power/pmic/Kconfig b/drivers/power/pmic/Kconfig > index 6a3e82e1be7..983fe135157 100644 > --- a/drivers/power/pmic/Kconfig > +++ b/drivers/power/pmic/Kconfig > @@ -60,6 +60,8 @@ config PMIC_ACT8846 > config PMIC_AXP > bool "Enable Driver Model for X-Powers AXP PMICs" > depends on DM_I2C > + select SYSRESET_CMD_POWEROFF if SYSRESET && CMD_POWEROFF > + imply CMD_POWEROFF if SYSRESET > help > This config enables driver-model PMIC uclass features for > X-Powers AXP152, AXP2xx, and AXP8xx PMICs. > diff --git a/drivers/power/pmic/axp.c b/drivers/power/pmic/axp.c > index 7720e1afd9b..0f2b24a8b5f 100644 > --- a/drivers/power/pmic/axp.c > +++ b/drivers/power/pmic/axp.c > @@ -1,8 +1,37 @@ > // SPDX-License-Identifier: GPL-2.0+ > > +#include <axp_pmic.h> > #include <dm.h> > +#include <dm/lists.h> > #include <i2c.h> > #include <power/pmic.h> > +#include <sysreset.h> > + > +#if CONFIG_IS_ENABLED(SYSRESET) > +static int axp_sysreset_request(struct udevice *dev, enum sysreset_t type) > +{ > + int ret; > + > + if (type != SYSRESET_POWER_OFF) > + return -EPROTONOSUPPORT; > + > + ret = pmic_clrsetbits(dev->parent, AXP152_SHUTDOWN, 0, AXP152_POWEROFF); > + if (ret < 0) > + return ret; > + > + return -EINPROGRESS; > +} > + > +static struct sysreset_ops axp_sysreset_ops = { > + .request = axp_sysreset_request, > +}; > + > +U_BOOT_DRIVER(axp_sysreset) = { > + .name = "axp_sysreset", > + .id = UCLASS_SYSRESET, > + .ops = &axp_sysreset_ops, > +}; > +#endif > > static int axp_pmic_reg_count(struct udevice *dev) > { > @@ -24,6 +53,13 @@ static int axp_pmic_bind(struct udevice *dev) > if (ret) > return ret; > > + if (CONFIG_IS_ENABLED(SYSRESET)) { > + ret = device_bind_driver_to_node(dev, "axp_sysreset", > "axp_sysreset", > + dev_ofnode(dev), NULL); > + if (ret) > + return ret; > + } > + > return 0; > } >

