mirror of https://github.com/thesofproject/sof.git
dai-zephyr/dai-legacy: split the dai_prepare() function
Split the dai_prepare() function and add a new helper, dai_zephyr_prepare() that can also be invoked from the copier device. Also modify the dai_config_prepare() function to pass the dai_data and device separately for use with the copier device. Signed-off-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
This commit is contained in:
parent
c8dc91ea53
commit
9da71a8708
|
@ -618,9 +618,8 @@ static int dai_params(struct comp_dev *dev,
|
|||
dai_capture_params(dev, period_bytes, period_count);
|
||||
}
|
||||
|
||||
static int dai_config_prepare(struct comp_dev *dev)
|
||||
static int dai_config_prepare(struct dai_data *dd, struct comp_dev *dev)
|
||||
{
|
||||
struct dai_data *dd = comp_get_drvdata(dev);
|
||||
int channel = 0;
|
||||
|
||||
/* cannot configure DAI while active */
|
||||
|
@ -669,24 +668,10 @@ static int dai_config_prepare(struct comp_dev *dev)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int dai_prepare(struct comp_dev *dev)
|
||||
static int dai_zephyr_prepare(struct dai_data *dd, struct comp_dev *dev)
|
||||
{
|
||||
struct dai_data *dd = comp_get_drvdata(dev);
|
||||
struct comp_buffer __sparse_cache *buffer_c;
|
||||
int ret = 0;
|
||||
|
||||
comp_info(dev, "dai_prepare()");
|
||||
|
||||
ret = dai_config_prepare(dev);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
ret = comp_set_state(dev, COMP_TRIGGER_PREPARE);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
if (ret == COMP_STATUS_STATE_ALREADY_SET)
|
||||
return PPL_STATUS_PATH_STOP;
|
||||
int ret;
|
||||
|
||||
dd->total_data_processed = 0;
|
||||
|
||||
|
@ -711,7 +696,7 @@ static int dai_prepare(struct comp_dev *dev)
|
|||
if (dd->xrun) {
|
||||
/* after prepare, we have recovered from xrun */
|
||||
dd->xrun = 0;
|
||||
return ret;
|
||||
return 0;
|
||||
}
|
||||
|
||||
ret = dma_set_config_legacy(dd->chan, &dd->config);
|
||||
|
@ -721,6 +706,27 @@ static int dai_prepare(struct comp_dev *dev)
|
|||
return ret;
|
||||
}
|
||||
|
||||
static int dai_prepare(struct comp_dev *dev)
|
||||
{
|
||||
struct dai_data *dd = comp_get_drvdata(dev);
|
||||
int ret;
|
||||
|
||||
comp_info(dev, "dai_prepare()");
|
||||
|
||||
ret = dai_config_prepare(dd, dev);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
ret = comp_set_state(dev, COMP_TRIGGER_PREPARE);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
if (ret == COMP_STATUS_STATE_ALREADY_SET)
|
||||
return PPL_STATUS_PATH_STOP;
|
||||
|
||||
return dai_zephyr_prepare(dd, dev);
|
||||
}
|
||||
|
||||
static int dai_reset(struct comp_dev *dev)
|
||||
{
|
||||
struct dai_data *dd = comp_get_drvdata(dev);
|
||||
|
|
|
@ -874,9 +874,8 @@ static int dai_params(struct comp_dev *dev, struct sof_ipc_stream_params *params
|
|||
dai_capture_params(dev, period_bytes, period_count);
|
||||
}
|
||||
|
||||
static int dai_config_prepare(struct comp_dev *dev)
|
||||
static int dai_config_prepare(struct dai_data *dd, struct comp_dev *dev)
|
||||
{
|
||||
struct dai_data *dd = comp_get_drvdata(dev);
|
||||
int channel;
|
||||
|
||||
/* cannot configure DAI while active */
|
||||
|
@ -922,35 +921,21 @@ static int dai_config_prepare(struct comp_dev *dev)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int dai_prepare(struct comp_dev *dev)
|
||||
static int dai_zephyr_prepare(struct dai_data *dd, struct comp_dev *dev)
|
||||
{
|
||||
struct dai_data *dd = comp_get_drvdata(dev);
|
||||
struct comp_buffer __sparse_cache *buffer_c;
|
||||
int ret;
|
||||
|
||||
comp_dbg(dev, "dai_prepare()");
|
||||
|
||||
ret = dai_config_prepare(dev);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
ret = comp_set_state(dev, COMP_TRIGGER_PREPARE);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
if (ret == COMP_STATUS_STATE_ALREADY_SET)
|
||||
return PPL_STATUS_PATH_STOP;
|
||||
|
||||
dd->total_data_processed = 0;
|
||||
|
||||
if (!dd->chan) {
|
||||
comp_err(dev, "dai_prepare(): Missing dd->chan.");
|
||||
comp_err(dev, "dai_zephyr_prepare(): Missing dd->chan.");
|
||||
comp_set_state(dev, COMP_TRIGGER_RESET);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (!dd->config.elem_array.elems) {
|
||||
comp_err(dev, "dai_prepare(): Missing dd->config.elem_array.elems.");
|
||||
comp_err(dev, "dai_zephyr_prepare(): Missing dd->config.elem_array.elems.");
|
||||
comp_set_state(dev, COMP_TRIGGER_RESET);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
@ -964,7 +949,7 @@ static int dai_prepare(struct comp_dev *dev)
|
|||
if (dd->xrun) {
|
||||
/* after prepare, we have recovered from xrun */
|
||||
dd->xrun = 0;
|
||||
return ret;
|
||||
return 0;
|
||||
}
|
||||
|
||||
ret = dma_config(dd->chan->dma->z_dev, dd->chan->index, dd->z_config);
|
||||
|
@ -974,6 +959,27 @@ static int dai_prepare(struct comp_dev *dev)
|
|||
return ret;
|
||||
}
|
||||
|
||||
static int dai_prepare(struct comp_dev *dev)
|
||||
{
|
||||
struct dai_data *dd = comp_get_drvdata(dev);
|
||||
int ret;
|
||||
|
||||
comp_dbg(dev, "dai_prepare()");
|
||||
|
||||
ret = dai_config_prepare(dd, dev);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
ret = comp_set_state(dev, COMP_TRIGGER_PREPARE);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
if (ret == COMP_STATUS_STATE_ALREADY_SET)
|
||||
return PPL_STATUS_PATH_STOP;
|
||||
|
||||
return dai_zephyr_prepare(dd, dev);
|
||||
}
|
||||
|
||||
static int dai_reset(struct comp_dev *dev)
|
||||
{
|
||||
struct dai_data *dd = comp_get_drvdata(dev);
|
||||
|
|
Loading…
Reference in New Issue