diff --git a/src/audio/base_fw.c b/src/audio/base_fw.c index 0be9435231a7..00d3ff39133a 100644 --- a/src/audio/base_fw.c +++ b/src/audio/base_fw.c @@ -276,6 +276,25 @@ static int basefw_resource_allocation_request(bool first_block, } } +static int basefw_mic_priv_state_changed(bool first_block, + bool last_block, + uint32_t data_offset_or_size, + const char *data) +{ +#if CONFIG_MICROPHONE_PRIVACY + tr_info(&basefw_comp_tr, "basefw_mic_priv_state_changed, status = %d", *data); + + uint32_t mic_disable_status = (uint32_t)(*data); + struct mic_privacy_settings settings = fill_mic_priv_settings(mic_disable_status); + + propagate_privacy_settings(&settings); + + return 0; +#else + return IPC4_UNAVAILABLE; +#endif +} + static int basefw_set_mic_priv_policy(bool first_block, bool last_block, uint32_t data_offset_or_size, @@ -666,6 +685,8 @@ static int basefw_set_large_config(struct comp_dev *dev, case IPC4_RESOURCE_ALLOCATION_REQUEST: return basefw_resource_allocation_request(first_block, last_block, data_offset, data); + case SNDW_MIC_PRIVACY_HW_MANAGED_STATE_CHANGE: + return basefw_mic_priv_state_changed(first_block, last_block, data_offset, data); case IPC4_SET_MIC_PRIVACY_FW_MANAGED_POLICY_MASK: return basefw_set_mic_priv_policy(first_block, last_block, data_offset, data); default: diff --git a/src/include/ipc4/base_fw.h b/src/include/ipc4/base_fw.h index 3f2c5d2fd7ba..6de5ec49c736 100644 --- a/src/include/ipc4/base_fw.h +++ b/src/include/ipc4/base_fw.h @@ -289,6 +289,12 @@ enum ipc4_basefw_params { /* Use LARGE_CONFIG_SET to change SDW ownership */ IPC4_SDW_OWNERSHIP = 31, + /*! + * This command is used by SW to notify FW for changing state of Mic Privacy + * for SoundWire Gateways + */ + SNDW_MIC_PRIVACY_HW_MANAGED_STATE_CHANGE = 35, + IPC4_SET_MIC_PRIVACY_FW_MANAGED_POLICY_MASK = 36, };