diff --git a/dsp/q6adm.c b/dsp/q6adm.c index 5a038c97796b..9a4a7f914a35 100644 --- a/dsp/q6adm.c +++ b/dsp/q6adm.c @@ -513,6 +513,17 @@ int adm_programable_channel_mixer(int port_id, int copp_idx, int session_id, pr_err("%s: Invalid port_id %#x\n", __func__, port_id); return -EINVAL; } + + /* + * check if PSPD is already configured + * if it is configured already, return 0 without applying PSPD. + */ + if (atomic_read(&this_adm.copp.cnt[port_idx][copp_idx]) > 1) { + pr_debug("%s: copp.cnt:%#x\n", __func__, + atomic_read(&this_adm.copp.cnt[port_idx][copp_idx])); + return 0; + } + /* * First 8 bytes are 4 bytes as rule number, 2 bytes as output * channel and 2 bytes as input channel.