ASoC: Intel: sst: load firmware using async callback
authorVinod Koul <vinod.koul@intel.com>
Thu, 30 Oct 2014 10:50:56 +0000 (16:20 +0530)
committerMark Brown <broonie@kernel.org>
Fri, 31 Oct 2014 12:50:38 +0000 (12:50 +0000)
We would like the DSP firmware to be available in driver as soon as possible. So
use the async callback in driver to probe to load the firmware as soon as
usermode is up

Signed-off-by: Subhransu S. Prusty <subhransu.s.prusty@intel.com>
Signed-off-by: Vinod Koul <vinod.koul@intel.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/intel/sst/sst.c

index 04af2460f9cce7824ff43e6887267bbaea35c1c5..fdada405eda7983ed6e7b8f60132dfdf2cf93d8c 100644 (file)
@@ -364,6 +364,21 @@ static int intel_sst_probe(struct pci_dev *pci,
 
 
        sst_set_fw_state_locked(sst_drv_ctx, SST_RESET);
+       snprintf(sst_drv_ctx->firmware_name, sizeof(sst_drv_ctx->firmware_name),
+                       "%s%04x%s", "fw_sst_",
+                       sst_drv_ctx->dev_id, ".bin");
+       dev_dbg(sst_drv_ctx->dev,
+               "Requesting FW %s now...\n", sst_drv_ctx->firmware_name);
+       ret = request_firmware_nowait(THIS_MODULE, 1,
+                       sst_drv_ctx->firmware_name, sst_drv_ctx->dev,
+                       GFP_KERNEL, sst_drv_ctx, sst_firmware_load_cb);
+
+       if (ret) {
+               dev_err(sst_drv_ctx->dev,
+                       "Firmware load failed with error: %d\n", ret);
+               goto do_release_regions;
+       }
+
        sst_drv_ctx->irq_num = pci->irq;
        /* Register the ISR */
        ret = devm_request_threaded_irq(&pci->dev, pci->irq,