hal: return proper backend index for USB headset
Playback over USB headsets fails as the default backend index
is selected.
Return the correct backend index by adding a check for USB headset
to fix the issue.
Also backport a few bug fixes from USB tunnel mode testing on 8953.
CRs-Fixed: 1105780
Change-Id: If923f486a44070a4824b80199bcaed5d902462fe
diff --git a/hal/msm8916/platform.c b/hal/msm8916/platform.c
index a9001d1..fd591a7 100644
--- a/hal/msm8916/platform.c
+++ b/hal/msm8916/platform.c
@@ -531,7 +531,7 @@
[SND_DEVICE_OUT_AFE_PROXY] = 0,
[SND_DEVICE_OUT_USB_HEADSET] = 45,
[SND_DEVICE_OUT_USB_HEADPHONES] = 45,
- [SND_DEVICE_OUT_SPEAKER_AND_USB_HEADSET] = 14,
+ [SND_DEVICE_OUT_SPEAKER_AND_USB_HEADSET] = 45,
[SND_DEVICE_OUT_TRANSMISSION_FM] = 0,
[SND_DEVICE_OUT_ANC_HEADSET] = 26,
[SND_DEVICE_OUT_ANC_FB_HEADSET] = 27,
@@ -2704,7 +2704,8 @@
port = HDMI_RX_BACKEND;
else if (strcmp(backend_tag_table[snd_device], "display-port") == 0)
port = DISP_PORT_RX_BACKEND;
- else if (strcmp(backend_tag_table[snd_device], "usb-headphones") == 0)
+ else if ((strcmp(backend_tag_table[snd_device], "usb-headphones") == 0) ||
+ (strcmp(backend_tag_table[snd_device], "usb-headset") == 0))
port = USB_AUDIO_RX_BACKEND;
}
} else if (snd_device >= SND_DEVICE_IN_BEGIN && snd_device < SND_DEVICE_IN_END) {
@@ -4084,6 +4085,7 @@
native_audio_set_params(platform, parms, value, sizeof(value));
audio_extn_spkr_prot_set_parameters(parms, value, len);
+ audio_extn_usb_set_sidetone_gain(parms, value, len);
true_32_bit_set_params(parms, value, len);
ALOGV("%s: exit with code(%d)", __func__, ret);
return ret;
@@ -4561,12 +4563,14 @@
if ((my_data->current_backend_cfg[backend_idx].samplerate_mixer_ctl) &&
(sample_rate != my_data->current_backend_cfg[(int)backend_idx].sample_rate) &&
- (my_data->hifi_audio)) {
+ (my_data->hifi_audio ||
+ backend_idx == USB_AUDIO_RX_BACKEND ||
+ backend_idx == USB_AUDIO_TX_BACKEND)) {
/*
* sample rate update is needed only for hifi audio enabled platforms
*/
char *rate_str = NULL;
- struct mixer_ctl *ctl;
+ struct mixer_ctl *ctl = NULL;
switch (sample_rate) {
case 8000:
@@ -4622,7 +4626,7 @@
}
if ((my_data->current_backend_cfg[backend_idx].channels_mixer_ctl) &&
(channels != my_data->current_backend_cfg[backend_idx].channels)) {
- struct mixer_ctl *ctl;
+ struct mixer_ctl *ctl = NULL;
char *channel_cnt_str = NULL;
switch (channels) {
@@ -4808,8 +4812,9 @@
sample_rate = backend_cfg->sample_rate;
channels = backend_cfg->channels;
- ALOGI("%s:becf: afe: Codec selected backend: %d current bit width: %d sample rate: %d channels: %d",
- __func__, backend_idx, bit_width, sample_rate, channels);
+ ALOGI("%s:becf: afe: Codec selected backend: %d current bit width: %d sample rate: %d channels: %d "
+ "usecase %d device (%s)", __func__, backend_idx, bit_width, sample_rate, channels,
+ usecase->id, platform_get_snd_device_name(snd_device));
// For voice calls use default configuration i.e. 16b/48K, only applicable to
// default backend
@@ -4979,9 +4984,9 @@
channels_updated = true;
}
- ALOGI("%s:becf: afe: Codec selected backend: %d updated bit width: %d and sample rate: %d",
- __func__,
- backend_idx, bit_width, sample_rate);
+ ALOGI("%s:becf: afe: Codec selected backend: %d updated bit width: %d "
+ "sample rate: %d channels: %d", __func__, backend_idx,
+ bit_width, sample_rate, channels);
// Force routing if the expected bitwdith or samplerate
// is not same as current backend comfiguration
if ((bit_width != my_data->current_backend_cfg[backend_idx].bit_width) ||