hal: set backend channel number to one for mono speaker
Channel number is set incorreclty without consideration of
actual number of speakers. Set backend channel number to one
for mono speaker.
Change-Id: I93970337fb86d0805f4c4c1e1961a928095f3ba8
diff --git a/hal/msm8974/platform.c b/hal/msm8974/platform.c
index fab7034..46f31fc 100755
--- a/hal/msm8974/platform.c
+++ b/hal/msm8974/platform.c
@@ -3218,6 +3218,22 @@
return ret;
}
+static bool check_snd_device_is_speaker(snd_device_t snd_device)
+{
+ bool ret = false;
+
+ if (snd_device == SND_DEVICE_OUT_SPEAKER ||
+ snd_device == SND_DEVICE_OUT_SPEAKER_WSA ||
+ snd_device == SND_DEVICE_OUT_SPEAKER_VBAT ||
+ snd_device == SND_DEVICE_OUT_SPEAKER_PROTECTED ||
+ snd_device == SND_DEVICE_OUT_SPEAKER_PROTECTED_VBAT ||
+ snd_device == SND_DEVICE_OUT_SPEAKER_PROTECTED_RAS ||
+ snd_device == SND_DEVICE_OUT_SPEAKER_PROTECTED_VBAT_RAS) {
+ ret = true;
+ }
+ return ret;
+}
+
int check_hdset_combo_device(snd_device_t snd_device)
{
int ret = false;
@@ -6371,7 +6387,12 @@
backend_cfg.bit_width = usecase->stream.out->bit_width;
backend_cfg.sample_rate = usecase->stream.out->sample_rate;
backend_cfg.format = usecase->stream.out->format;
- backend_cfg.channels = audio_channel_count_from_out_mask(usecase->stream.out->channel_mask);
+ if (!(hw_info_is_stereo_spkr(my_data->hw_info)) &&
+ check_snd_device_is_speaker(snd_device))
+ backend_cfg.channels = 1;
+ else
+ backend_cfg.channels =
+ audio_channel_count_from_out_mask(usecase->stream.out->channel_mask);
}
if (audio_extn_is_dsp_bit_width_enforce_mode_supported(usecase->stream.out->flags) &&
(adev->dsp_bit_width_enforce_mode > backend_cfg.bit_width))