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/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) {