aboutsummaryrefslogtreecommitdiffstats
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.c23
1 files changed, 16 insertions, 7 deletions
diff --git a/drivers/dma/imx-sdma.c b/drivers/dma/imx-sdma.c
index 8abf8c190aad..b5cc27dc9a51 100644
--- a/drivers/dma/imx-sdma.c
+++ b/drivers/dma/imx-sdma.c
@@ -1143,18 +1143,17 @@ static void sdma_add_scripts(struct sdma_engine *sdma,
1143 saddr_arr[i] = addr_arr[i]; 1143 saddr_arr[i] = addr_arr[i];
1144} 1144}
1145 1145
1146static int __init sdma_get_firmware(struct sdma_engine *sdma, 1146static void sdma_load_firmware(const struct firmware *fw, void *context)
1147 const char *fw_name)
1148{ 1147{
1149 const struct firmware *fw; 1148 struct sdma_engine *sdma = context;
1150 const struct sdma_firmware_header *header; 1149 const struct sdma_firmware_header *header;
1151 int ret;
1152 const struct sdma_script_start_addrs *addr; 1150 const struct sdma_script_start_addrs *addr;
1153 unsigned short *ram_code; 1151 unsigned short *ram_code;
1154 1152
1155 ret = request_firmware(&fw, fw_name, sdma->dev); 1153 if (!fw) {
1156 if (ret) 1154 dev_err(sdma->dev, "firmware not found\n");
1157 return ret; 1155 return;
1156 }
1158 1157
1159 if (fw->size < sizeof(*header)) 1158 if (fw->size < sizeof(*header))
1160 goto err_firmware; 1159 goto err_firmware;
@@ -1184,6 +1183,16 @@ static int __init sdma_get_firmware(struct sdma_engine *sdma,
1184 1183
1185err_firmware: 1184err_firmware:
1186 release_firmware(fw); 1185 release_firmware(fw);
1186}
1187
1188static int __init sdma_get_firmware(struct sdma_engine *sdma,
1189 const char *fw_name)
1190{
1191 int ret;
1192
1193 ret = request_firmware_nowait(THIS_MODULE,
1194 FW_ACTION_HOTPLUG, fw_name, sdma->dev,
1195 GFP_KERNEL, sdma, sdma_load_firmware);
1187 1196
1188 return ret; 1197 return ret;
1189} 1198}