diff --git a/src/drivers/intel/ssp/ssp.c b/src/drivers/intel/ssp/ssp.c index 3066611f2..1e0587657 100644 --- a/src/drivers/intel/ssp/ssp.c +++ b/src/drivers/intel/ssp/ssp.c @@ -246,8 +246,17 @@ static int ssp_set_config_tplg(struct dai *dai, struct ipc_config_dai *common_co /* ignore config if SSP is already configured */ if (ssp->state[DAI_DIR_PLAYBACK] > COMP_STATE_READY || ssp->state[DAI_DIR_CAPTURE] > COMP_STATE_READY) { - dai_info(dai, "ssp_set_config(): Already configured. Ignore config"); - goto clk; + if (!memcmp(&ssp->params, &config->ssp, sizeof(ssp->params))) { + dai_info(dai, "ssp_set_config(): Already configured. Ignore config"); + goto clk; + } + + if (ssp->clk_active & (SSP_CLK_MCLK_ACTIVE | SSP_CLK_BCLK_ACTIVE)) { + dai_warn(dai, "ssp_set_config(): SSP active, cannot change config"); + goto clk; + } + + /* safe to proceed and change HW config */ } dai_info(dai, "ssp_set_config(), config->format = 0x%4x",