hal: Avoid configurable mono for target with single speaker
Do not allow configurable mono speaker assignment for devices with
one speaker. For msm8998, avoid it for fluid variants.Also, fix typo
in selection of VOICE_SPEAKER_2_PROTECTED device during send_voice_cal.
CRs-Fixed: 1082853
Change-Id: I7124c7ca7424feea1f2e54bcb6bc581313df6259
diff --git a/hal/audio_extn/audio_extn.h b/hal/audio_extn/audio_extn.h
index f098f0a..2bde664 100644
--- a/hal/audio_extn/audio_extn.h
+++ b/hal/audio_extn/audio_extn.h
@@ -240,6 +240,7 @@
#define hw_info_append_hw_type(hw_info,\
snd_device, device_name) (0)
#define hw_info_enable_wsa_combo_usecase_support(hw_info) (0)
+#define hw_info_is_stereo_spkr(hw_info) (0)
#else
void *hw_info_init(const char *snd_card_name);
@@ -247,6 +248,7 @@
void hw_info_append_hw_type(void *hw_info, snd_device_t snd_device,
char *device_name);
void hw_info_enable_wsa_combo_usecase_support(void *hw_info);
+bool hw_info_is_stereo_spkr(void *hw_info);
#endif
diff --git a/hal/msm8916/hw_info.c b/hal/msm8916/hw_info.c
index 35de9e3..8b3056b 100644
--- a/hal/msm8916/hw_info.c
+++ b/hal/msm8916/hw_info.c
@@ -48,6 +48,7 @@
char dev_extn[HW_INFO_ARRAY_MAX_SIZE];
snd_device_t *snd_devices;
bool is_wsa_combo_suppported;
+ bool is_stereo_spkr;
};
#define ARRAY_SIZE(a) (sizeof(a) / sizeof((a)[0]))
@@ -187,6 +188,7 @@
strlcpy(hw_info->dev_extn, "", sizeof(hw_info->dev_extn));
hw_info->is_wsa_combo_suppported = false;
+ hw_info->is_stereo_spkr = true;
if (strstr(snd_card_name, "msm8x16") || strstr(snd_card_name, "msm8939") ||
strstr(snd_card_name, "msm8909") || strstr(snd_card_name, "msm8952") ||
strstr(snd_card_name, "msm8976") || strstr(snd_card_name, "msm8953") ||
@@ -268,3 +270,10 @@
}
ALOGD("%s : device_name = %s", __func__,device_name);
}
+
+bool hw_info_is_stereo_spkr(void *hw_info)
+{
+ struct hardware_info *my_data = (struct hardware_info*) hw_info;
+
+ return my_data->is_stereo_spkr;
+}
diff --git a/hal/msm8916/platform.c b/hal/msm8916/platform.c
index 50e9f83..0f53792 100644
--- a/hal/msm8916/platform.c
+++ b/hal/msm8916/platform.c
@@ -4007,14 +4007,16 @@
}
- err = str_parms_get_str(parms, AUDIO_PARAMETER_KEY_MONO_SPEAKER, value, len);
- if (err >= 0) {
- if (!strncmp("left", value, sizeof("left")))
- my_data->mono_speaker = SPKR_1;
- else if (!strncmp("right", value, sizeof("right")))
- my_data->mono_speaker = SPKR_2;
+ if (hw_info_is_stereo_spkr(my_data->hw_info)) {
+ err = str_parms_get_str(parms, AUDIO_PARAMETER_KEY_MONO_SPEAKER, value, len);
+ if (err >= 0) {
+ if (!strncmp("left", value, sizeof("left")))
+ my_data->mono_speaker = SPKR_1;
+ else if (!strncmp("right", value, sizeof("right")))
+ my_data->mono_speaker = SPKR_2;
- str_parms_del(parms, AUDIO_PARAMETER_KEY_MONO_SPEAKER);
+ str_parms_del(parms, AUDIO_PARAMETER_KEY_MONO_SPEAKER);
+ }
}
#ifdef RECORD_PLAY_CONCURRENCY
diff --git a/hal/msm8974/hw_info.c b/hal/msm8974/hw_info.c
index f3ecd57..a13ea30 100644
--- a/hal/msm8974/hw_info.c
+++ b/hal/msm8974/hw_info.c
@@ -47,6 +47,7 @@
uint32_t num_snd_devices;
char dev_extn[HW_INFO_ARRAY_MAX_SIZE];
snd_device_t *snd_devices;
+ bool is_stereo_spkr;
};
#define ARRAY_SIZE(a) (sizeof(a) / sizeof((a)[0]))
@@ -323,6 +324,7 @@
strlcpy(hw_info->name, "msm8998", sizeof(hw_info->name));
hw_info->snd_devices = (snd_device_t *)tasha_fluid_variant_devices;
hw_info->num_snd_devices = ARRAY_SIZE(tasha_fluid_variant_devices);
+ hw_info->is_stereo_spkr = false;
strlcpy(hw_info->dev_extn, "-fluid", sizeof(hw_info->dev_extn));
} else if (!strcmp(snd_card_name, "msm8998-tasha-liquid-snd-card")) {
strlcpy(hw_info->type, " liquid", sizeof(hw_info->type));
@@ -446,6 +448,7 @@
hw_info->snd_devices = NULL;
hw_info->num_snd_devices = 0;
+ hw_info->is_stereo_spkr = true;
strlcpy(hw_info->dev_extn, "", sizeof(hw_info->dev_extn));
strlcpy(hw_info->type, "", sizeof(hw_info->type));
strlcpy(hw_info->name, "", sizeof(hw_info->name));
@@ -511,3 +514,10 @@
}
ALOGD("%s : device_name = %s", __func__,device_name);
}
+
+bool hw_info_is_stereo_spkr(void *hw_info)
+{
+ struct hardware_info *my_data = (struct hardware_info*) hw_info;
+
+ return my_data->is_stereo_spkr;
+}
diff --git a/hal/msm8974/platform.c b/hal/msm8974/platform.c
index 5e77632..462a18a 100644
--- a/hal/msm8974/platform.c
+++ b/hal/msm8974/platform.c
@@ -2512,7 +2512,7 @@
out_snd_device = SND_DEVICE_OUT_VOICE_SPEAKER_PROTECTED;
else if (out_snd_device == SND_DEVICE_OUT_VOICE_SPEAKER_VBAT)
out_snd_device = SND_DEVICE_OUT_VOICE_SPEAKER_PROTECTED_VBAT;
- else if (out_snd_device == SND_DEVICE_OUT_VOICE_SPEAKER)
+ else if (out_snd_device == SND_DEVICE_OUT_VOICE_SPEAKER_2)
out_snd_device = SND_DEVICE_OUT_VOICE_SPEAKER_2_PROTECTED;
else if (out_snd_device == SND_DEVICE_OUT_VOICE_SPEAKER_2_VBAT)
out_snd_device = SND_DEVICE_OUT_VOICE_SPEAKER_2_PROTECTED_VBAT;
@@ -3843,16 +3843,17 @@
}
- err = str_parms_get_str(parms, AUDIO_PARAMETER_KEY_MONO_SPEAKER, value, len);
- if (err >= 0) {
- if (!strncmp("left", value, sizeof("left")))
- my_data->mono_speaker = SPKR_1;
- else if (!strncmp("right", value, sizeof("right")))
- my_data->mono_speaker = SPKR_2;
+ if (hw_info_is_stereo_spkr(my_data->hw_info)) {
+ err = str_parms_get_str(parms, AUDIO_PARAMETER_KEY_MONO_SPEAKER, value, len);
+ if (err >= 0) {
+ if (!strncmp("left", value, sizeof("left")))
+ my_data->mono_speaker = SPKR_1;
+ else if (!strncmp("right", value, sizeof("right")))
+ my_data->mono_speaker = SPKR_2;
- str_parms_del(parms, AUDIO_PARAMETER_KEY_MONO_SPEAKER);
+ str_parms_del(parms, AUDIO_PARAMETER_KEY_MONO_SPEAKER);
+ }
}
-
err = str_parms_get_str(parms, AUDIO_PARAMETER_KEY_EXT_AUDIO_DEVICE,
value, len);
if (err >= 0) {