hal: qaf: Handling EOS on PCM input stream

-PCM playback is hanging because test app was not
receiving the drain-ready. Changes are done in QAF
to send drain-ready when EOS is received.

CRs-fixed: 2082744
Change-Id: Iebe99c9e663292bc67e53ba92edd11b354345d0d
diff --git a/hal/audio_extn/qaf.c b/hal/audio_extn/qaf.c
index 5dba1d2..497856f 100644
--- a/hal/audio_extn/qaf.c
+++ b/hal/audio_extn/qaf.c
@@ -1656,12 +1656,14 @@
         }
         DEBUG_MSG_VV("Bytes written = %d", ret);
     }
-    else if (event_id == AUDIO_EOS_MAIN_DD_DDP_EVENT
+    else if (event_id == AUDIO_EOS_EVENT
+               || event_id == AUDIO_EOS_MAIN_DD_DDP_EVENT
                || event_id == AUDIO_EOS_MAIN_2_DD_DDP_EVENT
                || event_id == AUDIO_EOS_MAIN_AAC_EVENT
                || event_id == AUDIO_EOS_MAIN_AC4_EVENT
                || event_id == AUDIO_EOS_ASSOC_DD_DDP_EVENT) {
         struct stream_out *out = qaf_mod->stream_in[QAF_IN_MAIN];
+        struct stream_out *out_pcm = qaf_mod->stream_in[QAF_IN_PCM];
         struct stream_out *out_main2 = qaf_mod->stream_in[QAF_IN_MAIN_2];
         struct stream_out *out_assoc = qaf_mod->stream_in[QAF_IN_ASSOC];
 
@@ -1669,7 +1671,16 @@
          * TODO:: Only DD/DDP Associate Eos is handled, need to add support
          * for other formats.
          */
-        if (event_id == AUDIO_EOS_ASSOC_DD_DDP_EVENT
+        if (event_id == AUDIO_EOS_EVENT
+                && (out_pcm != NULL)
+                && (check_stream_state(out_pcm, STOPPING))) {
+
+            lock_output_stream(out_pcm);
+            out_pcm->client_callback(STREAM_CBK_EVENT_DRAIN_READY, NULL, out_pcm->client_cookie);
+            set_stream_state(out_pcm, STOPPED);
+            unlock_output_stream(out_pcm);
+            DEBUG_MSG("sent pcm DRAIN_READY");
+        } else if (event_id == AUDIO_EOS_ASSOC_DD_DDP_EVENT
                 && (out_assoc != NULL)
                 && (check_stream_state(out_assoc, STOPPING))) {