greybus: firmware: abort if AP_READY fails
authorJohan Hovold <johan@hovoldconsulting.com>
Thu, 21 Jan 2016 16:34:26 +0000 (17:34 +0100)
committerGreg Kroah-Hartman <gregkh@google.com>
Fri, 22 Jan 2016 06:46:38 +0000 (22:46 -0800)
Abort if the AP_READY request fails.

Also update the comment suggesting that this operation was a temporary
one.

Reviewed-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
drivers/staging/greybus/firmware.c

index 6d8fd0ecbc1f1d3da095d31813de086912a6ded1..ee239a913e0c479f0e8a8faf32f407e9abdc98b6 100644 (file)
@@ -251,25 +251,23 @@ static int gb_firmware_connection_init(struct gb_connection *connection)
 
        firmware_es2_fixup_vid_pid(firmware);
 
-       /*
-        * Module's Bootrom needs a way to know (currently), when to start
-        * sending requests to the AP. The version request is sent before this
-        * routine is called, and if the module sends the request right after
-        * receiving version request, the connection->private field will be
-        * NULL.
-        *
-        * Fix this TEMPORARILY by sending an AP_READY request.
-        */
+       /* Tell bootrom we're ready. */
        ret = gb_operation_sync(connection, GB_FIRMWARE_TYPE_AP_READY, NULL, 0,
                                NULL, 0);
        if (ret) {
                dev_err(&connection->bundle->dev,
                                "failed to send AP READY: %d\n", ret);
+               goto err_free_firmware;
        }
 
        dev_dbg(&connection->bundle->dev, "%s: AP_READY sent\n", __func__);
 
        return 0;
+
+err_free_firmware:
+       kfree(firmware);
+
+       return ret;
 }
 
 static void gb_firmware_connection_exit(struct gb_connection *connection)