greybus: bundle: add activate and deactivate
authorDavid Lin <dtwlin@google.com>
Thu, 14 Jul 2016 20:13:00 +0000 (15:13 -0500)
committerAlex Elder <elder@linaro.org>
Thu, 14 Jul 2016 21:53:55 +0000 (16:53 -0500)
AP shall send the Bundle Activate Operation to power on a bundle, and
send the Bundle Deactivate Request after closing all the associated
connections for power down.

Testing Done:
 - Check for the return code of the bundle activate and deactivate
  operation sent

Signed-off-by: David Lin <dtwlin@google.com>
Signed-off-by: Axel Haslam <ahaslam@baylibre.com>
Reviewed-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Alex Elder <elder@linaro.org>
drivers/staging/greybus/core.c

index dacc49c..ca3bad9 100644 (file)
@@ -162,6 +162,13 @@ static int greybus_probe(struct device *dev)
        if (!id)
                return -ENODEV;
 
+       /*
+        * FIXME: We need to perform error handling on bundle activate call
+        * below when firmware is ready. We just allow the activate operation to
+        * fail for now since bundle may be in active already.
+        */
+       gb_control_bundle_activate(bundle->intf->control, bundle->id);
+
        retval = driver->probe(bundle, id);
        if (retval) {
                /*
@@ -169,6 +176,8 @@ static int greybus_probe(struct device *dev)
                 */
                WARN_ON(!list_empty(&bundle->connections));
 
+               gb_control_bundle_deactivate(bundle->intf->control, bundle->id);
+
                return retval;
        }
 
@@ -203,6 +212,9 @@ static int greybus_remove(struct device *dev)
        /* Catch buggy drivers that fail to destroy their connections. */
        WARN_ON(!list_empty(&bundle->connections));
 
+       if (!bundle->intf->disconnected)
+               gb_control_bundle_deactivate(bundle->intf->control, bundle->id);
+
        return 0;
 }