mirror of https://github.com/thesofproject/sof.git
IPC: DAI: Expand DAI_CONFIG IPC flags
Some DAI components, such as HDaudio, need to be stopped in two steps a) stop the DAI component b) stop the DAI DMA This patch enables this two-step stop by expanding the DAI_CONFIG IPC flags and split them into 2 parts. The 4 LSB bits indicate when the DAI_CONFIG IPC is sent, ex: hw_params, hw_free or pause. The 4 MSB bits are used as the quirk flags to be used along with the command flags. The quirk flag called SOF_DAI_CONFIG_FLAGS_2_STEP_STOP shall be set along with the HW_PARAMS command flag, i.e. before the pipeline is started so that the stop/pause trigger op in the FW can take the appropriate action to either perform/skip the DMA stop. If set, the DMA stop will be executed when the DAI_CONFIG IPC is sent during hw_free. In the case of pause, DMA pause will be handled when the DAI_CONFIG IPC is sent with the PAUSE command flag. Along with this, modify the signature for the hda_ctrl_dai_widget_setup/ hda_ctrl_dai_widget_free() functions to take additional flags as an argument and modify all users to pass the appropriate quirk flags. Only the HDA DAI's need to pass the SOF_DAI_CONFIG_FLAGS_2_STEP_STOP quirk flag during hw_params to indicate that it supports two-step stop and pause. Signed-off-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
This commit is contained in:
parent
500e96b6ac
commit
f6c4853271
|
@ -714,7 +714,7 @@ static int ssp_set_config_tplg(struct dai *dai, struct ipc_config_dai *common_co
|
|||
ssp->state[DAI_DIR_CAPTURE] = COMP_STATE_PREPARE;
|
||||
|
||||
clk:
|
||||
switch (config->flags & SOF_DAI_CONFIG_FLAGS_MASK) {
|
||||
switch (config->flags & SOF_DAI_CONFIG_FLAGS_CMD_MASK) {
|
||||
case SOF_DAI_CONFIG_FLAGS_HW_PARAMS:
|
||||
if (ssp->params.clks_control & SOF_DAI_INTEL_SSP_CLKCTRL_MCLK_ES) {
|
||||
ret = ssp_mclk_prepare_enable(dai);
|
||||
|
|
|
@ -53,12 +53,25 @@
|
|||
#define SOF_DAI_FMT_INV_MASK 0x0f00
|
||||
#define SOF_DAI_FMT_CLOCK_PROVIDER_MASK 0xf000
|
||||
|
||||
/* DAI_CONFIG flags */
|
||||
#define SOF_DAI_CONFIG_FLAGS_MASK 0x3
|
||||
#define SOF_DAI_CONFIG_FLAGS_NONE (0 << 0) /**< DAI_CONFIG sent without stage information */
|
||||
#define SOF_DAI_CONFIG_FLAGS_HW_PARAMS (1 << 0) /**< DAI_CONFIG sent during hw_params stage */
|
||||
#define SOF_DAI_CONFIG_FLAGS_HW_FREE (2 << 0) /**< DAI_CONFIG sent during hw_free stage */
|
||||
#define SOF_DAI_CONFIG_FLAGS_RFU (3 << 0) /**< not used, reserved for future use */
|
||||
/*
|
||||
* DAI_CONFIG flags. The 4 LSB bits are used for the commands, HW_PARAMS, HW_FREE and PAUSE
|
||||
* representing when the IPC is sent. The 4 MSB bits are used to add quirks along with the above
|
||||
* commands.
|
||||
*/
|
||||
#define SOF_DAI_CONFIG_FLAGS_CMD_MASK 0xF
|
||||
#define SOF_DAI_CONFIG_FLAGS_NONE 0 /**< DAI_CONFIG sent without stage information */
|
||||
#define SOF_DAI_CONFIG_FLAGS_HW_PARAMS BIT(0) /**< DAI_CONFIG sent during hw_params stage */
|
||||
#define SOF_DAI_CONFIG_FLAGS_HW_FREE BIT(1) /**< DAI_CONFIG sent during hw_free stage */
|
||||
/**< DAI_CONFIG sent during pause trigger. Only available ABI 3.20 onwards */
|
||||
#define SOF_DAI_CONFIG_FLAGS_PAUSE BIT(2)
|
||||
#define SOF_DAI_CONFIG_FLAGS_QUIRK_SHIFT 4
|
||||
#define SOF_DAI_CONFIG_FLAGS_QUIRK_MASK (0xF << SOF_DAI_CONFIG_FLAGS_QUIRK_SHIFT)
|
||||
/*
|
||||
* This should be used along with the SOF_DAI_CONFIG_FLAGS_HW_PARAMS to indicate that pipeline
|
||||
* stop/pause and DAI DMA stop/pause should happen in two steps. This change is only available
|
||||
* ABI 3.20 onwards.
|
||||
*/
|
||||
#define SOF_DAI_CONFIG_FLAGS_2_STEP_STOP BIT(0)
|
||||
|
||||
/** \brief Types of DAI */
|
||||
enum sof_ipc_dai_type {
|
||||
|
|
|
@ -29,7 +29,7 @@
|
|||
|
||||
/** \brief SOF ABI version major, minor and patch numbers */
|
||||
#define SOF_ABI_MAJOR 3
|
||||
#define SOF_ABI_MINOR 19
|
||||
#define SOF_ABI_MINOR 20
|
||||
#define SOF_ABI_PATCH 0
|
||||
|
||||
/** \brief SOF ABI version number. Format within 32bit word is MMmmmppp */
|
||||
|
|
Loading…
Reference in New Issue