summaryrefslogtreecommitdiff
path: root/drivers/dma/imx-sdma.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/dma/imx-sdma.c')
-rw-r--r--drivers/dma/imx-sdma.c43
1 files changed, 24 insertions, 19 deletions
diff --git a/drivers/dma/imx-sdma.c b/drivers/dma/imx-sdma.c
index 5bc67b7c33ed..ef5235cd8c03 100644
--- a/drivers/dma/imx-sdma.c
+++ b/drivers/dma/imx-sdma.c
@@ -2338,10 +2338,15 @@ static int sdma_get_firmware(struct sdma_engine *sdma,
const char *fw_name)
{
int ret;
+ const struct firmware *fw;
- ret = request_firmware_nowait(THIS_MODULE,
- FW_ACTION_UEVENT, fw_name, sdma->dev,
- GFP_KERNEL, sdma, sdma_load_firmware);
+ ret = request_firmware(&fw, fw_name, sdma->dev);
+ if (ret < 0) {
+ dev_err(sdma->dev, "failed to request firmware %s\n", fw_name);
+ return ret;
+ }
+
+ sdma_load_firmware(fw, sdma);
return ret;
}
@@ -2550,6 +2555,22 @@ static int sdma_probe(struct platform_device *pdev)
platform_set_drvdata(pdev, sdma);
+ /*
+ * Because that device tree does not encode ROM script address,
+ * the RAM script in firmware is mandatory for device tree
+ * probe, otherwise it fails.
+ */
+ ret = of_property_read_string(np, "fsl,sdma-ram-script-name",
+ &fw_name);
+ if (ret)
+ dev_warn(&pdev->dev, "failed to get firmware name\n");
+ else
+ sdma->fw_name = fw_name;
+
+ ret = sdma_get_firmware(sdma, sdma->fw_name);
+ if (ret)
+ dev_warn(sdma->dev, "failed to get firmware.\n");
+
ret = dma_async_device_register(&sdma->dma_device);
if (ret) {
dev_err(&pdev->dev, "unable to register\n");
@@ -2572,22 +2593,6 @@ static int sdma_probe(struct platform_device *pdev)
of_node_put(spba_bus);
}
- /*
- * Because that device tree does not encode ROM script address,
- * the RAM script in firmware is mandatory for device tree
- * probe, otherwise it fails.
- */
- ret = of_property_read_string(np, "fsl,sdma-ram-script-name",
- &fw_name);
- if (ret)
- dev_warn(&pdev->dev, "failed to get firmware name\n");
- else
- sdma->fw_name = fw_name;
-
- ret = sdma_get_firmware(sdma, sdma->fw_name);
- if (ret)
- dev_warn(sdma->dev, "failed to get firmware.\n");
-
/* enable autosuspend for pm_runtime */
if (sdma->drvdata->pm_runtime) {
pm_runtime_set_autosuspend_delay(&pdev->dev, 8000);