Unverified Commit bc433fd7 authored by Ranjani Sridharan's avatar Ranjani Sridharan Committed by Mark Brown
Browse files
parent 4c30004a
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -138,6 +138,7 @@ struct sof_dev_desc {

	struct snd_sof_dsp_ops *ops;
	int (*ops_init)(struct snd_sof_dev *sdev);
	void (*ops_free)(struct snd_sof_dev *sdev);
};

int sof_dai_get_mclk(struct snd_soc_pcm_runtime *rtd);
+6 −1
Original line number Diff line number Diff line
@@ -189,7 +189,7 @@ static int sof_probe_continue(struct snd_sof_dev *sdev)
	ret = snd_sof_probe(sdev);
	if (ret < 0) {
		dev_err(sdev->dev, "error: failed to probe DSP %d\n", ret);
		return ret;
		goto probe_err;
	}

	sof_set_fw_state(sdev, SOF_FW_BOOT_PREPARE);
@@ -317,6 +317,8 @@ static int sof_probe_continue(struct snd_sof_dev *sdev)
	snd_sof_free_debug(sdev);
dsp_err:
	snd_sof_remove(sdev);
probe_err:
	sof_ops_free(sdev);

	/* all resources freed, update state to match */
	sof_set_fw_state(sdev, SOF_FW_BOOT_NOT_STARTED);
@@ -374,6 +376,7 @@ int snd_sof_device_probe(struct device *dev, struct snd_sof_pdata *plat_data)
	    !sof_ops(sdev)->block_read || !sof_ops(sdev)->block_write ||
	    !sof_ops(sdev)->send_msg || !sof_ops(sdev)->load_firmware ||
	    !sof_ops(sdev)->ipc_msg_data) {
		sof_ops_free(sdev);
		dev_err(dev, "error: missing mandatory ops\n");
		return -EINVAL;
	}
@@ -457,6 +460,8 @@ int snd_sof_device_remove(struct device *dev)
		snd_sof_remove(sdev);
	}

	sof_ops_free(sdev);

	/* release firmware */
	snd_sof_fw_unload(sdev);

+6 −0
Original line number Diff line number Diff line
@@ -29,6 +29,12 @@ static inline int sof_ops_init(struct snd_sof_dev *sdev)
	return 0;
}

static inline void sof_ops_free(struct snd_sof_dev *sdev)
{
	if (sdev->pdata->desc->ops_free)
		sdev->pdata->desc->ops_free(sdev);
}

/* Mandatory operations are verified during probing */

/* init */