hal: Configure backend with 24-bit for 24-bit playback

- For 24bit stream backend is getting configured to
  32bit which is undesirable.
- To fix this, changes are done to configure backend
  as 24bit for 24bit stream and 32bit for 32bit stream.

Change-Id: If4186d2e476c745f584903edc02818eb0af6ee12
diff --git a/hal/audio_extn/utils.c b/hal/audio_extn/utils.c
index 6aab347..7426b33 100644
--- a/hal/audio_extn/utils.c
+++ b/hal/audio_extn/utils.c
@@ -704,13 +704,14 @@
     struct stream_format *sf_info;
     char value[PROPERTY_VALUE_MAX] = {0};
 
-    if ((bit_width >= 24) &&
-        (devices & AUDIO_DEVICE_OUT_SPEAKER)) {
-        int32_t bw = platform_get_snd_device_bit_width(SND_DEVICE_OUT_SPEAKER);
-        if (-ENOSYS != bw)
+    if (devices & AUDIO_DEVICE_OUT_SPEAKER) {
+        int bw = platform_get_snd_device_bit_width(SND_DEVICE_OUT_SPEAKER);
+        if ((-ENOSYS != bw) && (bit_width > (uint32_t)bw))
             bit_width = (uint32_t)bw;
+        else if (-ENOSYS == bw)
+            bit_width = CODEC_BACKEND_DEFAULT_BIT_WIDTH;
         sample_rate = DEFAULT_OUTPUT_SAMPLING_RATE;
-        ALOGI("%s Allowing 24-bit playback on speaker ONLY at default sampling rate", __func__);
+        ALOGI("%s Allowing 24 and above bits playback on speaker ONLY at default sampling rate", __func__);
     }
 
     property_get("vendor.audio.playback.mch.downsample",value,"");
diff --git a/hal/msm8974/platform.c b/hal/msm8974/platform.c
old mode 100755
new mode 100644
index 313c067..69b3f62
--- a/hal/msm8974/platform.c
+++ b/hal/msm8974/platform.c
@@ -6267,11 +6267,14 @@
      * backend with speaker, and these devices are restricited to 48kHz.
      */
     if (platform_check_backends_match(SND_DEVICE_OUT_SPEAKER, snd_device)) {
-
-        if (bit_width >= 24) {
-            bit_width = platform_get_snd_device_bit_width(SND_DEVICE_OUT_SPEAKER);
+        int bw = platform_get_snd_device_bit_width(SND_DEVICE_OUT_SPEAKER);
+        if ((-ENOSYS != bw) && (bit_width > (uint32_t)bw)) {
+            bit_width = (uint32_t)bw;
             ALOGD("%s:becf: afe: reset bitwidth to %d (based on supported"
-                   " value for this platform)", __func__, bit_width);
+                  " value for this platform)", __func__, bit_width);
+        } else if (-ENOSYS == bw) {
+            bit_width = CODEC_BACKEND_DEFAULT_BIT_WIDTH;
+            ALOGD("%s:becf: afe: reset to default bitwidth %d", __func__, bit_width);
         }
         sample_rate = CODEC_BACKEND_DEFAULT_SAMPLE_RATE;
         ALOGD("%s:becf: afe: playback on codec device not supporting native playback set "