Merge "msmsteppe_au: audio bring-up changes on auto platform"
diff --git a/configs/msmsteppe/audio_platform_info.xml b/configs/msmsteppe/audio_platform_info.xml
index fb181f5..343c1ea 100644
--- a/configs/msmsteppe/audio_platform_info.xml
+++ b/configs/msmsteppe/audio_platform_info.xml
@@ -50,20 +50,22 @@
<module_ids>
<aec>
- <device name="SND_DEVICE_IN_SPEAKER_QMIC_AEC_NS" module_id="0x10F17" instance_id="0x0" param_id="0x10EAF" param_value="0x01"/>
- <device name="SND_DEVICE_IN_SPEAKER_DMIC_AEC_NS_BROADSIDE" module_id="0x10F18" instance_id="0x0" param_id="0x10EAF" param_value="0x01"/>
- <device name="SND_DEVICE_IN_SPEAKER_DMIC_AEC_NS" module_id="0x10F0A" instance_id="0x0" param_id="0x10EAF" param_value="0x01"/>
- <device name="SND_DEVICE_IN_SPEAKER_MIC_AEC_NS" module_id="0x10F09" instance_id="0x0" param_id="0x10EAF" param_value="0x01"/>
- <device name="SND_DEVICE_IN_HANDSET_DMIC_AEC_NS" module_id="0x10F0A" instance_id="0x0" param_id="0x10EAF" param_value="0x01"/>
- <device name="SND_DEVICE_IN_HANDSET_MIC_AEC_NS" module_id="0x10F09" instance_id="0x0" param_id="0x10EAF" param_value="0x01"/>
+ <device name="SND_DEVICE_IN_SPEAKER_QMIC_AEC_NS" module_id="0x10F35" instance_id="0x0" param_id="0x10EAF" param_value="0x01"/>
+ <device name="SND_DEVICE_IN_SPEAKER_TMIC_AEC_NS" module_id="0x10F35" instance_id="0x0" param_id="0x10EAF" param_value="0x01"/>
+ <device name="SND_DEVICE_IN_SPEAKER_DMIC_AEC_NS_BROADSIDE" module_id="0x10F34" instance_id="0x0" param_id="0x10EAF" param_value="0x01"/>
+ <device name="SND_DEVICE_IN_SPEAKER_DMIC_AEC_NS" module_id="0x10F33" instance_id="0x0" param_id="0x10EAF" param_value="0x01"/>
+ <device name="SND_DEVICE_IN_SPEAKER_MIC_AEC_NS" module_id="0x10F31" instance_id="0x0" param_id="0x10EAF" param_value="0x01"/>
+ <device name="SND_DEVICE_IN_HANDSET_DMIC_AEC_NS" module_id="0x10F33" instance_id="0x0" param_id="0x10EAF" param_value="0x01"/>
+ <device name="SND_DEVICE_IN_HANDSET_MIC_AEC_NS" module_id="0x10F31" instance_id="0x0" param_id="0x10EAF" param_value="0x01"/>
</aec>
<ns>
- <device name="SND_DEVICE_IN_SPEAKER_QMIC_AEC_NS" module_id="0x10F17" instance_id="0x0" param_id="0x10EAF" param_value="0x02"/>
- <device name="SND_DEVICE_IN_SPEAKER_DMIC_AEC_NS_BROADSIDE" module_id="0x10F18" instance_id="0x0" param_id="0x10EAF" param_value="0x02"/>
- <device name="SND_DEVICE_IN_SPEAKER_DMIC_AEC_NS" module_id="0x10F0A" instance_id="0x0" param_id="0x10EAF" param_value="0x02"/>
- <device name="SND_DEVICE_IN_SPEAKER_MIC_AEC_NS" module_id="0x10F09" instance_id="0x0" param_id="0x10EAF" param_value="0x02"/>
- <device name="SND_DEVICE_IN_HANDSET_DMIC_AEC_NS" module_id="0x10F0A" instance_id="0x0" param_id="0x10EAF" param_value="0x02"/>
- <device name="SND_DEVICE_IN_HANDSET_MIC_AEC_NS" module_id="0x10F09" instance_id="0x0" param_id="0x10EAF" param_value="0x02"/>
+ <device name="SND_DEVICE_IN_SPEAKER_QMIC_AEC_NS" module_id="0x10F35" instance_id="0x0" param_id="0x10EAF" param_value="0x02"/>
+ <device name="SND_DEVICE_IN_SPEAKER_TMIC_AEC_NS" module_id="0x10F35" instance_id="0x0" param_id="0x10EAF" param_value="0x02"/>
+ <device name="SND_DEVICE_IN_SPEAKER_DMIC_AEC_NS_BROADSIDE" module_id="0x10F34" instance_id="0x0" param_id="0x10EAF" param_value="0x02"/>
+ <device name="SND_DEVICE_IN_SPEAKER_DMIC_AEC_NS" module_id="0x10F33" instance_id="0x0" param_id="0x10EAF" param_value="0x02"/>
+ <device name="SND_DEVICE_IN_SPEAKER_MIC_AEC_NS" module_id="0x10F31" instance_id="0x0" param_id="0x10EAF" param_value="0x02"/>
+ <device name="SND_DEVICE_IN_HANDSET_DMIC_AEC_NS" module_id="0x10F33" instance_id="0x0" param_id="0x10EAF" param_value="0x02"/>
+ <device name="SND_DEVICE_IN_HANDSET_MIC_AEC_NS" module_id="0x10F31" instance_id="0x0" param_id="0x10EAF" param_value="0x02"/>
</ns>
</module_ids>
@@ -145,5 +147,376 @@
<device name="SND_DEVICE_OUT_SPEAKER_AND_BT_SCO" backend="speaker-and-bt-sco" interface="SLIMBUS_0_RX-and-SLIMBUS_7_RX"/>
<device name="SND_DEVICE_OUT_SPEAKER_AND_BT_SCO_WB" backend="speaker-and-bt-sco-wb" interface="SLIMBUS_0_RX-and-SLIMBUS_7_RX"/>
</backend_names>
+ <!-- below values are for ref purpose to OEM, doesn't contain actual hardware info on MTP -->
+ <microphone_characteristics>
+ <microphone valid_mask="31" device_id="builtin_mic_1" type="AUDIO_DEVICE_IN_BUILTIN_MIC" address="bottom" location="AUDIO_MICROPHONE_LOCATION_MAINBODY"
+ group="0" index_in_the_group="0" directionality="AUDIO_MICROPHONE_DIRECTIONALITY_OMNI" num_frequency_responses="93"
+ frequencies="100.00 106.00 112.00 118.00 125.00 132.00 140.00 150.00 160.00 170.00 180.00 190.00 200.00 212.00 224.00 236.00 250.00 265.00 280.00 300.00 315.00 335.00 355.00 375.00 400.00 425.00 450.00 475.00 500.00 530.00 560.00 600.00 630.00 670.00 710.00 750.00 800.00 850.00 900.00 950.00 1000.00 1060.00 1120.00 1180.00 1250.00 1320.00 1400.00 1500.00 1600.00 1700.00 1800.00 1900.00 2000.00 2120.00 2240.00 2360.00 2500.00 2650.00 2800.00 3000.00 3150.00 3350.00 3550.00 3750.00 4000.00 4250.00 4500.00 4750.00 5000.00 5300.00 5600.00 6000.00 6300.00 6700.00 7100.00 7500.00 8000.00 8500.00 9000.00 9500.00 10000.00 10600.00 11200.00 11800.00 12500.00 13200.00 14000.00 15000.00 16000.00 17000.00 18000.00 19000.00 20000.00"
+ responses="-0.78 -0.71 -0.64 -0.60 -0.55 -0.50 -0.47 -0.42 -0.39 -0.36 -0.34 -0.33 -0.32 -0.29 -0.28 -0.28 -0.27 -0.25 -0.25 -0.24 -0.23 -0.23 -0.22 -0.22 -0.19 -0.17 -0.15 -0.15 -0.14 -0.14 -0.12 -0.11 -0.10 -0.10 -0.08 -0.07 -0.07 -0.04 -0.03 -0.01 0.00 0.04 0.06 0.07 0.08 0.13 0.09 0.14 0.19 0.23 0.28 0.29 0.31 0.37 0.88 0.86 0.77 0.78 0.84 0.86 1.05 1.12 1.18 1.25 1.43 1.66 1.83 2.02 2.23 2.59 2.84 3.35 4.01 6.82 6.62 6.42 7.30 8.23 7.54 12.68 13.76 18.69 19.68 20.90 23.70 25.10 21.65 16.18 18.84 25.44 23.48 23.22 24.89"
+ sensitivity="-37.0" max_spl="132.5" min_spl="28.5" orientation="0.0 0.0 1.0" geometric_location="0.0269 0.0058 0.0079" />
+ <microphone valid_mask="31" device_id="builtin_mic_2" type="AUDIO_DEVICE_IN_BACK_MIC" address="back" location="AUDIO_MICROPHONE_LOCATION_MAINBODY"
+ group="0" index_in_the_group="1" directionality="AUDIO_MICROPHONE_DIRECTIONALITY_OMNI" num_frequency_responses="92"
+ frequencies="106.00 112.00 118.00 125.00 132.00 140.00 150.00 160.00 170.00 180.00 190.00 200.00 212.00 224.00 236.00 250.00 265.00 280.00 300.00 315.00 335.00 355.00 375.00 400.00 425.00 450.00 475.00 500.00 530.00 560.00 600.00 630.00 670.00 710.00 750.00 800.00 850.00 900.00 950.00 1000.00 1060.00 1120.00 1180.00 1250.00 1320.00 1400.00 1500.00 1600.00 1700.00 1800.00 1900.00 2000.00 2120.00 2240.00 2360.00 2500.00 2650.00 2800.00 3000.00 3150.00 3350.00 3550.00 3750.00 4000.00 4250.00 4500.00 4750.00 5000.00 5300.00 5600.00 6000.00 6300.00 6700.00 7100.00 7500.00 8000.00 8500.00 9000.00 9500.00 10000.00 10600.00 11200.00 11800.00 12500.00 13200.00 14000.00 15000.00 16000.00 17000.00 18000.00 19000.00 20000.00"
+ responses="-0.75 -0.74 -0.69 -0.65 -0.62 -0.61 -0.56 -0.53 -0.50 -0.47 -0.43 -0.40 -0.37 -0.36 -0.33 -0.30 -0.28 -0.25 -0.24 -0.24 -0.24 -0.25 -0.24 -0.12 -0.10 -0.08 -0.09 -0.07 -0.07 -0.06 -0.06 -0.06 -0.05 -0.04 -0.05 -0.04 -0.01 0.02 0.02 0.00 0.02 0.03 0.07 0.10 0.10 0.13 0.01 0.01 0.10 0.11 0.19 0.24 0.38 0.46 0.26 0.27 0.43 0.76 0.75 1.09 1.09 0.94 1.06 1.21 1.47 1.45 1.36 2.07 2.85 2.90 3.85 4.65 5.84 5.46 6.15 7.50 8.30 10.62 12.70 16.65 20.95 25.41 26.32 20.20 16.60 11.24 7.85 7.62 20.19 7.32 2.87 5.18"
+ sensitivity="-37.0" max_spl="132.5" min_spl="28.5" orientation="0.0 1.0 0.0" geometric_location="0.0546 0.1456 0.00415" />
+ <microphone valid_mask="31" device_id="builtin_mic_3" type="AUDIO_DEVICE_IN_BUILTIN_MIC" address="" location="AUDIO_MICROPHONE_LOCATION_MAINBODY"
+ group="0" index_in_the_group="2" directionality="AUDIO_MICROPHONE_DIRECTIONALITY_OMNI" num_frequency_responses="92"
+ frequencies="100.00 106.00 112.00 118.00 125.00 132.00 140.00 150.00 160.00 170.00 180.00 190.00 200.00 212.00 224.00 236.00 250.00 265.00 280.00 300.00 315.00 335.00 355.00 375.00 400.00 425.00 450.00 475.00 500.00 530.00 560.00 600.00 630.00 670.00 710.00 750.00 800.00 850.00 900.00 950.00 1000.00 1060.00 1120.00 1180.00 1250.00 1320.00 1400.00 1500.00 1600.00 1700.00 1800.00 1900.00 2000.00 2120.00 2240.00 2360.00 2500.00 2650.00 2800.00 3000.00 3150.00 3350.00 3550.00 3750.00 4000.00 4250.00 4500.00 4750.00 5000.00 5300.00 5600.00 6000.00 6300.00 6700.00 7100.00 7500.00 8000.00 8500.00 9000.00 9500.00 10000.00 10600.00 11200.00 11800.00 12500.00 13200.00 14000.00 15000.00 16000.00 17000.00 18000.00 19000.00"
+ responses="-9.24 -9.31 -9.39 -9.45 -9.46 -9.47 -9.50 -9.52 -9.51 -9.52 -9.51 -9.50 -9.49 -9.47 -9.48 -9.49 -9.48 -9.50 -9.51 -9.53 -9.55 -9.59 -9.63 -9.67 -9.58 -9.57 -9.65 -9.68 -9.71 -9.75 -9.79 -9.84 -9.87 -9.87 -9.90 -9.90 -9.91 -9.97 -10.01 -10.05 -9.85 -9.93 -9.94 -9.98 -10.04 -10.12 -10.28 -10.25 -10.01 -9.86 -9.81 -9.82 -9.61 -9.46 -8.27 -8.42 -8.98 -8.99 -8.82 -9.21 -8.92 -8.97 -9.30 -9.44 -9.52 -9.28 -9.09 -8.81 -7.02 -5.72 -5.30 -7.26 -8.39 -12.28 -8.23 -6.99 -5.52 -4.87 -3.82 -6.09 0.00 -2.15 -0.26 1.48 5.22 10.92 6.41 9.55 12.96 3.35 22.00 19.75"
+ sensitivity="-37.0" max_spl="132.5" min_spl="28.5" orientation="0.0 0.0 1.0" geometric_location="0.0274 0.14065 0.0079" />
+ <microphone valid_mask="31" device_id="builtin_mic_4" type="AUDIO_DEVICE_IN_BACK_MIC" address="" location="AUDIO_MICROPHONE_LOCATION_MAINBODY"
+ group="0" index_in_the_group="3" directionality="AUDIO_MICROPHONE_DIRECTIONALITY_OMNI" num_frequency_responses="92"
+ frequencies="106.00 112.00 118.00 125.00 132.00 140.00 150.00 160.00 170.00 180.00 190.00 200.00 212.00 224.00 236.00 250.00 265.00 280.00 300.00 315.00 335.00 355.00 375.00 400.00 425.00 450.00 475.00 500.00 530.00 560.00 600.00 630.00 670.00 710.00 750.00 800.00 850.00 900.00 950.00 1000.00 1060.00 1120.00 1180.00 1250.00 1320.00 1400.00 1500.00 1600.00 1700.00 1800.00 1900.00 2000.00 2120.00 2240.00 2360.00 2500.00 2650.00 2800.00 3000.00 3150.00 3350.00 3550.00 3750.00 4000.00 4250.00 4500.00 4750.00 5000.00 5300.00 5600.00 6000.00 6300.00 6700.00 7100.00 7500.00 8000.00 8500.00 9000.00 9500.00 10000.00 10600.00 11200.00 11800.00 12500.00 13200.00 14000.00 15000.00 16000.00 17000.00 18000.00 19000.00 20000.00"
+ responses="-0.75 -0.74 -0.69 -0.65 -0.62 -0.61 -0.56 -0.53 -0.50 -0.47 -0.43 -0.40 -0.37 -0.36 -0.33 -0.30 -0.28 -0.25 -0.24 -0.24 -0.24 -0.25 -0.24 -0.12 -0.10 -0.08 -0.09 -0.07 -0.07 -0.06 -0.06 -0.06 -0.05 -0.04 -0.05 -0.04 -0.01 0.02 0.02 0.00 0.02 0.03 0.07 0.10 0.10 0.13 0.01 0.01 0.10 0.11 0.19 0.24 0.38 0.46 0.26 0.27 0.43 0.76 0.75 1.09 1.09 0.94 1.06 1.21 1.47 1.45 1.36 2.07 2.85 2.90 3.85 4.65 5.84 5.46 6.15 7.50 8.30 10.62 12.70 16.65 20.95 25.41 26.32 20.20 16.60 11.24 7.85 7.62 20.19 7.32 2.87 5.18"
+ sensitivity="-37.0" max_spl="132.5" min_spl="28.5" orientation="0.0 1.0 0.0" geometric_location="0.0546 0.1456 0.00415" />
+ </microphone_characteristics>
+ <snd_devices>
+ <input_snd_device>
+ <input_snd_device_mic_mapping>
+ <snd_dev in_snd_device="SND_DEVICE_IN_HANDSET_MIC">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_HANDSET_MIC_AEC">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_HANDSET_MIC_NS">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_HANDSET_MIC_AEC_NS">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_HANDSET_DMIC">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_2"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_HANDSET_DMIC_AEC">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_2"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_HANDSET_DMIC_NS">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_2"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_HANDSET_DMIC_AEC_NS">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_2"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_SPEAKER_MIC">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_SPEAKER_MIC_AEC">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_SPEAKER_MIC_NS">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_SPEAKER_MIC_AEC_NS">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_SPEAKER_DMIC">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_2"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_SPEAKER_DMIC_AEC">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_2"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_SPEAKER_DMIC_NS">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_2"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_SPEAKER_DMIC_AEC_NS">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_2"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_VOICE_SPEAKER_MIC">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_CAMCORDER_MIC">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_VOICE_DMIC">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_2"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_VOICE_SPEAKER_DMIC">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_2"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_VOICE_SPEAKER_TMIC">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_2"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_3"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_VOICE_SPEAKER_QMIC">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_2"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_3"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_4"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_VOICE_REC_MIC">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_VOICE_REC_MIC_NS">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_VOICE_REC_DMIC_STEREO">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_2"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_VOICE_REC_DMIC_FLUENCE">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_2"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_AANC_HANDSET_MIC">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_2"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_3"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_QUAD_MIC">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_2"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_3"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_4"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_HANDSET_STEREO_DMIC">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_2"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_SPEAKER_STEREO_DMIC">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_2"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_VOICE_SPEAKER_DMIC_BROADSIDE">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_3"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_SPEAKER_DMIC_BROADSIDE">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_3"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_SPEAKER_DMIC_AEC_BROADSIDE">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_3"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_SPEAKER_DMIC_NS_BROADSIDE">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_3"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_SPEAKER_DMIC_AEC_NS_BROADSIDE">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_3"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_VOICE_FLUENCE_DMIC_AANC">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_2"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_3"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_4"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_HANDSET_QMIC">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_2"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_3"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_4"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_SPEAKER_QMIC_AEC">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_2"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_3"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_4"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_SPEAKER_QMIC_NS">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_2"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_3"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_4"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_SPEAKER_QMIC_AEC_NS">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_2"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_3"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_4"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_THREE_MIC">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_2"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_3"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_HANDSET_TMIC_FLUENCE_PRO">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_2"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_3"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_HANDSET_TMIC">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_2"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_3"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_SPEAKER_TMIC_AEC">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_2"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_3"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_SPEAKER_TMIC_NS">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_2"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_3"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_SPEAKER_TMIC_AEC_NS">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_2"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_3"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_VOICE_REC_TMIC">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_2"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_3"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_UNPROCESSED_MIC">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_DIRECT"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_UNPROCESSED_STEREO_MIC">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_DIRECT AUDIO_MICROPHONE_CHANNEL_MAPPING_UNUSED"/>
+ <mic_info mic_device_id="builtin_mic_2"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_UNUSED AUDIO_MICROPHONE_CHANNEL_MAPPING_DIRECT"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_UNPROCESSED_THREE_MIC">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_DIRECT AUDIO_MICROPHONE_CHANNEL_MAPPING_UNUSED AUDIO_MICROPHONE_CHANNEL_MAPPING_UNUSED"/>
+ <mic_info mic_device_id="builtin_mic_2"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_UNUSED AUDIO_MICROPHONE_CHANNEL_MAPPING_DIRECT AUDIO_MICROPHONE_CHANNEL_MAPPING_UNUSED"/>
+ <mic_info mic_device_id="builtin_mic_3"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_UNUSED AUDIO_MICROPHONE_CHANNEL_MAPPING_UNUSED AUDIO_MICROPHONE_CHANNEL_MAPPING_DIRECT"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_UNPROCESSED_QUAD_MIC">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_DIRECT AUDIO_MICROPHONE_CHANNEL_MAPPING_UNUSED AUDIO_MICROPHONE_CHANNEL_MAPPING_UNUSED AUDIO_MICROPHONE_CHANNEL_MAPPING_UNUSED"/>
+ <mic_info mic_device_id="builtin_mic_2"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_UNUSED AUDIO_MICROPHONE_CHANNEL_MAPPING_DIRECT AUDIO_MICROPHONE_CHANNEL_MAPPING_UNUSED AUDIO_MICROPHONE_CHANNEL_MAPPING_UNUSED"/>
+ <mic_info mic_device_id="builtin_mic_3"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_UNUSED AUDIO_MICROPHONE_CHANNEL_MAPPING_UNUSED AUDIO_MICROPHONE_CHANNEL_MAPPING_DIRECT AUDIO_MICROPHONE_CHANNEL_MAPPING_UNUSED"/>
+ <mic_info mic_device_id="builtin_mic_4"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_UNUSED AUDIO_MICROPHONE_CHANNEL_MAPPING_UNUSED AUDIO_MICROPHONE_CHANNEL_MAPPING_UNUSED AUDIO_MICROPHONE_CHANNEL_MAPPING_DIRECT"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_HANDSET_GENERIC_QMIC">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_2"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_3"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_4"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ </snd_dev>
+ </input_snd_device_mic_mapping>
+ </input_snd_device>
+ </snd_devices>
</audio_platform_info>
diff --git a/configs/msmsteppe/audio_policy_configuration.xml b/configs/msmsteppe/audio_policy_configuration.xml
index 4a0ff8a..31c7881 100644
--- a/configs/msmsteppe/audio_policy_configuration.xml
+++ b/configs/msmsteppe/audio_policy_configuration.xml
@@ -389,11 +389,11 @@
<route type="mix" sink="mmap_no_irq_in"
sources="Built-In Mic,Built-In Back Mic,Wired Headset Mic,USB Device In,USB Headset In"/>
<route type="mix" sink="BT A2DP Out"
- sources="primary output,deep_buffer,direct_pcm,compressed_offload"/>
+ sources="primary output,deep_buffer,direct_pcm,compressed_offload,voip_rx"/>
<route type="mix" sink="BT A2DP Headphones"
- sources="primary output,deep_buffer,direct_pcm,compressed_offload"/>
+ sources="primary output,deep_buffer,direct_pcm,compressed_offload,voip_rx"/>
<route type="mix" sink="BT A2DP Speaker"
- sources="primary output,deep_buffer,direct_pcm,compressed_offload"/>
+ sources="primary output,deep_buffer,direct_pcm,compressed_offload,voip_rx"/>
<route type="mix" sink="hifi_input" sources="USB Device In,USB Headset In" />
</routes>
diff --git a/configs/msmsteppe/mixer_paths_wcd9375.xml b/configs/msmsteppe/mixer_paths_wcd9375.xml
index 85de3eb..680f445 100644
--- a/configs/msmsteppe/mixer_paths_wcd9375.xml
+++ b/configs/msmsteppe/mixer_paths_wcd9375.xml
@@ -371,8 +371,9 @@
<ctl name="COMP7 Switch" value="0" />
<ctl name="COMP8 Switch" value="0" />
- <!-- Headphone Default mode - AB -->
- <ctl name="RX HPH Mode" value="CLS_AB" />
+ <!-- Headphone class-H mode -->
+ <ctl name="RX_HPH_PWR_MODE" value="ULP" />
+ <ctl name="RX HPH Mode" value="CLS_H_ULP" />
<!-- IIR/voice anc -->
<ctl name="IIR0 Band1" id ="0" value="268435456" />
@@ -2130,9 +2131,13 @@
</path>
<path name="hph-highquality-mode">
+ <ctl name="RX_HPH_PWR_MODE" value="LOHIFI" />
+ <ctl name="RX HPH Mode" value="CLS_H_LOHIFI" />
</path>
<path name="hph-lowpower-mode">
+ <ctl name="RX_HPH_PWR_MODE" value="ULP" />
+ <ctl name="RX HPH Mode" value="CLS_H_ULP" />
</path>
<path name="true-native-mode">
diff --git a/configs/msmsteppe/mixer_paths_wcd9375qrd.xml b/configs/msmsteppe/mixer_paths_wcd9375qrd.xml
index df6890b..2a9499e 100644
--- a/configs/msmsteppe/mixer_paths_wcd9375qrd.xml
+++ b/configs/msmsteppe/mixer_paths_wcd9375qrd.xml
@@ -371,8 +371,9 @@
<ctl name="COMP7 Switch" value="0" />
<ctl name="COMP8 Switch" value="0" />
- <!-- Headphone Default mode - AB -->
- <ctl name="RX HPH Mode" value="CLS_AB" />
+ <!-- Headphone class-H mode -->
+ <ctl name="RX_HPH_PWR_MODE" value="ULP" />
+ <ctl name="RX HPH Mode" value="CLS_H_ULP" />
<!-- IIR/voice anc -->
<ctl name="IIR0 Band1" id ="0" value="268435456" />
@@ -2210,9 +2211,13 @@
</path>
<path name="hph-highquality-mode">
+ <ctl name="RX_HPH_PWR_MODE" value="LOHIFI" />
+ <ctl name="RX HPH Mode" value="CLS_H_LOHIFI" />
</path>
<path name="hph-lowpower-mode">
+ <ctl name="RX_HPH_PWR_MODE" value="ULP" />
+ <ctl name="RX HPH Mode" value="CLS_H_ULP" />
</path>
<path name="true-native-mode">
diff --git a/configs/msmsteppe/sound_trigger_mixer_paths.xml b/configs/msmsteppe/sound_trigger_mixer_paths.xml
index 175e5d6..90de0d3 100644
--- a/configs/msmsteppe/sound_trigger_mixer_paths.xml
+++ b/configs/msmsteppe/sound_trigger_mixer_paths.xml
@@ -62,6 +62,10 @@
<ctl name="EC Reference Channels" value="Zero"/>
<ctl name="EC Reference Bit Format" value="0"/>
<ctl name="EC Reference SampleRate" value="0"/>
+ <ctl name="TX_DEC0 Volume" value="84" />
+ <ctl name="TX_DEC1 Volume" value="84" />
+ <ctl name="TX_DEC2 Volume" value="84" />
+ <ctl name="TX_DEC3 Volume" value="84" />
<path name="listen-voice-wakeup-1">
<ctl name="TX_CDC_DMA_TX_3 LSM Function" value="SWAUDIO" />
@@ -162,6 +166,7 @@
<path name="listen-ape-handset-mic">
<ctl name="TX_CDC_DMA_TX_3 Channels" value="One" />
<ctl name="TX_AIF1_CAP Mixer DEC0" value="1" />
+ <ctl name="TX_DEC0 Volume" value="102" />
<ctl name="TX DMIC MUX0" value="DMIC2" />
</path>
@@ -172,6 +177,8 @@
<path name="listen-ape-handset-dmic">
<ctl name="TX_CDC_DMA_TX_3 Channels" value="Two" />
<ctl name="TX_AIF1_CAP Mixer DEC0" value="1" />
+ <ctl name="TX_DEC0 Volume" value="102" />
+ <ctl name="TX_DEC1 Volume" value="102" />
<ctl name="TX DMIC MUX0" value="DMIC2" />
<ctl name="TX_AIF1_CAP Mixer DEC1" value="1" />
<ctl name="TX DMIC MUX1" value="DMIC3" />
@@ -180,6 +187,9 @@
<path name="listen-ape-handset-tmic">
<ctl name="TX_CDC_DMA_TX_3 Channels" value="Three" />
<ctl name="TX_AIF1_CAP Mixer DEC0" value="1" />
+ <ctl name="TX_DEC0 Volume" value="102" />
+ <ctl name="TX_DEC1 Volume" value="102" />
+ <ctl name="TX_DEC2 Volume" value="102" />
<ctl name="TX DMIC MUX0" value="DMIC2" />
<ctl name="TX_AIF1_CAP Mixer DEC1" value="1" />
<ctl name="TX DMIC MUX1" value="DMIC0" />
@@ -190,6 +200,10 @@
<path name="listen-ape-handset-qmic">
<ctl name="TX_CDC_DMA_TX_3 Channels" value="Four" />
<ctl name="TX_AIF1_CAP Mixer DEC0" value="1" />
+ <ctl name="TX_DEC0 Volume" value="102" />
+ <ctl name="TX_DEC1 Volume" value="102" />
+ <ctl name="TX_DEC2 Volume" value="102" />
+ <ctl name="TX_DEC3 Volume" value="102" />
<ctl name="TX DMIC MUX0" value="DMIC2" />
<ctl name="TX_AIF1_CAP Mixer DEC1" value="1" />
<ctl name="TX DMIC MUX1" value="DMIC0" />
diff --git a/configs/sdm710/audio_platform_info_intcodec.xml b/configs/sdm710/audio_platform_info_intcodec.xml
index 603ec57..4ae3bb1 100644
--- a/configs/sdm710/audio_platform_info_intcodec.xml
+++ b/configs/sdm710/audio_platform_info_intcodec.xml
@@ -27,6 +27,8 @@
<audio_platform_info>
<bit_width_configs>
<device name="SND_DEVICE_OUT_SPEAKER" bit_width="24"/>
+ <device name="SND_DEVICE_IN_HANDSET_MIC" bit_width="24"/>
+ <device name="SND_DEVICE_IN_HANDSET_GENERIC_QMIC" bit_width="24"/>
</bit_width_configs>
<interface_names>
<device name="AUDIO_DEVICE_IN_BUILTIN_MIC" interface="INT3_MI2S" codec_type="internal"/>
diff --git a/configs/sdm710/mixer_paths_tavil.xml b/configs/sdm710/mixer_paths_tavil.xml
index 14bbd40..3cb7a9f 100644
--- a/configs/sdm710/mixer_paths_tavil.xml
+++ b/configs/sdm710/mixer_paths_tavil.xml
@@ -758,6 +758,25 @@
<ctl name="DISPLAY_PORT Mixer MultiMedia4" value="1" />
</path>
+ <path name="silence-playback">
+ <ctl name="AUDIO_REF_EC_UL1 MUX" value="SLIM_RX" />
+ <ctl name="SLIMBUS_0_RX Audio Mixer MultiMedia9" value="1" />
+ </path>
+
+ <path name="ec-ref-audio-capture">
+ <ctl name="AUDIO_REF_EC_UL1 MUX" value="SLIM_RX" />
+ <ctl name="MultiMedia9 Mixer AFE_LOOPBACK_TX" value="1" />
+ </path>
+
+ <path name="ec-ref-loopback-mono">
+ </path>
+
+ <path name="ec-ref-loopback-stereo">
+ </path>
+
+ <path name="ec-ref-loopback-quad">
+ </path>
+
<path name="silence-playback display-port">
<ctl name="DISPLAY_PORT Mixer MultiMedia9" value="1" />
</path>
diff --git a/configs/sdm710/sdm710.mk b/configs/sdm710/sdm710.mk
index 536cc2c..6710eef 100644
--- a/configs/sdm710/sdm710.mk
+++ b/configs/sdm710/sdm710.mk
@@ -50,7 +50,7 @@
AUDIO_FEATURE_ENABLED_FLUENCE := true
AUDIO_FEATURE_ENABLED_HDMI_EDID := true
AUDIO_FEATURE_ENABLED_HDMI_PASSTHROUGH := true
-#AUDIO_FEATURE_ENABLED_KEEP_ALIVE := true
+AUDIO_FEATURE_ENABLED_KEEP_ALIVE := true
AUDIO_FEATURE_ENABLED_DISPLAY_PORT := true
AUDIO_FEATURE_ENABLED_DS2_DOLBY_DAP := false
AUDIO_FEATURE_ENABLED_HFP := true
@@ -68,8 +68,13 @@
BOARD_SUPPORTS_QSTHW_API := true
AUDIO_FEATURE_ENABLED_RAS := true
AUDIO_FEATURE_ENABLED_SND_MONITOR := true
+BOARD_SUPPORTS_SOUND_TRIGGER_ARM := true
+AUDIO_FEATURE_ENABLED_FFV := true
+AUDIO_FEATURE_ENABLED_KEEP_ALIVE_ARM_FFV := true
AUDIO_FEATURE_ENABLED_DLKM := true
AUDIO_FEATURE_ENABLED_SVA_MULTI_STAGE := true
+BOARD_SUPPORTS_SOUND_TRIGGER_CPU_AFFINITY_SET := true
+BOARD_SUPPORTS_FFV_EC_THREAD_RT_PRIORITY := true
##AUDIO_FEATURE_FLAGS
ifneq ($(strip $(TARGET_USES_RRO)), true)
diff --git a/configs/sdm710/sound_trigger_mixer_paths_wcd9340.xml b/configs/sdm710/sound_trigger_mixer_paths_wcd9340.xml
index ffae119..4d1bb31 100644
--- a/configs/sdm710/sound_trigger_mixer_paths_wcd9340.xml
+++ b/configs/sdm710/sound_trigger_mixer_paths_wcd9340.xml
@@ -95,6 +95,7 @@
<ctl name= "WDMA3 CH2 MUX" value="PORT_0" />
<ctl name= "WDMA3_ON_OFF Switch" value="0" />
<ctl name="SLIM_0_TX Channels" value="One" />
+ <ctl name="AUDIO_REF_EC_UL1 MUX" value="None"/>
<path name="listen-voice-wakeup-1">
<ctl name="SLIMBUS_5_TX LSM Function" value="AUDIO" />
@@ -332,6 +333,44 @@
<ctl name="DMIC MUX8" value="DMIC0" />
</path>
+ <path name="listen-handset-qmic">
+ <ctl name="AIF1_CAP Mixer SLIM TX5" value="1" />
+ <ctl name="AIF1_CAP Mixer SLIM TX6" value="1" />
+ <ctl name="AIF1_CAP Mixer SLIM TX7" value="1" />
+ <ctl name="AIF1_CAP Mixer SLIM TX8" value="1" />
+ <ctl name="SLIM_0_TX Channels" value="Four" />
+ <ctl name="CDC_IF TX5 MUX" value="DEC5" />
+ <ctl name="ADC MUX5" value="DMIC" />
+ <ctl name="DMIC MUX5" value="DMIC1" />
+ <ctl name="CDC_IF TX6 MUX" value="DEC6" />
+ <ctl name="ADC MUX6" value="DMIC" />
+ <ctl name="DMIC MUX6" value="DMIC5" />
+ <ctl name="CDC_IF TX7 MUX" value="DEC7" />
+ <ctl name="ADC MUX7" value="DMIC" />
+ <ctl name="DMIC MUX7" value="DMIC2" />
+ <ctl name="CDC_IF TX8 MUX" value="DEC8" />
+ <ctl name="ADC MUX8" value="DMIC" />
+ <ctl name="DMIC MUX8" value="DMIC0" />
+ </path>
+
+ <path name="audio-capture">
+ <ctl name="MultiMedia2 Mixer SLIM_0_TX" value="1" />
+ </path>
+
+ <path name="ec-ref-audio-capture">
+ <ctl name="AUDIO_REF_EC_UL1 MUX" value="SLIM_RX" />
+ <ctl name="MultiMedia9 Mixer AFE_LOOPBACK_TX" value="1" />
+ </path>
+
+ <path name="ec-ref-loopback-mono">
+ </path>
+
+ <path name="ec-ref-loopback-stereo">
+ </path>
+
+ <path name="ec-ref-loopback-quad">
+ </path>
+
<path name="echo-reference">
<ctl name="AUDIO_REF_EC_UL1 MUX" value="SLIM_RX"/>
<ctl name="EC Reference Channels" value="Two"/>
diff --git a/configs/sdm710/sound_trigger_platform_info.xml b/configs/sdm710/sound_trigger_platform_info.xml
index 9510045..cd55149 100644
--- a/configs/sdm710/sound_trigger_platform_info.xml
+++ b/configs/sdm710/sound_trigger_platform_info.xml
@@ -54,10 +54,29 @@
<param DEVICE_HANDSET_QMIC_APE="137" />
<param DEVICE_HEADSET_MIC_CPE="139" />
<param DEVICE_HANDSET_DMIC_APE="149" />
+ <param DEVICE_HANDSET_QMIC_ARM="140" />
</acdb_ids>
<!-- Multiple sound_model_config tags can be listed, each with unique -->
<!-- vendor_uuid. The below tag represents QTI SVA engine sound model -->
<!-- configuration. ISV must use their own unique vendor_uuid. -->
+ <!-- ARM based SVA sound_model_config -->
+ <sound_model_config>
+ <param vendor_uuid="67fabb70-79e8-4e1c-a202-bcb050243a70" />
+ <param execution_type="ARM" />
+ <!-- ec reference loopback params -->
+ <!-- split_ec_ref_data - true if ec ref is packed with mic captured data -->
+ <param split_ec_ref_data="false"/>
+ <param ec_ref_channel_count="4"/>
+
+ <!-- Profile specific data which the algorithm can support -->
+ <param sample_rate="16000" />
+ <param bit_width="16" />
+ <param channel_count="4"/>
+ <!-- adm_cfg_profile should match with the one defined under adm_config -->
+ <!-- Set it to NONE if LSM directly connects to AFE -->
+ <param adm_cfg_profile="DEFAULT" />
+ </sound_model_config>
+ <!-- Sound model config for Hotword !-->
<sound_model_config>
<param vendor_uuid="68ab2d40-e860-11e3-95ef-0002a5d5c51b" />
<param execution_type="WDSP" /> <!-- value: "WDSP" "ADSP" "DYNAMIC" -->
diff --git a/hal/audio_extn/a2dp.c b/hal/audio_extn/a2dp.c
index 634e0b4..7dedc48 100644
--- a/hal/audio_extn/a2dp.c
+++ b/hal/audio_extn/a2dp.c
@@ -193,6 +193,11 @@
IMC_ENABLE,
} imc_status_t;
+typedef enum {
+ MTU_SIZE,
+ PEAK_BIT_RATE,
+} frame_control_type_t;
+
/* PCM config for ABR Feedback hostless front end */
static struct pcm_config pcm_config_abr = {
.channels = 1,
@@ -303,6 +308,17 @@
uint32_t comm_instance;
};
+/* Structure to control frame size of AAC encoded frames. */
+struct aac_frame_size_control_t {
+ /* Type of frame size control: MTU_SIZE / PEAK_BIT_RATE*/
+ uint32_t ctl_type;
+ /* Control value
+ * MTU_SIZE: MTU size in bytes
+ * PEAK_BIT_RATE: Peak bitrate in bits per second.
+ */
+ uint32_t ctl_value;
+};
+
/* Structure used for ABR config of AFE encoder and decoder. */
struct abr_enc_cfg_t {
/* Link quality level to bitrate mapping info sent to DSP. */
@@ -343,6 +359,11 @@
uint32_t sample_rate;
} __attribute__ ((packed));
+struct aac_enc_cfg_v2_t {
+ struct aac_enc_cfg_t aac_enc_cfg;
+ struct aac_frame_size_control_t frame_ctl;
+} __attribute__ ((packed));
+
/* SBC encoder configuration structure. */
typedef struct sbc_enc_cfg_t sbc_enc_cfg_t;
@@ -526,6 +547,11 @@
uint32_t bitrate;
uint32_t bits_per_sample;
} audio_aac_encoder_config;
+
+typedef struct {
+ audio_aac_encoder_config audio_aac_enc_cfg;
+ struct aac_frame_size_control_t frame_ctl;
+} audio_aac_encoder_config_v2;
#endif
/* Information about BT CELT encoder configuration
@@ -1471,7 +1497,7 @@
bool is_configured = false;
int ret = 0;
- if(aac_bt_cfg == NULL)
+ if (aac_bt_cfg == NULL)
return false;
ctl_enc_data = mixer_get_ctl_by_name(a2dp.adev->mixer, MIXER_ENC_CONFIG_BLOCK);
@@ -1484,7 +1510,7 @@
aac_dsp_cfg.enc_format = ENC_MEDIA_FMT_AAC;
aac_dsp_cfg.bit_rate = aac_bt_cfg->bitrate;
aac_dsp_cfg.sample_rate = aac_bt_cfg->sampling_rate;
- switch(aac_bt_cfg->enc_mode) {
+ switch (aac_bt_cfg->enc_mode) {
case 0:
aac_dsp_cfg.enc_mode = MEDIA_FMT_AAC_AOT_LC;
break;
@@ -1498,10 +1524,11 @@
}
aac_dsp_cfg.aac_fmt_flag = aac_bt_cfg->format_flag;
aac_dsp_cfg.channel_cfg = aac_bt_cfg->channels;
+
ret = mixer_ctl_set_array(ctl_enc_data, (void *)&aac_dsp_cfg,
sizeof(struct aac_enc_cfg_t));
if (ret != 0) {
- ALOGE("%s: failed to set SBC encoder config", __func__);
+ ALOGE("%s: Failed to set AAC encoder config", __func__);
is_configured = false;
goto fail;
}
@@ -1514,8 +1541,67 @@
a2dp.bt_encoder_format = ENC_CODEC_TYPE_AAC;
a2dp.enc_sampling_rate = aac_bt_cfg->sampling_rate;
a2dp.enc_channels = aac_bt_cfg->channels;
- ALOGV("Successfully updated AAC enc format with samplingrate: %d channels:%d",
- aac_dsp_cfg.sample_rate, aac_dsp_cfg.channel_cfg);
+ ALOGV("%s: Successfully updated AAC enc format with sampling rate: %d channels:%d",
+ __func__, aac_dsp_cfg.sample_rate, aac_dsp_cfg.channel_cfg);
+fail:
+ return is_configured;
+}
+
+bool configure_aac_enc_format_v2(audio_aac_encoder_config_v2 *aac_bt_cfg)
+{
+ struct mixer_ctl *ctl_enc_data = NULL;
+ struct aac_enc_cfg_v2_t aac_dsp_cfg;
+ bool is_configured = false;
+ int ret = 0;
+
+ if (aac_bt_cfg == NULL)
+ return false;
+
+ ctl_enc_data = mixer_get_ctl_by_name(a2dp.adev->mixer, MIXER_ENC_CONFIG_BLOCK);
+ if (!ctl_enc_data) {
+ ALOGE(" ERROR a2dp encoder CONFIG data mixer control not identifed");
+ is_configured = false;
+ goto fail;
+ }
+ memset(&aac_dsp_cfg, 0x0, sizeof(struct aac_enc_cfg_v2_t));
+ aac_dsp_cfg.aac_enc_cfg.enc_format = ENC_MEDIA_FMT_AAC;
+ aac_dsp_cfg.aac_enc_cfg.bit_rate = aac_bt_cfg->audio_aac_enc_cfg.bitrate;
+ aac_dsp_cfg.aac_enc_cfg.sample_rate = aac_bt_cfg->audio_aac_enc_cfg.sampling_rate;
+ switch (aac_bt_cfg->audio_aac_enc_cfg.enc_mode) {
+ case 0:
+ aac_dsp_cfg.aac_enc_cfg.enc_mode = MEDIA_FMT_AAC_AOT_LC;
+ break;
+ case 2:
+ aac_dsp_cfg.aac_enc_cfg.enc_mode = MEDIA_FMT_AAC_AOT_PS;
+ break;
+ case 1:
+ default:
+ aac_dsp_cfg.aac_enc_cfg.enc_mode = MEDIA_FMT_AAC_AOT_SBR;
+ break;
+ }
+ aac_dsp_cfg.aac_enc_cfg.aac_fmt_flag = aac_bt_cfg->audio_aac_enc_cfg.format_flag;
+ aac_dsp_cfg.aac_enc_cfg.channel_cfg = aac_bt_cfg->audio_aac_enc_cfg.channels;
+ aac_dsp_cfg.frame_ctl.ctl_type = aac_bt_cfg->frame_ctl.ctl_type;
+ aac_dsp_cfg.frame_ctl.ctl_value = aac_bt_cfg->frame_ctl.ctl_value;
+
+ ret = mixer_ctl_set_array(ctl_enc_data, (void *)&aac_dsp_cfg,
+ sizeof(struct aac_enc_cfg_v2_t));
+ if (ret != 0) {
+ ALOGE("%s: Failed to set AAC encoder config", __func__);
+ is_configured = false;
+ goto fail;
+ }
+ ret = a2dp_set_bit_format(aac_bt_cfg->audio_aac_enc_cfg.bits_per_sample);
+ if (ret != 0) {
+ is_configured = false;
+ goto fail;
+ }
+ is_configured = true;
+ a2dp.bt_encoder_format = ENC_CODEC_TYPE_AAC;
+ a2dp.enc_sampling_rate = aac_bt_cfg->audio_aac_enc_cfg.sampling_rate;
+ a2dp.enc_channels = aac_bt_cfg->audio_aac_enc_cfg.channels;
+ ALOGV("%s: Successfully updated AAC enc format with sampling rate: %d channels:%d",
+ __func__, aac_dsp_cfg.aac_enc_cfg.sample_rate, aac_dsp_cfg.aac_enc_cfg.channel_cfg);
fail:
return is_configured;
}
@@ -1708,8 +1794,11 @@
#endif
case ENC_CODEC_TYPE_AAC:
ALOGD(" Received AAC encoder supported BT device");
- is_configured =
- configure_aac_enc_format((audio_aac_encoder_config *)codec_info);
+ bool is_aac_frame_ctl_enabled =
+ property_get_bool("persist.vendor.bt.aac_frm_ctl.enabled", false);
+ is_configured = is_aac_frame_ctl_enabled ?
+ configure_aac_enc_format_v2((audio_aac_encoder_config_v2 *) codec_info) :
+ configure_aac_enc_format((audio_aac_encoder_config *) codec_info);
break;
case ENC_CODEC_TYPE_CELT:
ALOGD(" Received CELT encoder supported BT device");
diff --git a/hal/audio_extn/audio_extn.c b/hal/audio_extn/audio_extn.c
index ba096c9..ae1fef7 100644
--- a/hal/audio_extn/audio_extn.c
+++ b/hal/audio_extn/audio_extn.c
@@ -64,6 +64,8 @@
#define MAX_SLEEP_RETRY 100
#define WIFI_INIT_WAIT_SLEEP 50
+#define MAX_NUM_CHANNELS 8
+#define Q14_GAIN_UNITY 0x4000
struct audio_extn_module {
bool anc_enabled;
@@ -301,6 +303,74 @@
ALOGV("%s: Setting custom stereo state success", __func__);
}
}
+
+void audio_extn_send_dual_mono_mixing_coefficients(struct stream_out *out)
+{
+ struct audio_device *adev = out->dev;
+ struct mixer_ctl *ctl;
+ char mixer_ctl_name[128];
+ int cust_ch_mixer_cfg[128], len = 0;
+ int ip_channel_cnt = audio_channel_count_from_out_mask(out->channel_mask);
+ int pcm_device_id = platform_get_pcm_device_id(out->usecase, PCM_PLAYBACK);
+ int op_channel_cnt = 2;
+ int i, j, err;
+
+ ALOGV("%s", __func__);
+ if (!out->started) {
+ out->set_dual_mono = true;
+ goto exit;
+ }
+
+ ALOGD("%s: i/p channel count %d, o/p channel count %d, pcm id %d", __func__,
+ ip_channel_cnt, op_channel_cnt, pcm_device_id);
+
+ snprintf(mixer_ctl_name, sizeof(mixer_ctl_name),
+ "Audio Stream %d Channel Mix Cfg", pcm_device_id);
+ ctl = mixer_get_ctl_by_name(adev->mixer, mixer_ctl_name);
+ if (!ctl) {
+ ALOGE("%s: ERROR. Could not get ctl for mixer cmd - %s",
+ __func__, mixer_ctl_name);
+ goto exit;
+ }
+
+ /* Output channel count corresponds to backend configuration channels.
+ * Input channel count corresponds to ASM session channels.
+ * Set params is called with channels that need to be selected from
+ * input to generate output.
+ * ex: "8,2" to downmix from 8 to 2 i.e. to downmix from 8 to 2,
+ *
+ * This mixer control takes values in the following sequence:
+ * - input channel count(m)
+ * - output channel count(n)
+ * - weight coeff for [out ch#1, in ch#1]
+ * ....
+ * - weight coeff for [out ch#1, in ch#m]
+ *
+ * - weight coeff for [out ch#2, in ch#1]
+ * ....
+ * - weight coeff for [out ch#2, in ch#m]
+ *
+ * - weight coeff for [out ch#n, in ch#1]
+ * ....
+ * - weight coeff for [out ch#n, in ch#m]
+ *
+ * To get dualmono ouptu weightage coeff is calculated as Unity gain
+ * divided by number of input channels.
+ */
+ cust_ch_mixer_cfg[len++] = ip_channel_cnt;
+ cust_ch_mixer_cfg[len++] = op_channel_cnt;
+ for (i = 0; i < op_channel_cnt; i++) {
+ for (j = 0; j < ip_channel_cnt; j++) {
+ cust_ch_mixer_cfg[len++] = Q14_GAIN_UNITY/ip_channel_cnt;
+ }
+ }
+
+ err = mixer_ctl_set_array(ctl, cust_ch_mixer_cfg, len);
+ if (err)
+ ALOGE("%s: ERROR. Mixer ctl set failed", __func__);
+exit:
+ return;
+}
#endif /* CUSTOM_STEREO_ENABLED */
#ifndef DTS_EAGLE
diff --git a/hal/audio_extn/audio_extn.h b/hal/audio_extn/audio_extn.h
index e74bd36..b2b0e73 100644
--- a/hal/audio_extn/audio_extn.h
+++ b/hal/audio_extn/audio_extn.h
@@ -43,6 +43,8 @@
#include "ip_hdlr_intf.h"
#include "battery_listener.h"
+#define AUDIO_PARAMETER_DUAL_MONO "dual_mono"
+
#ifndef AFE_PROXY_ENABLED
#define AUDIO_DEVICE_OUT_PROXY 0x40000
#endif
@@ -1132,4 +1134,9 @@
int audio_extn_ext_hw_plugin_set_audio_gain(void *plugin,
struct audio_usecase *usecase, uint32_t gain);
#endif
+#ifndef CUSTOM_STEREO_ENABLED
+#define audio_extn_send_dual_mono_mixing_coefficients(out) (0)
+#else
+void audio_extn_send_dual_mono_mixing_coefficients(struct stream_out *out);
+#endif
#endif /* AUDIO_EXTN_H */
diff --git a/hal/audio_extn/passthru.c b/hal/audio_extn/passthru.c
index b608043..9180391 100644
--- a/hal/audio_extn/passthru.c
+++ b/hal/audio_extn/passthru.c
@@ -546,6 +546,12 @@
struct stream_out *out)
{
struct audio_backend_cfg backend_cfg;
+ backend_cfg.sample_rate = CODEC_BACKEND_DEFAULT_SAMPLE_RATE;
+ backend_cfg.channels = CODEC_BACKEND_DEFAULT_CHANNELS;
+ backend_cfg.bit_width = CODEC_BACKEND_DEFAULT_BIT_WIDTH;
+ backend_cfg.format = AUDIO_FORMAT_PCM_16_BIT;
+ backend_cfg.passthrough_enabled = false;
+
snd_device_t out_snd_device = SND_DEVICE_NONE;
int max_edid_channels = platform_edid_get_max_channels(out->dev->platform);
diff --git a/hal/audio_extn/spkr_protection.c b/hal/audio_extn/spkr_protection.c
index fc97cce..59fb5a3 100644
--- a/hal/audio_extn/spkr_protection.c
+++ b/hal/audio_extn/spkr_protection.c
@@ -747,7 +747,7 @@
struct timespec ts;
bool acquire_device = false;
- status.status = 0;
+ memset(&status, 0, sizeof(status));
memset(&protCfg, 0, sizeof(protCfg));
if (!adev) {
ALOGE("%s: Invalid params", __func__);
diff --git a/hal/audio_hw.c b/hal/audio_hw.c
index e49782f..5c7fc9c 100644
--- a/hal/audio_hw.c
+++ b/hal/audio_hw.c
@@ -1703,28 +1703,25 @@
if (channels > MAX_HIFI_CHANNEL_COUNT)
channels = MAX_HIFI_CHANNEL_COUNT;
+ channel_count = DEFAULT_CHANNEL_COUNT;
+
if (is_playback) {
// For playback we never report mono because the framework always outputs stereo
- channel_count = DEFAULT_CHANNEL_COUNT;
// audio_channel_out_mask_from_count() does return positional masks for channel counts
- // above 2 but we want indexed masks here. So we
- for ( ; channel_count <= channels && num_masks < max_masks; channel_count++) {
- supported_channel_masks[num_masks++] = audio_channel_out_mask_from_count(channel_count);
- }
- for ( ; channel_count <= channels && num_masks < max_masks; channel_count++) {
- supported_channel_masks[num_masks++] =
- audio_channel_mask_for_index_assignment_from_count(channel_count);
- }
+ // above 2 but we want indexed masks here.
+ supported_channel_masks[num_masks++] = audio_channel_out_mask_from_count(channel_count);
} else {
- // For capture we report all supported channel masks from 1 channel up.
- channel_count = MIN_CHANNEL_COUNT;
// audio_channel_in_mask_from_count() does the right conversion to either positional or
// indexed mask
- for ( ; channel_count <= channels && num_masks < max_masks; channel_count++) {
- supported_channel_masks[num_masks++] =
- audio_channel_in_mask_from_count(channel_count);
- }
+ supported_channel_masks[num_masks++] = audio_channel_in_mask_from_count(channel_count);
}
+
+ for (channel_count = channels; ((channel_count >= DEFAULT_CHANNEL_COUNT) &&
+ (num_masks < max_masks)); channel_count--) {
+ supported_channel_masks[num_masks++] =
+ audio_channel_mask_for_index_assignment_from_count(channel_count);
+ }
+
ALOGV("%s: %s supported ch %d supported_channel_masks[0] %08x num_masks %d", __func__,
is_playback ? "P" : "C", channels, supported_channel_masks[0], num_masks);
return num_masks;
@@ -3213,6 +3210,8 @@
}
break;
}
+ platform_set_stream_channel_map(adev->platform, out->channel_mask,
+ out->pcm_device_id, &out->channel_map_param.channel_map[0]);
ALOGV("%s: pcm_prepare", __func__);
if (pcm_is_ready(out->pcm)) {
@@ -3226,8 +3225,6 @@
goto error_open;
}
}
- platform_set_stream_channel_map(adev->platform, out->channel_mask,
- out->pcm_device_id, &out->channel_map_param.channel_map[0]);
// apply volume for voip playback after path is set up
if (out->usecase == USECASE_AUDIO_PLAYBACK_VOIP)
out_set_voip_volume(&out->stream, out->volume_l, out->volume_r);
@@ -4023,6 +4020,13 @@
pthread_mutex_unlock(&out->lock);
}
+ err = str_parms_get_str(parms, AUDIO_PARAMETER_DUAL_MONO, value,
+ sizeof(value));
+ if (err >= 0) {
+ if (!strncmp("true", value, sizeof("true")) || atoi(value))
+ audio_extn_send_dual_mono_mixing_coefficients(out);
+ }
+
err = str_parms_get_str(parms, AUDIO_PARAMETER_STREAM_PROFILE, value, sizeof(value));
if (err >= 0) {
strlcpy(out->profile, value, sizeof(out->profile));
@@ -4633,6 +4637,8 @@
ret = -EINVAL;
goto exit;
}
+ if (out->set_dual_mono)
+ audio_extn_send_dual_mono_mixing_coefficients(out);
}
if (adev->is_channel_status_set == false && (out->devices & AUDIO_DEVICE_OUT_AUX_DIGITAL)){
@@ -6005,6 +6011,7 @@
out->a2dp_compress_mute = false;
out->hal_output_suspend_supported = 0;
out->dynamic_pm_qos_config_supported = 0;
+ out->set_dual_mono = false;
if ((flags & AUDIO_OUTPUT_FLAG_BD) &&
(property_get_bool("vendor.audio.matrix.limiter.enable", false)))
@@ -7428,8 +7435,10 @@
// between the callback and close_stream
audio_extn_snd_mon_unregister_listener(stream);
- /* Disable echo reference while closing input stream */
- platform_set_echo_reference(adev, false, AUDIO_DEVICE_NONE);
+ // Disable echo reference if there are no active input and hfp call
+ // while closing input stream
+ if (!adev->active_input && !audio_extn_hfp_is_active(adev))
+ platform_set_echo_reference(adev, false, AUDIO_DEVICE_NONE);
if (in == NULL) {
ALOGE("%s: audio_stream_in ptr is NULL", __func__);
diff --git a/hal/audio_hw.h b/hal/audio_hw.h
index c13ca56..1675893 100755
--- a/hal/audio_hw.h
+++ b/hal/audio_hw.h
@@ -354,6 +354,7 @@
bool stream_config_changed;
mix_matrix_params_t pan_scale_params;
mix_matrix_params_t downmix_params;
+ bool set_dual_mono;
};
struct stream_in {
diff --git a/hal/msm8974/platform.c b/hal/msm8974/platform.c
index 8df3770..30b9d10 100644
--- a/hal/msm8974/platform.c
+++ b/hal/msm8974/platform.c
@@ -6471,7 +6471,8 @@
*/
static bool platform_check_capture_codec_backend_cfg(struct audio_device* adev,
int backend_idx,
- struct audio_backend_cfg *backend_cfg)
+ struct audio_backend_cfg *backend_cfg,
+ snd_device_t snd_device)
{
bool backend_change = false;
unsigned int bit_width;
@@ -6492,14 +6493,18 @@
// For voice calls use default configuration i.e. 16b/48K, only applicable to
// default backend
// force routing is not required here, caller will do it anyway
- if ((voice_is_in_call(adev) || adev->mode == AUDIO_MODE_IN_COMMUNICATION)
- || (my_data->is_internal_codec)) {
+ if ((voice_is_in_call(adev) || adev->mode == AUDIO_MODE_IN_COMMUNICATION)) {
ALOGW("%s:txbecf: afe: Use default bw and sr for voice/voip calls and "
"for unprocessed/camera source", __func__);
bit_width = CODEC_BACKEND_DEFAULT_BIT_WIDTH;
sample_rate = CODEC_BACKEND_DEFAULT_SAMPLE_RATE;
channels = CODEC_BACKEND_DEFAULT_TX_CHANNELS;
+ } else if (my_data->is_internal_codec && !audio_is_usb_in_device(snd_device)) {
+ sample_rate = CODEC_BACKEND_DEFAULT_SAMPLE_RATE;
+ channels = CODEC_BACKEND_DEFAULT_TX_CHANNELS;
+ if (adev->active_input->bit_width == 24)
+ bit_width = platform_get_snd_device_bit_width(snd_device);
} else {
struct listnode *node;
struct audio_usecase *uc = NULL;
@@ -6591,7 +6596,7 @@
backend_idx, usecase->id,
platform_get_snd_device_name(snd_device));
if (platform_check_capture_codec_backend_cfg(adev, backend_idx,
- &backend_cfg)) {
+ &backend_cfg, snd_device)) {
ret = platform_set_codec_backend_cfg(adev, snd_device,
backend_cfg);
if(!ret)
diff --git a/qahw_api/test/qahw_playback_test.c b/qahw_api/test/qahw_playback_test.c
index 4160754..a048d3e 100644
--- a/qahw_api/test/qahw_playback_test.c
+++ b/qahw_api/test/qahw_playback_test.c
@@ -251,6 +251,7 @@
stream_param[i].ethread_data = nullptr;
stream_param[i].device_url = "stream";
stream_param[i].play_later = false;
+ stream_param[i].set_params = nullptr;
pthread_mutex_init(&stream_param[i].write_lock, (const pthread_mutexattr_t *)NULL);
pthread_cond_init(&stream_param[i].write_cond, (const pthread_condattr_t *) NULL);
@@ -797,6 +798,14 @@
if (bytes_to_read <= 0)
read_complete_file = true;
+ if (params->set_params) {
+ rc = qahw_out_set_parameters(params->out_handle, params->set_params);
+ if (rc) {
+ fprintf(log_file, "stream %s: failed to set kvpairs\n", params->set_params);
+ fprintf(stderr, "stream %s: failed to set kvpairs\n", params->set_params);
+ }
+ }
+
while (!exit && !stop_playback) {
if (!bytes_remaining) {
fprintf(log_file, "\nstream %d: reading bytes %zd\n", params->stream_index, bytes_wanted);
@@ -2095,7 +2104,7 @@
while ((opt = getopt_long(argc,
argv,
- "-f:r:c:b:d:s:v:V:l:t:a:w:k:PD:KF:Ee:A:u:m:S:C:p::x:y:qQh:i:h:g:",
+ "-f:r:c:b:d:s:v:V:l:t:a:w:k:PD:KF:Ee:A:u:m:S:C:p::x:y:qQh:i:h:g:O:",
long_options,
&option_index)) != -1) {
@@ -2233,6 +2242,9 @@
case 'K':
kpi_mode = true;
break;
+ case 'O':
+ stream_param[i].set_params = optarg;
+ break;
case 'F':
stream_param[i].flags = atoll(optarg);
stream_param[i].flags_set = true;
@@ -2533,6 +2545,7 @@
fprintf(log_file, "stream %d: Bitwidth:%d\n", stream->stream_index, stream->config.offload_info.bit_width);
fprintf(log_file, "stream %d: AAC Format Type:%d\n", stream->stream_index, stream->aac_fmt_type);
fprintf(log_file, "stream %d: Kvpair Values:%s\n", stream->stream_index, stream->kvpair_values);
+ fprintf(log_file, "stream %d: set params Values:%s\n", stream->stream_index, stream->set_params);
fprintf(log_file, "Log file:%s\n", log_filename);
fprintf(log_file, "Volume level:%f\n", vol_level);
diff --git a/qahw_api/test/qahw_playback_test.h b/qahw_api/test/qahw_playback_test.h
index 66229f5..b8bddbc 100644
--- a/qahw_api/test/qahw_playback_test.h
+++ b/qahw_api/test/qahw_playback_test.h
@@ -143,6 +143,7 @@
pthread_cond_t input_buffer_available_cond;
pthread_mutex_t input_buffer_available_lock;
uint32_t input_buffer_available_size;
+ char *set_params;
}stream_config;
qahw_module_handle_t * load_hal(audio_devices_t dev);