|
@@ -2070,6 +2070,7 @@ void b43_do_release_fw(struct b43_firmware_file *fw)
|
|
|
|
|
|
static void b43_release_firmware(struct b43_wldev *dev)
|
|
|
{
|
|
|
+ complete(&dev->fw_load_complete);
|
|
|
b43_do_release_fw(&dev->fw.ucode);
|
|
|
b43_do_release_fw(&dev->fw.pcm);
|
|
|
b43_do_release_fw(&dev->fw.initvals);
|
|
@@ -2095,7 +2096,7 @@ static void b43_fw_cb(const struct firmware *firmware, void *context)
|
|
|
struct b43_request_fw_context *ctx = context;
|
|
|
|
|
|
ctx->blob = firmware;
|
|
|
- complete(&ctx->fw_load_complete);
|
|
|
+ complete(&ctx->dev->fw_load_complete);
|
|
|
}
|
|
|
|
|
|
int b43_do_request_fw(struct b43_request_fw_context *ctx,
|
|
@@ -2142,7 +2143,7 @@ int b43_do_request_fw(struct b43_request_fw_context *ctx,
|
|
|
}
|
|
|
if (async) {
|
|
|
/* do this part asynchronously */
|
|
|
- init_completion(&ctx->fw_load_complete);
|
|
|
+ init_completion(&ctx->dev->fw_load_complete);
|
|
|
err = request_firmware_nowait(THIS_MODULE, 1, ctx->fwname,
|
|
|
ctx->dev->dev->dev, GFP_KERNEL,
|
|
|
ctx, b43_fw_cb);
|
|
@@ -2150,12 +2151,11 @@ int b43_do_request_fw(struct b43_request_fw_context *ctx,
|
|
|
pr_err("Unable to load firmware\n");
|
|
|
return err;
|
|
|
}
|
|
|
- /* stall here until fw ready */
|
|
|
- wait_for_completion(&ctx->fw_load_complete);
|
|
|
+ wait_for_completion(&ctx->dev->fw_load_complete);
|
|
|
if (ctx->blob)
|
|
|
goto fw_ready;
|
|
|
/* On some ARM systems, the async request will fail, but the next sync
|
|
|
- * request works. For this reason, we dall through here
|
|
|
+ * request works. For this reason, we fall through here
|
|
|
*/
|
|
|
}
|
|
|
err = request_firmware(&ctx->blob, ctx->fwname,
|