summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPixelBot AutoMerger <android-nexus-securitybot@system.gserviceaccount.com>2023-12-10 18:49:19 -0800
committerBen McGee <benmcgee@google.com>2023-12-12 15:55:15 +0000
commit75705c7afa0385af6f5668dae5bb9e1bf8e0bcdc (patch)
tree793812a67d6714100ce4760f30f2eb68dc1648d4
parentaa08708c871bba33a5fa979c2c524c208e33c7ac (diff)
parentc69225db7dde64287e2cdb8d17472cc65324f999 (diff)
downloadaoc-75705c7afa0385af6f5668dae5bb9e1bf8e0bcdc.tar.gz
Merge android13-gs-pixel-5.10-24Q1 into android14-gs-pixel-5.15-24Q1
Conflict files: alsa/aoc_alsa.h SBMerger: 571992243 Change-Id: Ie9d3c086b902757e1b57dab966cc99f1c4e4dd4b Signed-off-by: benmcgee <benmcgee@google.com>
-rw-r--r--alsa/aoc_alsa.h1
-rw-r--r--alsa/aoc_alsa_hw.c27
2 files changed, 28 insertions, 0 deletions
diff --git a/alsa/aoc_alsa.h b/alsa/aoc_alsa.h
index e3c017c..24a21ed 100644
--- a/alsa/aoc_alsa.h
+++ b/alsa/aoc_alsa.h
@@ -546,6 +546,7 @@ int aoc_usb_init(void);
void aoc_usb_exit(void);
int aoc_dp_init(void);
void aoc_dp_exit(void);
+int aoc_audio_mic_mask_set(struct aoc_chip *chip, bool is_voice);
int aoc_audio_us_record(struct aoc_chip *chip, bool enable);
diff --git a/alsa/aoc_alsa_hw.c b/alsa/aoc_alsa_hw.c
index 6a85b7c..ae3998b 100644
--- a/alsa/aoc_alsa_hw.c
+++ b/alsa/aoc_alsa_hw.c
@@ -423,6 +423,10 @@ int aoc_audio_capture_mic_prepare(struct aoc_chip *chip)
goto exit;
}
+ /* Update mask before start capture */
+ if (mic_input_source == AP_INPUT_PROCESSOR_MIC_INPUT_INDEX)
+ aoc_audio_mic_mask_set(chip, false);
+
// CMD_AUDIO_INPUT_AP_INPUT_START_ID with mic_input_source
pr_info("mic_input_source = %d\n", mic_input_source);
@@ -3265,6 +3269,12 @@ static int aoc_telephony_mic_open(struct aoc_chip *chip, int mic)
}
mic_input_source = hw_id_to_phone_mic_source(mic);
+
+ /* Update mask before start capture */
+ if (mic_input_source == MODEM_MIC_INPUT_INDEX ||
+ mic_input_source == MODEM_INCALL_INPUT_INDEX)
+ aoc_audio_mic_mask_set(chip, true);
+
pr_info("open telephony mic: %d - %d\n", mic_input_source, mic);
if (mic_input_source != NULL_PATH) {
err = aoc_audio_modem_mic_input(chip, START, mic_input_source);
@@ -4021,3 +4031,20 @@ int aoc_audio_set_chre_src_aec_timeout(struct aoc_chip *chip, int timeout)
return 0;
}
}
+
+/* Update PDM mic mask */
+int aoc_audio_mic_mask_set(struct aoc_chip *chip, bool is_voice)
+{
+ uint32_t value = UINT_MAX;
+ uint8_t *mask = (uint8_t *)(&value);
+ int key = is_voice, i;
+ const int cmd_id = CMD_AUDIO_INPUT_SET_PARAMETER_ID;
+ const int block = 139; /* ABLOCK_INPUT_PDM_MIC */
+ const int component = ASP_ID_NONE;
+ const int total_lists = min(NUM_OF_BUILTIN_MIC, (int)sizeof(uint32_t));
+
+ for (i = 0; i < total_lists; i++)
+ mask[i] = chip->buildin_mic_id_list[i];
+
+ return aoc_audio_set_parameters(cmd_id, block, component, key, value, chip);
+}