enum sof_ipc_type *ipc_type_to_adjust)
{
enum sof_ipc_type fw_ipc_type;
- const struct firmware *fw;
- const char *fw_filename;
const u32 *magic;
int ret;
- fw_filename = kasprintf(GFP_KERNEL, "%s/%s", profile->fw_path,
- profile->fw_name);
+ const char *fw_filename __free(kfree) =
+ kasprintf(GFP_KERNEL, "%s/%s", profile->fw_path,
+ profile->fw_name);
if (!fw_filename)
return -ENOMEM;
+ const struct firmware *fw __free(firmware) = NULL;
ret = firmware_request_nowarn(&fw, fw_filename, dev);
if (ret < 0) {
dev_dbg(dev, "Failed to open firmware file: %s\n", fw_filename);
- kfree(fw_filename);
return ret;
}
break;
default:
dev_err(dev, "Invalid firmware magic: %#x\n", *magic);
- ret = -EINVAL;
- goto out;
+ return -EINVAL;
}
if (ipc_type_to_adjust) {
dev_err(dev,
"ipc type mismatch between %s and expected: %d vs %d\n",
fw_filename, fw_ipc_type, profile->ipc_type);
- ret = -EINVAL;
+ return -EINVAL;
}
-out:
- release_firmware(fw);
- kfree(fw_filename);
- return ret;
+ return 0;
}
static int sof_test_topology_file(struct device *dev,
struct snd_sof_dev *sdev = snd_soc_component_get_drvdata(scomp);
struct snd_sof_pdata *sof_pdata = sdev->pdata;
const char *tplg_filename_prefix = sof_pdata->tplg_filename_prefix;
- const struct firmware *fw;
- const char **tplg_files;
int tplg_cnt = 0;
int ret;
int i;
- tplg_files = kcalloc(scomp->card->num_links, sizeof(char *), GFP_KERNEL);
+ const char **tplg_files __free(kfree) =
+ kcalloc(scomp->card->num_links, sizeof(char *), GFP_KERNEL);
if (!tplg_files)
return -ENOMEM;
tplg_filename_prefix,
&tplg_files,
no_fallback);
- if (tplg_cnt < 0) {
- kfree(tplg_files);
+ if (tplg_cnt < 0)
return tplg_cnt;
- }
}
/*
if (strstr(file, "dummy")) {
dev_err(scomp->dev,
"Function topology is required, please upgrade sof-firmware\n");
-
- kfree(tplg_files);
return -EINVAL;
}
tplg_files[0] = file;
if (tplg_files[0] != file)
dev_info(scomp->dev, "loading topology %d: %s\n", i, tplg_files[i]);
+ const struct firmware *fw __free(firmware) = NULL;
ret = request_firmware(&fw, tplg_files[i], scomp->dev);
if (ret < 0) {
/*
else
ret = snd_soc_tplg_component_load(scomp, &sof_tplg_ops, fw);
- release_firmware(fw);
-
if (ret < 0) {
dev_err(scomp->dev, "tplg %s component load failed %d\n",
tplg_files[i], ret);
goto out;
}
dev_info(scomp->dev, "loading feature topology %d: %s\n", i, feature_topology);
+
+ const struct firmware *fw __free(firmware) = NULL;
ret = request_firmware(&fw, feature_topology, scomp->dev);
if (ret < 0) {
/*
else
ret = snd_soc_tplg_component_load(scomp, &sof_tplg_ops, fw);
- release_firmware(fw);
-
if (ret < 0) {
dev_err(scomp->dev, "feature tplg %s component load failed %d\n",
feature_topologies[i], ret);
if (ret >= 0 && sdev->led_present)
ret = snd_ctl_led_request();
- kfree(tplg_files);
-
return ret;
}
EXPORT_SYMBOL(snd_sof_load_topology);