pmic: stpmic1: add support for SYSRESET_POWER_OFF
authorPatrick Delaunay <patrick.delaunay@st.com>
Mon, 20 May 2019 07:47:07 +0000 (09:47 +0200)
committerPatrick Delaunay <patrick.delaunay@st.com>
Fri, 12 Jul 2019 09:18:53 +0000 (11:18 +0200)
Adds support for SYSRESET_POWER_OFF = PMIC power off used by command
power off and introduced by commit 751fed426f87 ("sysreset: Add a way
to find the last reset").
The driver use SYSRESET_POWER for the PMIC-level power cycle, with restart.

Signed-off-by: Patrick Delaunay <patrick.delaunay@st.com>
drivers/power/pmic/stpmic1.c

index 65296c5fc3a0dc26c334910e169e4f2431c44c4e..c3381489dda51ad14e331231e16404e16d612ec5 100644 (file)
@@ -221,7 +221,7 @@ static int stpmic1_sysreset_request(struct udevice *dev, enum sysreset_t type)
        struct udevice *pmic_dev;
        int ret;
 
-       if (type != SYSRESET_POWER)
+       if (type != SYSRESET_POWER && type != SYSRESET_POWER_OFF)
                return -EPROTONOSUPPORT;
 
        ret = uclass_get_device_by_driver(UCLASS_PMIC,
@@ -235,8 +235,13 @@ static int stpmic1_sysreset_request(struct udevice *dev, enum sysreset_t type)
        if (ret < 0)
                return ret;
 
-       ret = pmic_reg_write(pmic_dev, STPMIC1_MAIN_CR,
-                            ret | STPMIC1_SWOFF | STPMIC1_RREQ_EN);
+       ret |= STPMIC1_SWOFF;
+       ret &= ~STPMIC1_RREQ_EN;
+       /* request Power Cycle */
+       if (type == SYSRESET_POWER)
+               ret |= STPMIC1_RREQ_EN;
+
+       ret = pmic_reg_write(pmic_dev, STPMIC1_MAIN_CR, ret);
        if (ret < 0)
                return ret;