greybus: arche-platform: Enter ACTIVE state only from OFF state
authorVaibhav Hiremath <vaibhav.hiremath@linaro.org>
Tue, 24 May 2016 13:02:03 +0000 (18:32 +0530)
committerGreg Kroah-Hartman <gregkh@google.com>
Thu, 26 May 2016 05:36:45 +0000 (22:36 -0700)
Make sure that, transition to active state happens only from OFF state.
Instead of imposing the restriction to user-space, driver internally
switches to OFF state and then to ACTIVE state.

Testing Done: Tested on EVT1.5 platform.

Signed-off-by: Vaibhav Hiremath <vaibhav.hiremath@linaro.org>
Tested-by: Michael Scott <michael.scott@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
drivers/staging/greybus/arche-platform.c

index a8e36e1..58b3707 100644 (file)
@@ -407,8 +407,15 @@ static ssize_t state_store(struct device *dev,
                if (arche_pdata->state == ARCHE_PLATFORM_STATE_ACTIVE)
                        goto exit;
 
+               /* First we want to make sure we power off everything
+                * and then activate back again */
+               device_for_each_child(arche_pdata->dev, NULL, apb_poweroff);
+               arche_platform_poweroff_seq(arche_pdata);
+
                arche_platform_wd_irq_en(arche_pdata);
                ret = arche_platform_coldboot_seq(arche_pdata);
+               if (ret)
+                       goto exit;
 
        } else if (sysfs_streq(buf, "standby")) {
                if (arche_pdata->state == ARCHE_PLATFORM_STATE_STANDBY)