Hi Jaehoon, On Thu, Sep 23, 2021 at 2:23 PM Jaehoon Chung <jh80.ch...@samsung.com> wrote: > > Hi Alexandre, > > On 9/21/21 12:48 AM, Alexandre Ghiti wrote: > > This pmic device is present on the SiFive Unmatched board and this > > new driver adds the possibility to reset it. > > Is there any patch before applying this? > I cant' apply this from patchwork for checking. > If i missed something, let me know, plz.
Sorry about this, I was working on another tree than master. Please see the v2 of this patchset which fixes that and takes into account Heinrich suggestion. Thanks, Alex > > Best Regards, > Jaehoon Chung > > > > > Signed-off-by: Alexandre Ghiti <alexandre.gh...@canonical.com> > > --- > > configs/sifive_unmatched_defconfig | 2 ++ > > drivers/power/pmic/da9063.c | 49 ++++++++++++++++++++++++++++++ > > 2 files changed, 51 insertions(+) > > > > diff --git a/configs/sifive_unmatched_defconfig > > b/configs/sifive_unmatched_defconfig > > index 978818b688..9ab058be39 100644 > > --- a/configs/sifive_unmatched_defconfig > > +++ b/configs/sifive_unmatched_defconfig > > @@ -43,3 +43,5 @@ CONFIG_DM_USB=y > > CONFIG_USB_XHCI_HCD=y > > CONFIG_USB_XHCI_PCI=y > > CONFIG_BOARD_EARLY_INIT_F=y > > +CONFIG_DM_PMIC=y > > +CONFIG_DM_PMIC_DA9063=y > > diff --git a/drivers/power/pmic/da9063.c b/drivers/power/pmic/da9063.c > > index 25101d18f7..b04879d9c5 100644 > > --- a/drivers/power/pmic/da9063.c > > +++ b/drivers/power/pmic/da9063.c > > @@ -10,6 +10,7 @@ > > #include <dm.h> > > #include <i2c.h> > > #include <log.h> > > +#include <dm/lists.h> > > #include <power/pmic.h> > > #include <power/regulator.h> > > #include <power/da9063_pmic.h> > > @@ -87,6 +88,7 @@ static int da9063_bind(struct udevice *dev) > > { > > ofnode regulators_node; > > int children; > > + int ret; > > > > regulators_node = dev_read_subnode(dev, "regulators"); > > if (!ofnode_valid(regulators_node)) { > > @@ -101,6 +103,14 @@ static int da9063_bind(struct udevice *dev) > > if (!children) > > debug("%s: %s - no child found\n", __func__, dev->name); > > > > + if (CONFIG_IS_ENABLED(SYSRESET)) { > > + ret = device_bind_driver(dev, "da9063-sysreset", > > + "da9063-sysreset", NULL); > > + if (ret) > > + debug("%s: %s - failed to bind sysreset driver\n", > > + __func__, dev->name); > > + } > > + > > /* Always return success for this device */ > > return 0; > > } > > @@ -129,3 +139,42 @@ U_BOOT_DRIVER(pmic_da9063) = { > > .probe = da9063_probe, > > .ops = &da9063_ops, > > }; > > + > > +#ifdef CONFIG_SYSRESET > > +#include <sysreset.h> > > + > > +static int da9063_sysreset_request(struct udevice *dev, enum sysreset_t > > type) > > +{ > > + struct udevice *pmic_dev = dev->parent; > > + uint ret; > > + > > + if (type != SYSRESET_WARM && type != SYSRESET_COLD) > > + return -EPROTONOSUPPORT; > > + > > + ret = pmic_reg_write(pmic_dev, DA9063_REG_PAGE_CON, 0x00); > > + if (ret < 0) > > + return ret; > > + > > + /* Sets the WAKE_UP bit */ > > + ret = pmic_reg_write(pmic_dev, DA9063_REG_CONTROL_F, 0x04); > > + if (ret < 0) > > + return ret; > > + > > + /* Powerdown! */ > > + ret = pmic_reg_write(pmic_dev, DA9063_REG_CONTROL_A, 0x68); > > + if (ret < 0) > > + return ret; > > + > > + return -EINPROGRESS; > > +} > > + > > +static struct sysreset_ops da9063_sysreset_ops = { > > + .request = da9063_sysreset_request, > > +}; > > + > > +U_BOOT_DRIVER(da9063_sysreset) = { > > + .name = "da9063-sysreset", > > + .id = UCLASS_SYSRESET, > > + .ops = &da9063_sysreset_ops, > > +}; > > +#endif > > >