From 799a0a1190812d5ccb3c0590bf3eb3999233a2b6 Mon Sep 17 00:00:00 2001 From: Michal Bukowski Date: Mon, 20 Jan 2025 18:18:47 +0100 Subject: [PATCH] mic_privacy: implement new IPC - SNDW_MIC_PRIVACY_HW_MANAGED_STATE_CHANGE SW sends this IPC when microphone privacy state is changed for HW_MANAGED mode and SNDW interface. Signed-off-by: Michal Bukowski --- src/audio/base_fw_intel.c | 22 ++++++++++++++++++++++ src/include/ipc4/base_fw.h | 3 +++ 2 files changed, 25 insertions(+) diff --git a/src/audio/base_fw_intel.c b/src/audio/base_fw_intel.c index 71c573481a9a..85db72115764 100644 --- a/src/audio/base_fw_intel.c +++ b/src/audio/base_fw_intel.c @@ -363,6 +363,26 @@ static int basefw_set_mic_priv_policy(bool first_block, #endif } +static int basefw_mic_priv_state_changed(bool first_block, + bool last_block, + uint32_t data_offset_or_size, + const char *data) +{ +#if CONFIG_INTEL_ADSP_MIC_PRIVACY + tr_info(&basefw_comp_tr, "state changed to %d", *data); + + uint32_t mic_disable_status = (uint32_t)(*data); + struct mic_privacy_settings settings; + + mic_privacy_fill_settings(&settings, mic_disable_status); + mic_privacy_propagate_settings(&settings); + + return 0; +#else + return IPC4_UNAVAILABLE; +#endif +} + int basefw_vendor_set_large_config(struct comp_dev *dev, uint32_t param_id, bool first_block, @@ -375,6 +395,8 @@ int basefw_vendor_set_large_config(struct comp_dev *dev, return basefw_set_fw_config(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); + case IPC4_MIC_PRIVACY_HW_MANAGED_STATE_CHANGE: + return basefw_mic_priv_state_changed(first_block, last_block, data_offset, data); default: break; } diff --git a/src/include/ipc4/base_fw.h b/src/include/ipc4/base_fw.h index f1e64fe0e353..25601b1209f0 100644 --- a/src/include/ipc4/base_fw.h +++ b/src/include/ipc4/base_fw.h @@ -289,6 +289,9 @@ 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 */ + IPC4_MIC_PRIVACY_HW_MANAGED_STATE_CHANGE = 35, + /* Set policy mask for mic privacy in FW managed mode */ IPC4_SET_MIC_PRIVACY_FW_MANAGED_POLICY_MASK = 36, };