audio: DAI: Add a delayed_dma_stop flag to DAI data

Add a new field, delayed_dma_stop to struct dai_data that will be set by
the host when the DAI_CONFIG IPC is sent during hw_params.

Signed-off-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
This commit is contained in:
Ranjani Sridharan 2021-10-06 10:38:45 -07:00 committed by Liam Girdwood
parent f6c4853271
commit 6b420fd538
3 changed files with 22 additions and 0 deletions

View File

@ -73,6 +73,9 @@
*/
#define SOF_DAI_CONFIG_FLAGS_2_STEP_STOP BIT(0)
#define SOF_DAI_QUIRK_IS_SET(flags, quirk) \
(((flags & SOF_DAI_CONFIG_FLAGS_QUIRK_MASK) >> SOF_DAI_CONFIG_FLAGS_QUIRK_SHIFT) & quirk)
/** \brief Types of DAI */
enum sof_ipc_dai_type {
SOF_DAI_INTEL_NONE = 0, /**< None */

View File

@ -179,6 +179,15 @@ struct dai_data {
void *dai_spec_config; /* dai specific config from the host */
uint64_t wallclock; /* wall clock at stream start */
/*
* flag indicating two-step stop/pause for DAI comp and DAI DMA.
* DAI stop occurs during STREAM_TRIG_STOP IPC and DMA stop during DAI_CONFIG IPC with
* the SOF_DAI_CONFIG_FLAGS_HW_FREE flag.
* DAI pause occurs during STREAM_TRIG_PAUSE IPC and DMA pause during DAI_CONFIG IPC with
* the SOF_DAI_CONFIG_FLAGS_PAUSE flag.
*/
bool delayed_dma_stop;
};
struct dai {

View File

@ -288,6 +288,16 @@ int dai_config(struct comp_dev *dev, struct ipc_config_dai *common_config,
return 0;
}
switch (config->flags & SOF_DAI_CONFIG_FLAGS_CMD_MASK) {
case SOF_DAI_CONFIG_FLAGS_HW_PARAMS:
/* set the delayed_dma_stop flag */
if (SOF_DAI_QUIRK_IS_SET(config->flags, SOF_DAI_CONFIG_FLAGS_2_STEP_STOP))
dd->delayed_dma_stop = true;
break;
default:
break;
}
if (dd->chan) {
comp_info(dev, "dai_config(): Configured. dma channel index %d, ignore...",
dd->chan->index);