greybus: arche-platform: Disable HUB3613 only in APB poweroff fn
authorVaibhav Hiremath <vaibhav.hiremath@linaro.org>
Thu, 25 Feb 2016 11:15:45 +0000 (16:45 +0530)
committerGreg Kroah-Hartman <gregkh@google.com>
Fri, 26 Feb 2016 00:28:17 +0000 (16:28 -0800)
HUB3613 configuration, either disable (Standby mode) or enable (HUB mode)
is related to APB. So it makes perfect sense to put both of them
together in one function.

HUB3613 enable happens only at one place, in hub_conf_delayed_work() fn,
but disable is initiated from multiple places.
Move all calls to usb3613_hub_mode_ctrl(false) to apb_poweroff().

Testing Done: Tested on DB3.5 platform.

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

index f44c34314127e9c0523e9416600a20d449817f87..64dd8a1ebe37d26e6c8b3fe9d931f9a214d39bf6 100644 (file)
@@ -94,6 +94,10 @@ static int apb_poweroff(struct device *dev, void *data)
 {
        apb_ctrl_poweroff(dev);
 
+       /* Enable HUB3613 into HUB mode. */
+       if (usb3613_hub_mode_ctrl(false))
+               dev_warn(dev, "failed to control hub device\n");
+
        return 0;
 }
 
@@ -142,6 +146,7 @@ static irqreturn_t arche_platform_wd_irq_thread(int irq, void *devid)
 
        /* It should complete power cycle, so first make sure it is poweroff */
        device_for_each_child(arche_pdata->dev, NULL, apb_poweroff);
+
        /* Bring APB out of reset: cold boot sequence */
        device_for_each_child(arche_pdata->dev, NULL, apb_cold_boot);
 
@@ -301,10 +306,6 @@ static ssize_t state_store(struct device *dev,
 
                arche_platform_poweroff_seq(arche_pdata);
 
-               ret = usb3613_hub_mode_ctrl(false);
-               if (ret)
-                       dev_warn(arche_pdata->dev, "failed to control hub device\n");
-                       /* TODO: Should we do anything more here ?? */
        } else if (sysfs_streq(buf, "active")) {
                if (arche_pdata->state == ARCHE_PLATFORM_STATE_ACTIVE)
                        return count;
@@ -327,11 +328,6 @@ static ssize_t state_store(struct device *dev,
 
                arche_platform_poweroff_seq(arche_pdata);
 
-               ret = usb3613_hub_mode_ctrl(false);
-               if (ret)
-                       dev_warn(arche_pdata->dev, "failed to control hub device\n");
-                       /* TODO: Should we do anything more here ?? */
-
                arche_platform_fw_flashing_seq(arche_pdata);
 
                device_for_each_child(arche_pdata->dev, NULL, apb_fw_flashing_state);