Merge "hal: Fix alignement of buffer sent to DSP for multichannel clips"
diff --git a/hal/msm8916/platform.c b/hal/msm8916/platform.c
index 5c1c21e..4015f92 100644
--- a/hal/msm8916/platform.c
+++ b/hal/msm8916/platform.c
@@ -3364,8 +3364,7 @@
     // To have same PCM samples for all channels, the buffer size requires to
     // be multiple of (number of channels * bytes per sample)
     // For writes to succeed, the buffer must be written at address which is multiple of 32
-    // Alignment of 96 satsfies both of the above requirements
-    fragment_size = ALIGN(fragment_size, 96);
+    fragment_size = ALIGN(fragment_size, ((bits_per_sample >> 3)* popcount(info->channel_mask) * 32));
 
     ALOGI("PCM offload Fragment size to %d bytes", fragment_size);
     return fragment_size;
diff --git a/hal/msm8974/platform.c b/hal/msm8974/platform.c
index 9c1115c..cc2d962 100644
--- a/hal/msm8974/platform.c
+++ b/hal/msm8974/platform.c
@@ -3030,15 +3030,14 @@
                      * info->sample_rate
                      * (bits_per_sample >> 3)
                      * popcount(info->channel_mask))/1000;
-    // To have same PCM samples for all channels, the buffer size requires to
-    // be multiple of (number of channels * bytes per sample)
-    // For writes to succeed, the buffer must be written at address which is multiple of 32
-    // Alignment of 96 satsfies both of the above requirements
-    fragment_size = ALIGN(fragment_size, 96);
     if(fragment_size < MIN_PCM_OFFLOAD_FRAGMENT_SIZE)
         fragment_size = MIN_PCM_OFFLOAD_FRAGMENT_SIZE;
     else if(fragment_size > MAX_PCM_OFFLOAD_FRAGMENT_SIZE)
         fragment_size = MAX_PCM_OFFLOAD_FRAGMENT_SIZE;
+    // To have same PCM samples for all channels, the buffer size requires to
+    // be multiple of (number of channels * bytes per sample)
+    // For writes to succeed, the buffer must be written at address which is multiple of 32
+    fragment_size = ALIGN(fragment_size, ((bits_per_sample >> 3)* popcount(info->channel_mask) * 32));
 
     ALOGI("PCM offload Fragment size to %d bytes", fragment_size);
     return fragment_size;