audio: add dock support

Change-Id: I03819de8e1210f14d323939a584905ab1bbe63c6
diff --git a/audio/audio_hw.c b/audio/audio_hw.c
index cf03673..5a9cbf6 100644
--- a/audio/audio_hw.c
+++ b/audio/audio_hw.c
@@ -177,11 +177,13 @@
 {
     int headphone_on;
     int speaker_on;
+    int docked;
     int main_mic_on;
 
     headphone_on = adev->out_device & (AUDIO_DEVICE_OUT_WIRED_HEADSET |
                                     AUDIO_DEVICE_OUT_WIRED_HEADPHONE);
     speaker_on = adev->out_device & AUDIO_DEVICE_OUT_SPEAKER;
+    docked = adev->out_device & AUDIO_DEVICE_OUT_ANLG_DOCK_HEADSET;
     main_mic_on = adev->in_device & AUDIO_DEVICE_IN_BUILTIN_MIC;
 
     reset_mixer_state(adev->ar);
@@ -190,6 +192,8 @@
         audio_route_apply_path(adev->ar, "speaker");
     if (headphone_on)
         audio_route_apply_path(adev->ar, "headphone");
+    if (docked)
+        audio_route_apply_path(adev->ar, "dock");
     if (main_mic_on) {
         if (adev->orientation == ORIENTATION_LANDSCAPE)
             audio_route_apply_path(adev->ar, "main-mic-left");
@@ -199,8 +203,8 @@
 
     update_mixer_state(adev->ar);
 
-    ALOGV("hp=%c speaker=%c main-mic=%c", headphone_on ? 'y' : 'n',
-          speaker_on ? 'y' : 'n', main_mic_on ? 'y' : 'n');
+    ALOGV("hp=%c speaker=%c dock=%c main-mic=%c", headphone_on ? 'y' : 'n',
+          speaker_on ? 'y' : 'n', docked ? 'y' : 'n', main_mic_on ? 'y' : 'n');
 }
 
 /* must be called with hw device and output stream mutexes locked */
diff --git a/audio_policy.conf b/audio_policy.conf
index 70481d6..1da8157 100644
--- a/audio_policy.conf
+++ b/audio_policy.conf
@@ -26,7 +26,7 @@
         sampling_rates 44100
         channel_masks AUDIO_CHANNEL_OUT_STEREO
         formats AUDIO_FORMAT_PCM_16_BIT
-        devices AUDIO_DEVICE_OUT_SPEAKER|AUDIO_DEVICE_OUT_WIRED_HEADSET|AUDIO_DEVICE_OUT_WIRED_HEADPHONE|AUDIO_DEVICE_OUT_ALL_SCO
+        devices AUDIO_DEVICE_OUT_SPEAKER|AUDIO_DEVICE_OUT_WIRED_HEADSET|AUDIO_DEVICE_OUT_WIRED_HEADPHONE|AUDIO_DEVICE_OUT_ALL_SCO|AUDIO_DEVICE_OUT_ANLG_DOCK_HEADSET
         flags AUDIO_OUTPUT_FLAG_PRIMARY
       }
     }
diff --git a/mixer_paths.xml b/mixer_paths.xml
index 7ce9ff2..9d490e5 100644
--- a/mixer_paths.xml
+++ b/mixer_paths.xml
@@ -4,6 +4,19 @@
   <ctl name="Int Spk Switch" value="0" />
   <ctl name="HP Playback Switch" value="0" />
   <ctl name="Headphone Jack Switch" value="0" />
+  <ctl name="AUX Switch" value="0" />
+  <ctl name="OUT Playback Switch" value="0" />
+  <ctl name="OUT Channel Switch" value="0" />
+
+  <!-- This is the dock volume -->
+  <ctl name="OUT Playback Volume" value="32" />
+
+  <!-- This is the dock (line out) source -->
+  <ctl name="LOUT MIX DAC L1 Switch" value="0" />
+  <ctl name="LOUT MIX DAC R1 Switch" value="0" />
+  <ctl name="LOUT MIX OUTVOL L Switch" value="1" />
+  <ctl name="LOUT MIX OUTVOL R Switch" value="1" />
+
   <ctl name="Int Mic Switch" value="0" />
   <ctl name="Mic Jack Switch" value="0" />
   <ctl name="DMIC Switch" value="Disable" />
@@ -23,6 +36,12 @@
     <ctl name="DAC IF1 SWITCH" value="Normal" />
   </path>
 
+  <path name="dock">
+    <ctl name="AUX Switch" value="1" />
+    <ctl name="OUT Playback Switch" value="1" />
+    <ctl name="OUT Channel Switch" value="1" />
+  </path>
+
   <path name="main-mic-top">
     <ctl name="Int Mic Switch" value="1" />
     <ctl name="DMIC Switch" value="DMIC1" />