Merge "configs: add mmap-playback paths for buses"
diff --git a/configs/msmnile_au/audio_platform_info.xml b/configs/msmnile_au/audio_platform_info.xml
index 76fcc10..90cc644 100644
--- a/configs/msmnile_au/audio_platform_info.xml
+++ b/configs/msmnile_au/audio_platform_info.xml
@@ -202,6 +202,12 @@
         <device name="SND_DEVICE_IN_ICC" interface="TERT_TDM_TX_0"/>
         <!-- multi-mic surround ECNS mixer path definition -->
         <device name="SND_DEVICE_IN_VOICE_SPEAKER_MIC_HFP_MMSECNS" backend="bt-sco-mmsecns" interface="TERT_TDM_TX_0"/>
+        <!-- bus device mixer path definitions -->
+        <device name="SND_DEVICE_OUT_BUS_SYS" backend="sys-bus-out" interface="TERT_TDM_RX_0"/>
+        <device name="SND_DEVICE_OUT_BUS_NAV" backend="nav-bus-out" interface="TERT_TDM_RX_1"/>
+        <device name="SND_DEVICE_OUT_BUS_PHN" backend="phone-bus-out" interface="TERT_TDM_RX_2"/>
+        <device name="SND_DEVICE_OUT_BUS_PAX" backend="pax-bus-out" interface="QUAT_TDM_RX_0"/>
+        <device name="SND_DEVICE_OUT_BUS_RSE" backend="rse-bus-out" interface="QUIN_TDM_RX_0"/>
     </backend_names>
     <!-- below values are for ref purpose to OEM, doesn't contain actual hardware info on MTP -->
     <microphone_characteristics>
diff --git a/configs/msmnile_au/audio_policy_configuration.xml b/configs/msmnile_au/audio_policy_configuration.xml
index 9df9d5e..4193abd 100644
--- a/configs/msmnile_au/audio_policy_configuration.xml
+++ b/configs/msmnile_au/audio_policy_configuration.xml
@@ -393,15 +393,15 @@
                 <route type="mix" sink="Media Bus"
                        sources="media,direct_pcm,compressed_offload,voip_rx,mmap_no_irq_out"/>
                 <route type="mix" sink="Sys Notification Bus"
-                       sources="sys_notification"/>
+                       sources="sys_notification,mmap_no_irq_out"/>
                 <route type="mix" sink="Nav Guidance Bus"
-                       sources="nav_guidance"/>
+                       sources="nav_guidance,mmap_no_irq_out"/>
                 <route type="mix" sink="Phone Bus"
-                       sources="phone"/>
+                       sources="phone,mmap_no_irq_out"/>
                 <route type="mix" sink="Front Passenger Bus"
-                       sources="front_passenger"/>
+                       sources="front_passenger,mmap_no_irq_out"/>
                 <route type="mix" sink="Rear Seat Bus"
-                       sources="rear_seat"/>
+                       sources="rear_seat,mmap_no_irq_out"/>
                 <route type="mix" sink="Earpiece"
                        sources="primary output,raw,deep_buffer,direct_pcm,compressed_offload,voip_rx,mmap_no_irq_out"/>
                 <route type="mix" sink="Speaker"
diff --git a/configs/msmnile_au/mixer_paths_adp.xml b/configs/msmnile_au/mixer_paths_adp.xml
index 5f7cca7..3c21e2e 100644
--- a/configs/msmnile_au/mixer_paths_adp.xml
+++ b/configs/msmnile_au/mixer_paths_adp.xml
@@ -1308,27 +1308,27 @@
         <ctl name="TERT_TDM_RX_0 Audio Mixer MultiMedia1" value="1" />
     </path>
 
-    <path name="sys-notification-playback">
+    <path name="sys-notification-playback sys-bus-out">
         <ctl name="TERT_TDM_RX_0 Channels" value="Six" />
         <ctl name="TERT_TDM_RX_0 Audio Mixer MultiMedia5" value="1" />
     </path>
 
-    <path name="nav-guidance-playback">
+    <path name="nav-guidance-playback nav-bus-out">
         <ctl name="TERT_TDM_RX_1 Channels" value="One" />
         <ctl name="TERT_TDM_RX_1 Audio Mixer MultiMedia2" value="1" />
     </path>
 
-    <path name="phone-playback">
+    <path name="phone-playback phone-bus-out">
         <ctl name="TERT_TDM_RX_2 Channels" value="One" />
         <ctl name="TERT_TDM_RX_2 Audio Mixer MultiMedia10" value="1" />
     </path>
 
-    <path name="front-passenger-playback">
+    <path name="front-passenger-playback pax-bus-out">
         <ctl name="QUAT_TDM_RX_0 Channels" value="Eight" />
         <ctl name="QUAT_TDM_RX_0 Audio Mixer MultiMedia23" value="1" />
     </path>
 
-    <path name="rear-seat-playback">
+    <path name="rear-seat-playback rse-bus-out">
         <ctl name="QUIN_TDM_RX_0 Channels" value="Sixteen" />
         <ctl name="QUIN_TDM_RX_0 Audio Mixer MultiMedia22" value="1" />
     </path>
@@ -2724,6 +2724,26 @@
         <ctl name="TERT_TDM_RX_0 Audio Mixer MultiMedia16" value="1" />
     </path>
 
+    <path name="mmap-playback sys-bus-out">
+        <ctl name="TERT_TDM_RX_0 Audio Mixer MultiMedia16" value="1" />
+    </path>
+
+    <path name="mmap-playback nav-bus-out">
+        <ctl name="TERT_TDM_RX_1 Audio Mixer MultiMedia16" value="1" />
+    </path>
+
+    <path name="mmap-playback phone-bus-out">
+        <ctl name="TERT_TDM_RX_2 Audio Mixer MultiMedia16" value="1" />
+    </path>
+
+    <path name="mmap-playback pax-bus-out">
+        <ctl name="QUAT_TDM_RX_0 Audio Mixer MultiMedia16" value="1" />
+    </path>
+
+    <path name="mmap-playback rse-bus-out">
+        <ctl name="QUIN_TDM_RX_0 Audio Mixer MultiMedia16" value="1" />
+    </path>
+
     <path name="mmap-playback headphones">
         <ctl name="SLIMBUS_6_RX Audio Mixer MultiMedia16" value="1" />
     </path>
diff --git a/configs/msmsteppe_au/audio_platform_info.xml b/configs/msmsteppe_au/audio_platform_info.xml
index 9e11e89..8cc7b04 100644
--- a/configs/msmsteppe_au/audio_platform_info.xml
+++ b/configs/msmsteppe_au/audio_platform_info.xml
@@ -202,6 +202,12 @@
         <device name="SND_DEVICE_IN_ICC" interface="TERT_TDM_TX_0"/>
         <!-- multi-mic surround ECNS mixer path definition -->
         <device name="SND_DEVICE_IN_VOICE_SPEAKER_MIC_HFP_MMSECNS" backend="bt-sco-mmsecns" interface="TERT_TDM_TX_0"/>
+        <!-- bus device mixer path definitions -->
+        <device name="SND_DEVICE_OUT_BUS_SYS" backend="sys-bus-out" interface="TERT_TDM_RX_0"/>
+        <device name="SND_DEVICE_OUT_BUS_NAV" backend="nav-bus-out" interface="TERT_TDM_RX_1"/>
+        <device name="SND_DEVICE_OUT_BUS_PHN" backend="phone-bus-out" interface="TERT_TDM_RX_2"/>
+        <device name="SND_DEVICE_OUT_BUS_PAX" backend="pax-bus-out" interface="QUAT_TDM_RX_0"/>
+        <device name="SND_DEVICE_OUT_BUS_RSE" backend="rse-bus-out" interface="QUIN_TDM_RX_0"/>
     </backend_names>
     <!-- below values are for ref purpose to OEM, doesn't contain actual hardware info on MTP -->
     <microphone_characteristics>
diff --git a/configs/msmsteppe_au/audio_policy_configuration.xml b/configs/msmsteppe_au/audio_policy_configuration.xml
index 7229118..24d1447 100644
--- a/configs/msmsteppe_au/audio_policy_configuration.xml
+++ b/configs/msmsteppe_au/audio_policy_configuration.xml
@@ -393,15 +393,15 @@
                 <route type="mix" sink="Media Bus"
                        sources="media,direct_pcm,compressed_offload,voip_rx,mmap_no_irq_out"/>
                 <route type="mix" sink="Sys Notification Bus"
-                       sources="sys_notification"/>
+                       sources="sys_notification,mmap_no_irq_out"/>
                 <route type="mix" sink="Nav Guidance Bus"
-                       sources="nav_guidance"/>
+                       sources="nav_guidance,mmap_no_irq_out"/>
                 <route type="mix" sink="Phone Bus"
-                       sources="phone"/>
+                       sources="phone,mmap_no_irq_out"/>
                 <route type="mix" sink="Front Passenger Bus"
-                       sources="front_passenger"/>
+                       sources="front_passenger,mmap_no_irq_out"/>
                 <route type="mix" sink="Rear Seat Bus"
-                       sources="rear_seat"/>
+                       sources="rear_seat,mmap_no_irq_out"/>
                 <route type="mix" sink="Earpiece"
                        sources="primary output,raw,deep_buffer,direct_pcm,compressed_offload,voip_rx,mmap_no_irq_out"/>
                 <route type="mix" sink="Speaker"
diff --git a/configs/msmsteppe_au/mixer_paths_adp.xml b/configs/msmsteppe_au/mixer_paths_adp.xml
index 80334bd..2dfca35 100644
--- a/configs/msmsteppe_au/mixer_paths_adp.xml
+++ b/configs/msmsteppe_au/mixer_paths_adp.xml
@@ -1150,27 +1150,27 @@
         <ctl name="TERT_TDM_RX_0 Audio Mixer MultiMedia1" value="1" />
     </path>
 
-    <path name="sys-notification-playback">
+    <path name="sys-notification-playback sys-bus-out">
         <ctl name="TERT_TDM_RX_0 Channels" value="Six" />
         <ctl name="TERT_TDM_RX_0 Audio Mixer MultiMedia5" value="1" />
     </path>
 
-    <path name="nav-guidance-playback">
+    <path name="nav-guidance-playback nav-bus-out">
         <ctl name="TERT_TDM_RX_1 Channels" value="One" />
         <ctl name="TERT_TDM_RX_1 Audio Mixer MultiMedia2" value="1" />
     </path>
 
-    <path name="phone-playback">
+    <path name="phone-playback phone-bus-out">
         <ctl name="TERT_TDM_RX_2 Channels" value="One" />
         <ctl name="TERT_TDM_RX_2 Audio Mixer MultiMedia10" value="1" />
     </path>
 
-    <path name="front-passenger-playback">
+    <path name="front-passenger-playback pax-bus-out">
         <ctl name="QUAT_TDM_RX_0 Channels" value="Eight" />
         <ctl name="QUAT_TDM_RX_0 Audio Mixer MultiMedia23" value="1" />
     </path>
 
-    <path name="rear-seat-playback">
+    <path name="rear-seat-playback rse-bus-out">
         <ctl name="QUAT_TDM_RX_1 Channels" value="Eight" />
         <ctl name="QUAT_TDM_RX_1 Audio Mixer MultiMedia22" value="1" />
     </path>
@@ -2393,6 +2393,26 @@
         <ctl name="TERT_TDM_RX_0 Audio Mixer MultiMedia16" value="1" />
     </path>
 
+    <path name="mmap-playback sys-bus-out">
+        <ctl name="TERT_TDM_RX_0 Audio Mixer MultiMedia16" value="1" />
+    </path>
+
+    <path name="mmap-playback nav-bus-out">
+        <ctl name="TERT_TDM_RX_1 Audio Mixer MultiMedia16" value="1" />
+    </path>
+
+    <path name="mmap-playback phone-bus-out">
+        <ctl name="TERT_TDM_RX_2 Audio Mixer MultiMedia16" value="1" />
+    </path>
+
+    <path name="mmap-playback pax-bus-out">
+        <ctl name="QUAT_TDM_RX_0 Audio Mixer MultiMedia16" value="1" />
+    </path>
+
+    <path name="mmap-playback rse-bus-out">
+        <ctl name="QUIN_TDM_RX_0 Audio Mixer MultiMedia16" value="1" />
+    </path>
+
     <path name="mmap-playback headphones">
         <ctl name="SLIMBUS_6_RX Audio Mixer MultiMedia16" value="1" />
     </path>
diff --git a/hal/audio_extn/auto_hal.c b/hal/audio_extn/auto_hal.c
index ca3cd6b..9276c9c 100755
--- a/hal/audio_extn/auto_hal.c
+++ b/hal/audio_extn/auto_hal.c
@@ -841,6 +841,8 @@
             snd_device = SND_DEVICE_OUT_VOICE_SPEAKER;
             break;
         case USECASE_AUDIO_PLAYBACK_MEDIA:
+            snd_device = SND_DEVICE_OUT_BUS_MEDIA;
+            break;
         case USECASE_AUDIO_PLAYBACK_OFFLOAD:
         case USECASE_AUDIO_PLAYBACK_OFFLOAD2:
         case USECASE_AUDIO_PLAYBACK_OFFLOAD3:
@@ -854,6 +856,33 @@
         case USECASE_AUDIO_PLAYBACK_MMAP:
         case USECASE_AUDIO_PLAYBACK_VOIP:
             snd_device = SND_DEVICE_OUT_BUS_MEDIA;
+            /* Override the snd_device based on the bus address if available */
+            if (usecase->stream.out->car_audio_stream) {
+                switch (usecase->stream.out->car_audio_stream) {
+                    case CAR_AUDIO_STREAM_MEDIA:
+                        snd_device = SND_DEVICE_OUT_BUS_MEDIA;
+                        break;
+                    case CAR_AUDIO_STREAM_SYS_NOTIFICATION:
+                        snd_device = SND_DEVICE_OUT_BUS_SYS;
+                        break;
+                    case CAR_AUDIO_STREAM_NAV_GUIDANCE:
+                        snd_device = SND_DEVICE_OUT_BUS_NAV;
+                        break;
+                    case CAR_AUDIO_STREAM_PHONE:
+                        snd_device = SND_DEVICE_OUT_BUS_PHN;
+                        break;
+                    case CAR_AUDIO_STREAM_FRONT_PASSENGER:
+                        snd_device = SND_DEVICE_OUT_BUS_PAX;
+                        break;
+                    case CAR_AUDIO_STREAM_REAR_SEAT:
+                        snd_device = SND_DEVICE_OUT_BUS_RSE;
+                        break;
+                    default:
+                        ALOGE("%s: Car audio stream %x not supported", __func__,
+                        usecase->stream.out->car_audio_stream);
+                        return -EINVAL;
+                }
+            }
             break;
         case USECASE_AUDIO_PLAYBACK_SYS_NOTIFICATION:
             snd_device = SND_DEVICE_OUT_BUS_SYS;