Loading configs/msm8952_32/audio_platform_info_extcodec.xml +6 −0 Original line number Diff line number Diff line Loading @@ -26,6 +26,12 @@ <!-- OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN --> <!-- IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --> <audio_platform_info> <acdb_ids> <device name="SND_DEVICE_OUT_VOICE_SPEAKER_2_PROTECTED" acdb_id="150"/> <device name="SND_DEVICE_OUT_VOICE_SPEAKER_2_PROTECTED_VBAT" acdb_id="150"/> <device name="SND_DEVICE_IN_CAPTURE_VI_FEEDBACK_MONO_1" acdb_id="151"/> <device name="SND_DEVICE_IN_CAPTURE_VI_FEEDBACK_MONO_2" acdb_id="152"/> </acdb_ids> <bit_width_configs> <device name="SND_DEVICE_OUT_SPEAKER" bit_width="24"/> </bit_width_configs> Loading configs/msm8952_32/mixer_paths_wcd9326.xml +88 −0 Original line number Diff line number Diff line Loading @@ -521,6 +521,14 @@ <ctl name="SLIM_1_TX Channels" value="One" /> </path> <path name="vbat-speaker-mono-2 echo-reference"> <ctl name="VOC_EXT_EC MUX" value="SLIM_1_TX" /> <ctl name="AIF3_CAP Mixer SLIM TX1" value="1" /> <ctl name="SLIM TX1 MUX" value="RX_MIX_TX1" /> <ctl name="RX MIX TX1 MUX" value="RX_MIX_VBAT8" /> <ctl name="SLIM_1_TX Channels" value="One" /> </path> <path name="vbat-speaker echo-reference"> <ctl name="AUDIO_REF_EC_UL1 MUX" value="SLIM_1_TX" /> <ctl name="AIF3_CAP Mixer SLIM TX1" value="1" /> Loading Loading @@ -1180,6 +1188,11 @@ <path name="voice-call"/> </path> <path name="voice-call vbat-voice-speaker-2"> <path name="vbat-speaker-mono-2 echo-reference" /> <path name="voice-call"/> </path> <path name="voice2-call hdmi"> <ctl name="HDMI_RX_Voice Mixer Voice2" value="1" /> <ctl name="Voice2_Tx Mixer SLIM_0_TX_Voice2" value="1" /> Loading Loading @@ -1210,6 +1223,11 @@ <path name="voice2-call"/> </path> <path name="voice2-call vbat-voice-speaker-2"> <path name="vbat-speaker-mono-2 echo-reference" /> <path name="voice2-call"/> </path> <path name="play-fm"> <ctl name="Internal FM RX Volume" value="1" /> <ctl name="SLIMBUS_0_RX Port Mixer INTERNAL_FM_TX" value="1" /> Loading Loading @@ -1386,6 +1404,11 @@ <path name="volte-call"/> </path> <path name="volte-call vbat-voice-speaker-2"> <path name="vbat-speaker-mono-2 echo-reference" /> <path name="volte-call"/> </path> <path name="compress-voip-call"> <ctl name="SLIM_0_RX_Voice Mixer Voip" value="1" /> <ctl name="Voip_Tx Mixer SLIM_0_TX_Voip" value="1" /> Loading Loading @@ -1417,6 +1440,11 @@ <path name="compress-voip-call"/> </path> <path name="compress-voip-call vbat-voice-speaker-2"> <path name="vbat-speaker-mono-2 echo-reference" /> <path name="compress-voip-call"/> </path> <path name="vowlan-call"> <ctl name="SLIM_0_RX_Voice Mixer VoWLAN" value="1" /> <ctl name="VoWLAN_Tx Mixer SLIM_0_TX_VoWLAN" value="1" /> Loading Loading @@ -1452,6 +1480,11 @@ <path name="vowlan-call"/> </path> <path name="vowlan-call vbat-voice-speaker-2"> <path name="vbat-speaker-mono-2 echo-reference" /> <path name="vowlan-call"/> </path> <path name="voicemmode1-call"> <ctl name="SLIM_0_RX_Voice Mixer VoiceMMode1" value="1" /> <ctl name="VoiceMMode1_Tx Mixer SLIM_0_TX_MMode1" value="1" /> Loading Loading @@ -1487,6 +1520,11 @@ <path name="voicemmode1-call"/> </path> <path name="voicemmode1-call vbat-voice-speaker-2"> <path name="vbat-speaker-mono-2 echo-reference" /> <path name="voicemmode1-call"/> </path> <path name="voicemmode2-call"> <ctl name="SLIM_0_RX_Voice Mixer VoiceMMode2" value="1" /> <ctl name="VoiceMMode2_Tx Mixer SLIM_0_TX_MMode2" value="1" /> Loading Loading @@ -1522,6 +1560,11 @@ <path name="voicemmode2-call"/> </path> <path name="voicemmode2-call vbat-voice-speaker-2"> <path name="vbat-speaker-mono-2 echo-reference" /> <path name="voicemmode2-call"/> </path> <path name="listen-voice-wakeup-1"> <ctl name="LSM1 MUX" value="SLIMBUS_5_TX" /> <ctl name="SLIMBUS_5_TX LSM Function" value="AUDIO" /> Loading Loading @@ -1681,12 +1724,26 @@ <ctl name="SpkrLeft SWR DAC_Port Switch" value="1" /> </path> <path name="wsa-speaker-mono-2"> <ctl name="SLIM RX0 MUX" value="AIF_MIX1_PB" /> <ctl name="SLIM_0_RX Channels" value="One" /> <ctl name="RX INT8_1 MIX1 INP0" value="RX0" /> <ctl name="SpkrRight COMP Switch" value="1" /> <ctl name="SpkrRight BOOST Switch" value="1" /> <ctl name="SpkrRight VISENSE Switch" value="1" /> <ctl name="SpkrRight SWR DAC_Port Switch" value="1" /> </path> <path name="vbat-speaker-mono"> <path name="wsa-speaker-mono" /> <ctl name="RX INT7 VBAT SPKRL VBAT Enable" value="1" /> </path> <path name="vbat-speaker-mono-2"> <path name="wsa-speaker-mono-2" /> <ctl name="RX INT8 VBAT SPKRR VBAT Enable" value="1" /> </path> <path name="vbat-speaker"> <path name="wsa-speaker" /> <ctl name="RX INT7 VBAT SPKRL VBAT Enable" value="1" /> Loading Loading @@ -1742,9 +1799,23 @@ <ctl name="SLIM0_RX_VI_FB_LCH_MUX" value="SLIM4_TX" /> </path> <path name="voice-speaker-2-protected"> <ctl name="AIF4_VI Mixer SPKR_VI_2" value="1" /> <ctl name="SLIM_4_TX Format" value="PACKED_16B" /> <path name="wsa-speaker-mono-2" /> <ctl name="VI_FEED_TX Channels" value="One" /> <ctl name="SLIM0_RX_VI_FB_LCH_MUX" value="SLIM4_TX" /> </path> <path name="vi-feedback"> </path> <path name="vi-feedback-mono-1"> </path> <path name="vi-feedback-mono-2"> </path> <path name="speaker-protected-vbat"> <path name="speaker-protected" /> <ctl name="RX INT7 VBAT SPKRL VBAT Enable" value="1" /> Loading @@ -1756,6 +1827,11 @@ <ctl name="RX INT7 VBAT SPKRL VBAT Enable" value="1" /> </path> <path name="voice-speaker-2-protected-vbat"> <path name="voice-speaker-2-protected" /> <ctl name="RX INT8 VBAT SPKRR VBAT Enable" value="1" /> </path> <path name="handset"> <ctl name="SLIM RX0 MUX" value="AIF_MIX1_PB" /> <ctl name="SLIM_0_RX Channels" value="One" /> Loading Loading @@ -1841,14 +1917,26 @@ <path name="vbat-speaker-mono" /> </path> <path name="vbat-voice-speaker-2"> <path name="vbat-speaker-mono-2" /> </path> <path name="wsa-voice-speaker"> <path name="wsa-speaker-mono" /> </path> <path name="wsa-voice-speaker-2"> <path name="wsa-speaker-mono-2" /> </path> <path name="voice-speaker"> <path name="wsa-speaker-mono" /> </path> <path name="voice-speaker-2"> <path name="wsa-speaker-mono-2" /> </path> <path name="voice-speaker-mic"> <path name="speaker-mic" /> </path> Loading configs/msm8952_32/mixer_paths_wcd9335.xml +88 −0 Original line number Diff line number Diff line Loading @@ -540,6 +540,14 @@ <ctl name="SLIM_1_TX Channels" value="One" /> </path> <path name="vbat-speaker-mono-2 echo-reference"> <ctl name="VOC_EXT_EC MUX" value="SLIM_1_TX" /> <ctl name="AIF3_CAP Mixer SLIM TX1" value="1" /> <ctl name="SLIM TX1 MUX" value="RX_MIX_TX1" /> <ctl name="RX MIX TX1 MUX" value="RX_MIX_VBAT8" /> <ctl name="SLIM_1_TX Channels" value="One" /> </path> <path name="vbat-speaker echo-reference"> <ctl name="AUDIO_REF_EC_UL1 MUX" value="SLIM_1_TX" /> <ctl name="AIF3_CAP Mixer SLIM TX1" value="1" /> Loading Loading @@ -1199,6 +1207,11 @@ <path name="voice-call"/> </path> <path name="voice-call vbat-voice-speaker-2"> <path name="vbat-speaker-mono-2 echo-reference" /> <path name="voice-call"/> </path> <path name="voice2-call hdmi"> <ctl name="HDMI_RX_Voice Mixer Voice2" value="1" /> <ctl name="Voice2_Tx Mixer SLIM_0_TX_Voice2" value="1" /> Loading Loading @@ -1229,6 +1242,11 @@ <path name="voice2-call"/> </path> <path name="voice2-call vbat-voice-speaker-2"> <path name="vbat-speaker-mono-2 echo-reference" /> <path name="voice2-call"/> </path> <path name="play-fm"> <ctl name="Internal FM RX Volume" value="1" /> <ctl name="SLIMBUS_0_RX Port Mixer INTERNAL_FM_TX" value="1" /> Loading Loading @@ -1405,6 +1423,11 @@ <path name="volte-call"/> </path> <path name="volte-call vbat-voice-speaker-2"> <path name="vbat-speaker-mono-2 echo-reference" /> <path name="volte-call"/> </path> <path name="compress-voip-call"> <ctl name="SLIM_0_RX_Voice Mixer Voip" value="1" /> <ctl name="Voip_Tx Mixer SLIM_0_TX_Voip" value="1" /> Loading Loading @@ -1436,6 +1459,11 @@ <path name="compress-voip-call"/> </path> <path name="compress-voip-call vbat-voice-speaker-2"> <path name="vbat-speaker-mono-2 echo-reference" /> <path name="compress-voip-call"/> </path> <path name="vowlan-call"> <ctl name="SLIM_0_RX_Voice Mixer VoWLAN" value="1" /> <ctl name="VoWLAN_Tx Mixer SLIM_0_TX_VoWLAN" value="1" /> Loading Loading @@ -1471,6 +1499,11 @@ <path name="vowlan-call"/> </path> <path name="vowlan-call vbat-voice-speaker-2"> <path name="vbat-speaker-mono-2 echo-reference" /> <path name="vowlan-call"/> </path> <path name="voicemmode1-call"> <ctl name="SLIM_0_RX_Voice Mixer VoiceMMode1" value="1" /> <ctl name="VoiceMMode1_Tx Mixer SLIM_0_TX_MMode1" value="1" /> Loading Loading @@ -1506,6 +1539,11 @@ <path name="voicemmode1-call"/> </path> <path name="voicemmode1-call vbat-voice-speaker-2"> <path name="vbat-speaker-mono-2 echo-reference" /> <path name="voicemmode1-call"/> </path> <path name="voicemmode2-call"> <ctl name="SLIM_0_RX_Voice Mixer VoiceMMode2" value="1" /> <ctl name="VoiceMMode2_Tx Mixer SLIM_0_TX_MMode2" value="1" /> Loading Loading @@ -1541,6 +1579,11 @@ <path name="voicemmode2-call"/> </path> <path name="voicemmode2-call vbat-voice-speaker-2"> <path name="vbat-speaker-mono-2 echo-reference" /> <path name="voicemmode2-call"/> </path> <path name="listen-voice-wakeup-1"> <ctl name="LSM1 MUX" value="SLIMBUS_5_TX" /> <ctl name="SLIMBUS_5_TX LSM Function" value="AUDIO" /> Loading Loading @@ -1700,12 +1743,26 @@ <ctl name="SpkrLeft SWR DAC_Port Switch" value="1" /> </path> <path name="wsa-speaker-mono-2"> <ctl name="SLIM RX0 MUX" value="AIF_MIX1_PB" /> <ctl name="SLIM_0_RX Channels" value="One" /> <ctl name="RX INT8_1 MIX1 INP0" value="RX0" /> <ctl name="SpkrRight COMP Switch" value="1" /> <ctl name="SpkrRight BOOST Switch" value="1" /> <ctl name="SpkrRight VISENSE Switch" value="1" /> <ctl name="SpkrRight SWR DAC_Port Switch" value="1" /> </path> <path name="vbat-speaker-mono"> <path name="wsa-speaker-mono" /> <ctl name="RX INT7 VBAT SPKRL VBAT Enable" value="1" /> </path> <path name="vbat-speaker-mono-2"> <path name="wsa-speaker-mono-2" /> <ctl name="RX INT8 VBAT SPKRR VBAT Enable" value="1" /> </path> <path name="vbat-speaker"> <path name="wsa-speaker" /> <ctl name="RX INT7 VBAT SPKRL VBAT Enable" value="1" /> Loading Loading @@ -1761,9 +1818,23 @@ <ctl name="SLIM0_RX_VI_FB_LCH_MUX" value="SLIM4_TX" /> </path> <path name="voice-speaker-2-protected"> <ctl name="AIF4_VI Mixer SPKR_VI_1" value="1" /> <ctl name="SLIM_4_TX Format" value="PACKED_16B" /> <path name="wsa-speaker-mono-2" /> <ctl name="VI_FEED_TX Channels" value="One" /> <ctl name="SLIM0_RX_VI_FB_LCH_MUX" value="SLIM4_TX" /> </path> <path name="vi-feedback"> </path> <path name="vi-feedback-mono-1"> </path> <path name="vi-feedback-mono-2"> </path> <path name="speaker-protected-vbat"> <path name="speaker-protected" /> <ctl name="RX INT7 VBAT SPKRL VBAT Enable" value="1" /> Loading @@ -1775,6 +1846,11 @@ <ctl name="RX INT7 VBAT SPKRL VBAT Enable" value="1" /> </path> <path name="voice-speaker-2-protected-vbat"> <path name="voice-speaker-2-protected" /> <ctl name="RX INT8 VBAT SPKRR VBAT Enable" value="1" /> </path> <path name="handset"> <ctl name="SLIM RX0 MUX" value="AIF_MIX1_PB" /> <ctl name="SLIM_0_RX Channels" value="One" /> Loading Loading @@ -1874,14 +1950,26 @@ <path name="vbat-speaker-mono" /> </path> <path name="vbat-voice-speaker-2"> <path name="vbat-speaker-mono-2" /> </path> <path name="wsa-voice-speaker"> <path name="wsa-speaker-mono" /> </path> <path name="wsa-voice-speaker-2"> <path name="wsa-speaker-mono-2" /> </path> <path name="voice-speaker"> <path name="wsa-speaker-mono" /> </path> <path name="voice-speaker-2"> <path name="wsa-speaker-mono-2" /> </path> <path name="voice-speaker-mic"> <path name="speaker-mic" /> </path> Loading hal/audio_extn/dev_arbi.c +2 −1 Original line number Diff line number Diff line /* * Copyright (c) 2014, The Linux Foundation. All rights reserved. * Copyright (c) 2014-2016, The Linux Foundation. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are Loading Loading @@ -131,6 +131,7 @@ static audio_devices_t get_audio_device(snd_device_t snd_device) {SND_DEVICE_OUT_VOICE_HANDSET, AUDIO_DEVICE_OUT_EARPIECE}, {SND_DEVICE_OUT_SPEAKER, AUDIO_DEVICE_OUT_SPEAKER}, {SND_DEVICE_OUT_VOICE_SPEAKER, AUDIO_DEVICE_OUT_SPEAKER}, {SND_DEVICE_OUT_VOICE_SPEAKER_2, AUDIO_DEVICE_OUT_SPEAKER}, {SND_DEVICE_OUT_HEADPHONES, AUDIO_DEVICE_OUT_WIRED_HEADPHONE}, {SND_DEVICE_OUT_VOICE_HEADPHONES, AUDIO_DEVICE_OUT_WIRED_HEADPHONE}, {SND_DEVICE_OUT_SPEAKER_AND_HEADPHONES, Loading hal/audio_extn/spkr_protection.c +108 −5 Original line number Diff line number Diff line Loading @@ -111,6 +111,11 @@ enum speaker_protection_mode { SPKR_PROTECTION_MODE_CALIBRATE = 1, }; struct spkr_prot_r0t0 { int r0[SP_V2_NUM_MAX_SPKRS]; int t0[SP_V2_NUM_MAX_SPKRS]; }; struct speaker_prot_session { int spkr_prot_mode; int spkr_processing_state; Loading @@ -136,6 +141,7 @@ struct speaker_prot_session { bool spkr_prot_enable; bool spkr_in_use; struct timespec spkr_last_time_used; struct spkr_prot_r0t0 sp_r0t0_cal; bool wsa_found; const char *spkr_1_tz_name; const char *spkr_2_tz_name; Loading Loading @@ -322,6 +328,7 @@ static int set_spkr_prot_cal(int cal_fd, int ret = 0; struct audio_cal_fb_spk_prot_cfg cal_data; char value[PROPERTY_VALUE_MAX]; static int cal_done = 0; if (cal_fd < 0) { ALOGE("%s: Error: cal_fd = %d", __func__, cal_fd); Loading Loading @@ -364,6 +371,13 @@ static int set_spkr_prot_cal(int cal_fd, ret = -ENODEV; goto done; } if (protCfg->mode == MSM_SPKR_PROT_CALIBRATED && !cal_done) { handle.sp_r0t0_cal.r0[SP_V2_SPKR_1] = protCfg->r0[SP_V2_SPKR_1]; handle.sp_r0t0_cal.r0[SP_V2_SPKR_2] = protCfg->r0[SP_V2_SPKR_2]; handle.sp_r0t0_cal.t0[SP_V2_SPKR_1] = protCfg->t0[SP_V2_SPKR_1]; handle.sp_r0t0_cal.t0[SP_V2_SPKR_2] = protCfg->t0[SP_V2_SPKR_2]; cal_done = 1; } done: return ret; } Loading Loading @@ -958,16 +972,26 @@ void audio_extn_spkr_prot_init(void *adev) ALOGD("%s: WSA analog mode", __func__); platform_set_snd_device_backend(SND_DEVICE_OUT_VOICE_SPEAKER_WSA, "speaker-protected"); platform_set_snd_device_backend(SND_DEVICE_OUT_VOICE_SPEAKER_2_WSA, "speaker-protected"); platform_set_snd_device_acdb_id(SND_DEVICE_OUT_SPEAKER_PROTECTED, ACDB_DEVICE_SPKR_PROT_WSA_ANALOG); platform_set_snd_device_acdb_id(SND_DEVICE_OUT_VOICE_SPEAKER_PROTECTED, ACDB_DEVICE_SPKR_PROT_WSA_ANALOG); platform_set_snd_device_acdb_id(SND_DEVICE_OUT_VOICE_SPEAKER_2_PROTECTED, ACDB_DEVICE_SPKR_PROT_WSA_ANALOG); platform_set_snd_device_acdb_id(SND_DEVICE_OUT_SPEAKER_PROTECTED_VBAT, ACDB_DEVICE_SPKR_PROT_WSA_ANALOG); platform_set_snd_device_acdb_id(SND_DEVICE_OUT_VOICE_SPEAKER_PROTECTED_VBAT, ACDB_DEVICE_SPKR_PROT_WSA_ANALOG); platform_set_snd_device_acdb_id(SND_DEVICE_OUT_VOICE_SPEAKER_2_PROTECTED_VBAT, ACDB_DEVICE_SPKR_PROT_WSA_ANALOG); platform_set_snd_device_acdb_id(SND_DEVICE_IN_CAPTURE_VI_FEEDBACK, ACDB_DEVICE_VI_FEEDBACK_WSA_ANALOG); platform_set_snd_device_acdb_id(SND_DEVICE_IN_CAPTURE_VI_FEEDBACK_MONO_1, ACDB_DEVICE_VI_FEEDBACK_WSA_ANALOG); platform_set_snd_device_acdb_id(SND_DEVICE_IN_CAPTURE_VI_FEEDBACK_MONO_2, ACDB_DEVICE_VI_FEEDBACK_WSA_ANALOG); pcm_config_skr_prot.channels = 2; } #endif Loading Loading @@ -1056,12 +1080,21 @@ int audio_extn_spkr_prot_get_acdb_id(snd_device_t snd_device) case SND_DEVICE_OUT_VOICE_SPEAKER_VBAT: acdb_id = platform_get_snd_device_acdb_id(SND_DEVICE_OUT_VOICE_SPEAKER_PROTECTED_VBAT); break; case SND_DEVICE_OUT_VOICE_SPEAKER_2_VBAT: acdb_id = platform_get_snd_device_acdb_id(SND_DEVICE_OUT_VOICE_SPEAKER_2_PROTECTED_VBAT); break; case SND_DEVICE_OUT_VOICE_SPEAKER: #ifdef PLATFORM_MSM8916 case SND_DEVICE_OUT_VOICE_SPEAKER_WSA: #endif acdb_id = platform_get_snd_device_acdb_id(SND_DEVICE_OUT_VOICE_SPEAKER_PROTECTED); break; case SND_DEVICE_OUT_VOICE_SPEAKER_2: #ifdef PLATFORM_MSM8916 case SND_DEVICE_OUT_VOICE_SPEAKER_2_WSA: #endif acdb_id = platform_get_snd_device_acdb_id(SND_DEVICE_OUT_VOICE_SPEAKER_2_PROTECTED); break; default: acdb_id = -EINVAL; break; Loading @@ -1084,22 +1117,79 @@ int audio_extn_get_spkr_prot_snd_device(snd_device_t snd_device) return SND_DEVICE_OUT_SPEAKER_PROTECTED_VBAT; case SND_DEVICE_OUT_VOICE_SPEAKER_VBAT: return SND_DEVICE_OUT_VOICE_SPEAKER_PROTECTED_VBAT; case SND_DEVICE_OUT_VOICE_SPEAKER_2_VBAT: return SND_DEVICE_OUT_VOICE_SPEAKER_2_PROTECTED_VBAT; case SND_DEVICE_OUT_VOICE_SPEAKER: #ifdef PLATFORM_MSM8916 case SND_DEVICE_OUT_VOICE_SPEAKER_WSA: #endif return SND_DEVICE_OUT_VOICE_SPEAKER_PROTECTED; case SND_DEVICE_OUT_VOICE_SPEAKER_2: #ifdef PLATFORM_MSM8916 case SND_DEVICE_OUT_VOICE_SPEAKER_2_WSA: #endif return SND_DEVICE_OUT_VOICE_SPEAKER_2_PROTECTED; default: return snd_device; } } int audio_extn_get_vi_feedback_snd_device(snd_device_t snd_device) { switch(snd_device) { case SND_DEVICE_OUT_VOICE_SPEAKER_PROTECTED_VBAT: case SND_DEVICE_OUT_VOICE_SPEAKER_PROTECTED: return SND_DEVICE_IN_CAPTURE_VI_FEEDBACK_MONO_1; case SND_DEVICE_OUT_VOICE_SPEAKER_2_PROTECTED_VBAT: case SND_DEVICE_OUT_VOICE_SPEAKER_2_PROTECTED: return SND_DEVICE_IN_CAPTURE_VI_FEEDBACK_MONO_2; default: return SND_DEVICE_IN_CAPTURE_VI_FEEDBACK; } } int audio_extn_select_spkr_prot_cal_data(snd_device_t snd_device) { struct audio_cal_info_spk_prot_cfg protCfg; int acdb_fd = -1; int ret = 0; acdb_fd = open("/dev/msm_audio_cal", O_RDWR | O_NONBLOCK); if (acdb_fd < 0) { ALOGE("%s: open msm_acdb failed", __func__); return -ENODEV; } switch(snd_device) { case SND_DEVICE_OUT_VOICE_SPEAKER_2_PROTECTED_VBAT: case SND_DEVICE_OUT_VOICE_SPEAKER_2_PROTECTED: protCfg.r0[SP_V2_SPKR_1] = handle.sp_r0t0_cal.r0[SP_V2_SPKR_2]; protCfg.r0[SP_V2_SPKR_2] = handle.sp_r0t0_cal.r0[SP_V2_SPKR_1]; protCfg.t0[SP_V2_SPKR_1] = handle.sp_r0t0_cal.t0[SP_V2_SPKR_2]; protCfg.t0[SP_V2_SPKR_2] = handle.sp_r0t0_cal.t0[SP_V2_SPKR_1]; break; default: protCfg.r0[SP_V2_SPKR_1] = handle.sp_r0t0_cal.r0[SP_V2_SPKR_1]; protCfg.r0[SP_V2_SPKR_2] = handle.sp_r0t0_cal.r0[SP_V2_SPKR_2]; protCfg.t0[SP_V2_SPKR_1] = handle.sp_r0t0_cal.t0[SP_V2_SPKR_1]; protCfg.t0[SP_V2_SPKR_2] = handle.sp_r0t0_cal.t0[SP_V2_SPKR_2]; break; } protCfg.mode = MSM_SPKR_PROT_CALIBRATED; ret = set_spkr_prot_cal(acdb_fd, &protCfg); if (ret) ALOGE("%s: speaker protection cal data swap failed", __func__); close(acdb_fd); return ret; } int audio_extn_spkr_prot_start_processing(snd_device_t snd_device) { struct audio_usecase *uc_info_tx; struct audio_device *adev = handle.adev_handle; int32_t pcm_dev_tx_id = -1, ret = 0; bool disable_tx = false; snd_device_t in_snd_device; ALOGV("%s: Entry", __func__); /* cancel speaker calibration */ Loading @@ -1108,6 +1198,16 @@ int audio_extn_spkr_prot_start_processing(snd_device_t snd_device) return -EINVAL; } snd_device = audio_extn_get_spkr_prot_snd_device(snd_device); if (handle.spkr_prot_mode == MSM_SPKR_PROT_CALIBRATED) { ret = audio_extn_select_spkr_prot_cal_data(snd_device); if (ret) { ALOGE("%s: Setting speaker protection cal data failed", __func__); return ret; } } in_snd_device = audio_extn_get_vi_feedback_snd_device(snd_device); spkr_prot_set_spkrstatus(true); uc_info_tx = (struct audio_usecase *)calloc(1, sizeof(struct audio_usecase)); if (!uc_info_tx) { Loading @@ -1122,12 +1222,12 @@ int audio_extn_spkr_prot_start_processing(snd_device_t snd_device) if (handle.spkr_processing_state == SPKR_PROCESSING_IN_IDLE) { uc_info_tx->id = USECASE_AUDIO_SPKR_CALIB_TX; uc_info_tx->type = PCM_CAPTURE; uc_info_tx->in_snd_device = SND_DEVICE_IN_CAPTURE_VI_FEEDBACK; uc_info_tx->in_snd_device = in_snd_device; uc_info_tx->out_snd_device = SND_DEVICE_NONE; handle.pcm_tx = NULL; list_add_tail(&adev->usecase_list, &uc_info_tx->list); disable_tx = true; enable_snd_device(adev, SND_DEVICE_IN_CAPTURE_VI_FEEDBACK); enable_snd_device(adev, in_snd_device); enable_audio_route(adev, uc_info_tx); pcm_dev_tx_id = platform_get_pcm_device_id(uc_info_tx->id, PCM_CAPTURE); Loading Loading @@ -1167,9 +1267,9 @@ exit: list_remove(&uc_info_tx->list); uc_info_tx->id = USECASE_AUDIO_SPKR_CALIB_TX; uc_info_tx->type = PCM_CAPTURE; uc_info_tx->in_snd_device = SND_DEVICE_IN_CAPTURE_VI_FEEDBACK; uc_info_tx->in_snd_device = in_snd_device; uc_info_tx->out_snd_device = SND_DEVICE_NONE; disable_snd_device(adev, SND_DEVICE_IN_CAPTURE_VI_FEEDBACK); disable_snd_device(adev, in_snd_device); disable_audio_route(adev, uc_info_tx); free(uc_info_tx); } else Loading @@ -1183,17 +1283,20 @@ void audio_extn_spkr_prot_stop_processing(snd_device_t snd_device) { struct audio_usecase *uc_info_tx; struct audio_device *adev = handle.adev_handle; snd_device_t in_snd_device; ALOGV("%s: Entry", __func__); snd_device = audio_extn_get_spkr_prot_snd_device(snd_device); spkr_prot_set_spkrstatus(false); in_snd_device = audio_extn_get_vi_feedback_snd_device(snd_device); pthread_mutex_lock(&handle.mutex_spkr_prot); if (adev && handle.spkr_processing_state == SPKR_PROCESSING_IN_PROGRESS) { uc_info_tx = get_usecase_from_list(adev, USECASE_AUDIO_SPKR_CALIB_TX); if (handle.pcm_tx) pcm_close(handle.pcm_tx); handle.pcm_tx = NULL; disable_snd_device(adev, SND_DEVICE_IN_CAPTURE_VI_FEEDBACK); disable_snd_device(adev, in_snd_device); if (uc_info_tx) { list_remove(&uc_info_tx->list); disable_audio_route(adev, uc_info_tx); Loading Loading
configs/msm8952_32/audio_platform_info_extcodec.xml +6 −0 Original line number Diff line number Diff line Loading @@ -26,6 +26,12 @@ <!-- OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN --> <!-- IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --> <audio_platform_info> <acdb_ids> <device name="SND_DEVICE_OUT_VOICE_SPEAKER_2_PROTECTED" acdb_id="150"/> <device name="SND_DEVICE_OUT_VOICE_SPEAKER_2_PROTECTED_VBAT" acdb_id="150"/> <device name="SND_DEVICE_IN_CAPTURE_VI_FEEDBACK_MONO_1" acdb_id="151"/> <device name="SND_DEVICE_IN_CAPTURE_VI_FEEDBACK_MONO_2" acdb_id="152"/> </acdb_ids> <bit_width_configs> <device name="SND_DEVICE_OUT_SPEAKER" bit_width="24"/> </bit_width_configs> Loading
configs/msm8952_32/mixer_paths_wcd9326.xml +88 −0 Original line number Diff line number Diff line Loading @@ -521,6 +521,14 @@ <ctl name="SLIM_1_TX Channels" value="One" /> </path> <path name="vbat-speaker-mono-2 echo-reference"> <ctl name="VOC_EXT_EC MUX" value="SLIM_1_TX" /> <ctl name="AIF3_CAP Mixer SLIM TX1" value="1" /> <ctl name="SLIM TX1 MUX" value="RX_MIX_TX1" /> <ctl name="RX MIX TX1 MUX" value="RX_MIX_VBAT8" /> <ctl name="SLIM_1_TX Channels" value="One" /> </path> <path name="vbat-speaker echo-reference"> <ctl name="AUDIO_REF_EC_UL1 MUX" value="SLIM_1_TX" /> <ctl name="AIF3_CAP Mixer SLIM TX1" value="1" /> Loading Loading @@ -1180,6 +1188,11 @@ <path name="voice-call"/> </path> <path name="voice-call vbat-voice-speaker-2"> <path name="vbat-speaker-mono-2 echo-reference" /> <path name="voice-call"/> </path> <path name="voice2-call hdmi"> <ctl name="HDMI_RX_Voice Mixer Voice2" value="1" /> <ctl name="Voice2_Tx Mixer SLIM_0_TX_Voice2" value="1" /> Loading Loading @@ -1210,6 +1223,11 @@ <path name="voice2-call"/> </path> <path name="voice2-call vbat-voice-speaker-2"> <path name="vbat-speaker-mono-2 echo-reference" /> <path name="voice2-call"/> </path> <path name="play-fm"> <ctl name="Internal FM RX Volume" value="1" /> <ctl name="SLIMBUS_0_RX Port Mixer INTERNAL_FM_TX" value="1" /> Loading Loading @@ -1386,6 +1404,11 @@ <path name="volte-call"/> </path> <path name="volte-call vbat-voice-speaker-2"> <path name="vbat-speaker-mono-2 echo-reference" /> <path name="volte-call"/> </path> <path name="compress-voip-call"> <ctl name="SLIM_0_RX_Voice Mixer Voip" value="1" /> <ctl name="Voip_Tx Mixer SLIM_0_TX_Voip" value="1" /> Loading Loading @@ -1417,6 +1440,11 @@ <path name="compress-voip-call"/> </path> <path name="compress-voip-call vbat-voice-speaker-2"> <path name="vbat-speaker-mono-2 echo-reference" /> <path name="compress-voip-call"/> </path> <path name="vowlan-call"> <ctl name="SLIM_0_RX_Voice Mixer VoWLAN" value="1" /> <ctl name="VoWLAN_Tx Mixer SLIM_0_TX_VoWLAN" value="1" /> Loading Loading @@ -1452,6 +1480,11 @@ <path name="vowlan-call"/> </path> <path name="vowlan-call vbat-voice-speaker-2"> <path name="vbat-speaker-mono-2 echo-reference" /> <path name="vowlan-call"/> </path> <path name="voicemmode1-call"> <ctl name="SLIM_0_RX_Voice Mixer VoiceMMode1" value="1" /> <ctl name="VoiceMMode1_Tx Mixer SLIM_0_TX_MMode1" value="1" /> Loading Loading @@ -1487,6 +1520,11 @@ <path name="voicemmode1-call"/> </path> <path name="voicemmode1-call vbat-voice-speaker-2"> <path name="vbat-speaker-mono-2 echo-reference" /> <path name="voicemmode1-call"/> </path> <path name="voicemmode2-call"> <ctl name="SLIM_0_RX_Voice Mixer VoiceMMode2" value="1" /> <ctl name="VoiceMMode2_Tx Mixer SLIM_0_TX_MMode2" value="1" /> Loading Loading @@ -1522,6 +1560,11 @@ <path name="voicemmode2-call"/> </path> <path name="voicemmode2-call vbat-voice-speaker-2"> <path name="vbat-speaker-mono-2 echo-reference" /> <path name="voicemmode2-call"/> </path> <path name="listen-voice-wakeup-1"> <ctl name="LSM1 MUX" value="SLIMBUS_5_TX" /> <ctl name="SLIMBUS_5_TX LSM Function" value="AUDIO" /> Loading Loading @@ -1681,12 +1724,26 @@ <ctl name="SpkrLeft SWR DAC_Port Switch" value="1" /> </path> <path name="wsa-speaker-mono-2"> <ctl name="SLIM RX0 MUX" value="AIF_MIX1_PB" /> <ctl name="SLIM_0_RX Channels" value="One" /> <ctl name="RX INT8_1 MIX1 INP0" value="RX0" /> <ctl name="SpkrRight COMP Switch" value="1" /> <ctl name="SpkrRight BOOST Switch" value="1" /> <ctl name="SpkrRight VISENSE Switch" value="1" /> <ctl name="SpkrRight SWR DAC_Port Switch" value="1" /> </path> <path name="vbat-speaker-mono"> <path name="wsa-speaker-mono" /> <ctl name="RX INT7 VBAT SPKRL VBAT Enable" value="1" /> </path> <path name="vbat-speaker-mono-2"> <path name="wsa-speaker-mono-2" /> <ctl name="RX INT8 VBAT SPKRR VBAT Enable" value="1" /> </path> <path name="vbat-speaker"> <path name="wsa-speaker" /> <ctl name="RX INT7 VBAT SPKRL VBAT Enable" value="1" /> Loading Loading @@ -1742,9 +1799,23 @@ <ctl name="SLIM0_RX_VI_FB_LCH_MUX" value="SLIM4_TX" /> </path> <path name="voice-speaker-2-protected"> <ctl name="AIF4_VI Mixer SPKR_VI_2" value="1" /> <ctl name="SLIM_4_TX Format" value="PACKED_16B" /> <path name="wsa-speaker-mono-2" /> <ctl name="VI_FEED_TX Channels" value="One" /> <ctl name="SLIM0_RX_VI_FB_LCH_MUX" value="SLIM4_TX" /> </path> <path name="vi-feedback"> </path> <path name="vi-feedback-mono-1"> </path> <path name="vi-feedback-mono-2"> </path> <path name="speaker-protected-vbat"> <path name="speaker-protected" /> <ctl name="RX INT7 VBAT SPKRL VBAT Enable" value="1" /> Loading @@ -1756,6 +1827,11 @@ <ctl name="RX INT7 VBAT SPKRL VBAT Enable" value="1" /> </path> <path name="voice-speaker-2-protected-vbat"> <path name="voice-speaker-2-protected" /> <ctl name="RX INT8 VBAT SPKRR VBAT Enable" value="1" /> </path> <path name="handset"> <ctl name="SLIM RX0 MUX" value="AIF_MIX1_PB" /> <ctl name="SLIM_0_RX Channels" value="One" /> Loading Loading @@ -1841,14 +1917,26 @@ <path name="vbat-speaker-mono" /> </path> <path name="vbat-voice-speaker-2"> <path name="vbat-speaker-mono-2" /> </path> <path name="wsa-voice-speaker"> <path name="wsa-speaker-mono" /> </path> <path name="wsa-voice-speaker-2"> <path name="wsa-speaker-mono-2" /> </path> <path name="voice-speaker"> <path name="wsa-speaker-mono" /> </path> <path name="voice-speaker-2"> <path name="wsa-speaker-mono-2" /> </path> <path name="voice-speaker-mic"> <path name="speaker-mic" /> </path> Loading
configs/msm8952_32/mixer_paths_wcd9335.xml +88 −0 Original line number Diff line number Diff line Loading @@ -540,6 +540,14 @@ <ctl name="SLIM_1_TX Channels" value="One" /> </path> <path name="vbat-speaker-mono-2 echo-reference"> <ctl name="VOC_EXT_EC MUX" value="SLIM_1_TX" /> <ctl name="AIF3_CAP Mixer SLIM TX1" value="1" /> <ctl name="SLIM TX1 MUX" value="RX_MIX_TX1" /> <ctl name="RX MIX TX1 MUX" value="RX_MIX_VBAT8" /> <ctl name="SLIM_1_TX Channels" value="One" /> </path> <path name="vbat-speaker echo-reference"> <ctl name="AUDIO_REF_EC_UL1 MUX" value="SLIM_1_TX" /> <ctl name="AIF3_CAP Mixer SLIM TX1" value="1" /> Loading Loading @@ -1199,6 +1207,11 @@ <path name="voice-call"/> </path> <path name="voice-call vbat-voice-speaker-2"> <path name="vbat-speaker-mono-2 echo-reference" /> <path name="voice-call"/> </path> <path name="voice2-call hdmi"> <ctl name="HDMI_RX_Voice Mixer Voice2" value="1" /> <ctl name="Voice2_Tx Mixer SLIM_0_TX_Voice2" value="1" /> Loading Loading @@ -1229,6 +1242,11 @@ <path name="voice2-call"/> </path> <path name="voice2-call vbat-voice-speaker-2"> <path name="vbat-speaker-mono-2 echo-reference" /> <path name="voice2-call"/> </path> <path name="play-fm"> <ctl name="Internal FM RX Volume" value="1" /> <ctl name="SLIMBUS_0_RX Port Mixer INTERNAL_FM_TX" value="1" /> Loading Loading @@ -1405,6 +1423,11 @@ <path name="volte-call"/> </path> <path name="volte-call vbat-voice-speaker-2"> <path name="vbat-speaker-mono-2 echo-reference" /> <path name="volte-call"/> </path> <path name="compress-voip-call"> <ctl name="SLIM_0_RX_Voice Mixer Voip" value="1" /> <ctl name="Voip_Tx Mixer SLIM_0_TX_Voip" value="1" /> Loading Loading @@ -1436,6 +1459,11 @@ <path name="compress-voip-call"/> </path> <path name="compress-voip-call vbat-voice-speaker-2"> <path name="vbat-speaker-mono-2 echo-reference" /> <path name="compress-voip-call"/> </path> <path name="vowlan-call"> <ctl name="SLIM_0_RX_Voice Mixer VoWLAN" value="1" /> <ctl name="VoWLAN_Tx Mixer SLIM_0_TX_VoWLAN" value="1" /> Loading Loading @@ -1471,6 +1499,11 @@ <path name="vowlan-call"/> </path> <path name="vowlan-call vbat-voice-speaker-2"> <path name="vbat-speaker-mono-2 echo-reference" /> <path name="vowlan-call"/> </path> <path name="voicemmode1-call"> <ctl name="SLIM_0_RX_Voice Mixer VoiceMMode1" value="1" /> <ctl name="VoiceMMode1_Tx Mixer SLIM_0_TX_MMode1" value="1" /> Loading Loading @@ -1506,6 +1539,11 @@ <path name="voicemmode1-call"/> </path> <path name="voicemmode1-call vbat-voice-speaker-2"> <path name="vbat-speaker-mono-2 echo-reference" /> <path name="voicemmode1-call"/> </path> <path name="voicemmode2-call"> <ctl name="SLIM_0_RX_Voice Mixer VoiceMMode2" value="1" /> <ctl name="VoiceMMode2_Tx Mixer SLIM_0_TX_MMode2" value="1" /> Loading Loading @@ -1541,6 +1579,11 @@ <path name="voicemmode2-call"/> </path> <path name="voicemmode2-call vbat-voice-speaker-2"> <path name="vbat-speaker-mono-2 echo-reference" /> <path name="voicemmode2-call"/> </path> <path name="listen-voice-wakeup-1"> <ctl name="LSM1 MUX" value="SLIMBUS_5_TX" /> <ctl name="SLIMBUS_5_TX LSM Function" value="AUDIO" /> Loading Loading @@ -1700,12 +1743,26 @@ <ctl name="SpkrLeft SWR DAC_Port Switch" value="1" /> </path> <path name="wsa-speaker-mono-2"> <ctl name="SLIM RX0 MUX" value="AIF_MIX1_PB" /> <ctl name="SLIM_0_RX Channels" value="One" /> <ctl name="RX INT8_1 MIX1 INP0" value="RX0" /> <ctl name="SpkrRight COMP Switch" value="1" /> <ctl name="SpkrRight BOOST Switch" value="1" /> <ctl name="SpkrRight VISENSE Switch" value="1" /> <ctl name="SpkrRight SWR DAC_Port Switch" value="1" /> </path> <path name="vbat-speaker-mono"> <path name="wsa-speaker-mono" /> <ctl name="RX INT7 VBAT SPKRL VBAT Enable" value="1" /> </path> <path name="vbat-speaker-mono-2"> <path name="wsa-speaker-mono-2" /> <ctl name="RX INT8 VBAT SPKRR VBAT Enable" value="1" /> </path> <path name="vbat-speaker"> <path name="wsa-speaker" /> <ctl name="RX INT7 VBAT SPKRL VBAT Enable" value="1" /> Loading Loading @@ -1761,9 +1818,23 @@ <ctl name="SLIM0_RX_VI_FB_LCH_MUX" value="SLIM4_TX" /> </path> <path name="voice-speaker-2-protected"> <ctl name="AIF4_VI Mixer SPKR_VI_1" value="1" /> <ctl name="SLIM_4_TX Format" value="PACKED_16B" /> <path name="wsa-speaker-mono-2" /> <ctl name="VI_FEED_TX Channels" value="One" /> <ctl name="SLIM0_RX_VI_FB_LCH_MUX" value="SLIM4_TX" /> </path> <path name="vi-feedback"> </path> <path name="vi-feedback-mono-1"> </path> <path name="vi-feedback-mono-2"> </path> <path name="speaker-protected-vbat"> <path name="speaker-protected" /> <ctl name="RX INT7 VBAT SPKRL VBAT Enable" value="1" /> Loading @@ -1775,6 +1846,11 @@ <ctl name="RX INT7 VBAT SPKRL VBAT Enable" value="1" /> </path> <path name="voice-speaker-2-protected-vbat"> <path name="voice-speaker-2-protected" /> <ctl name="RX INT8 VBAT SPKRR VBAT Enable" value="1" /> </path> <path name="handset"> <ctl name="SLIM RX0 MUX" value="AIF_MIX1_PB" /> <ctl name="SLIM_0_RX Channels" value="One" /> Loading Loading @@ -1874,14 +1950,26 @@ <path name="vbat-speaker-mono" /> </path> <path name="vbat-voice-speaker-2"> <path name="vbat-speaker-mono-2" /> </path> <path name="wsa-voice-speaker"> <path name="wsa-speaker-mono" /> </path> <path name="wsa-voice-speaker-2"> <path name="wsa-speaker-mono-2" /> </path> <path name="voice-speaker"> <path name="wsa-speaker-mono" /> </path> <path name="voice-speaker-2"> <path name="wsa-speaker-mono-2" /> </path> <path name="voice-speaker-mic"> <path name="speaker-mic" /> </path> Loading
hal/audio_extn/dev_arbi.c +2 −1 Original line number Diff line number Diff line /* * Copyright (c) 2014, The Linux Foundation. All rights reserved. * Copyright (c) 2014-2016, The Linux Foundation. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are Loading Loading @@ -131,6 +131,7 @@ static audio_devices_t get_audio_device(snd_device_t snd_device) {SND_DEVICE_OUT_VOICE_HANDSET, AUDIO_DEVICE_OUT_EARPIECE}, {SND_DEVICE_OUT_SPEAKER, AUDIO_DEVICE_OUT_SPEAKER}, {SND_DEVICE_OUT_VOICE_SPEAKER, AUDIO_DEVICE_OUT_SPEAKER}, {SND_DEVICE_OUT_VOICE_SPEAKER_2, AUDIO_DEVICE_OUT_SPEAKER}, {SND_DEVICE_OUT_HEADPHONES, AUDIO_DEVICE_OUT_WIRED_HEADPHONE}, {SND_DEVICE_OUT_VOICE_HEADPHONES, AUDIO_DEVICE_OUT_WIRED_HEADPHONE}, {SND_DEVICE_OUT_SPEAKER_AND_HEADPHONES, Loading
hal/audio_extn/spkr_protection.c +108 −5 Original line number Diff line number Diff line Loading @@ -111,6 +111,11 @@ enum speaker_protection_mode { SPKR_PROTECTION_MODE_CALIBRATE = 1, }; struct spkr_prot_r0t0 { int r0[SP_V2_NUM_MAX_SPKRS]; int t0[SP_V2_NUM_MAX_SPKRS]; }; struct speaker_prot_session { int spkr_prot_mode; int spkr_processing_state; Loading @@ -136,6 +141,7 @@ struct speaker_prot_session { bool spkr_prot_enable; bool spkr_in_use; struct timespec spkr_last_time_used; struct spkr_prot_r0t0 sp_r0t0_cal; bool wsa_found; const char *spkr_1_tz_name; const char *spkr_2_tz_name; Loading Loading @@ -322,6 +328,7 @@ static int set_spkr_prot_cal(int cal_fd, int ret = 0; struct audio_cal_fb_spk_prot_cfg cal_data; char value[PROPERTY_VALUE_MAX]; static int cal_done = 0; if (cal_fd < 0) { ALOGE("%s: Error: cal_fd = %d", __func__, cal_fd); Loading Loading @@ -364,6 +371,13 @@ static int set_spkr_prot_cal(int cal_fd, ret = -ENODEV; goto done; } if (protCfg->mode == MSM_SPKR_PROT_CALIBRATED && !cal_done) { handle.sp_r0t0_cal.r0[SP_V2_SPKR_1] = protCfg->r0[SP_V2_SPKR_1]; handle.sp_r0t0_cal.r0[SP_V2_SPKR_2] = protCfg->r0[SP_V2_SPKR_2]; handle.sp_r0t0_cal.t0[SP_V2_SPKR_1] = protCfg->t0[SP_V2_SPKR_1]; handle.sp_r0t0_cal.t0[SP_V2_SPKR_2] = protCfg->t0[SP_V2_SPKR_2]; cal_done = 1; } done: return ret; } Loading Loading @@ -958,16 +972,26 @@ void audio_extn_spkr_prot_init(void *adev) ALOGD("%s: WSA analog mode", __func__); platform_set_snd_device_backend(SND_DEVICE_OUT_VOICE_SPEAKER_WSA, "speaker-protected"); platform_set_snd_device_backend(SND_DEVICE_OUT_VOICE_SPEAKER_2_WSA, "speaker-protected"); platform_set_snd_device_acdb_id(SND_DEVICE_OUT_SPEAKER_PROTECTED, ACDB_DEVICE_SPKR_PROT_WSA_ANALOG); platform_set_snd_device_acdb_id(SND_DEVICE_OUT_VOICE_SPEAKER_PROTECTED, ACDB_DEVICE_SPKR_PROT_WSA_ANALOG); platform_set_snd_device_acdb_id(SND_DEVICE_OUT_VOICE_SPEAKER_2_PROTECTED, ACDB_DEVICE_SPKR_PROT_WSA_ANALOG); platform_set_snd_device_acdb_id(SND_DEVICE_OUT_SPEAKER_PROTECTED_VBAT, ACDB_DEVICE_SPKR_PROT_WSA_ANALOG); platform_set_snd_device_acdb_id(SND_DEVICE_OUT_VOICE_SPEAKER_PROTECTED_VBAT, ACDB_DEVICE_SPKR_PROT_WSA_ANALOG); platform_set_snd_device_acdb_id(SND_DEVICE_OUT_VOICE_SPEAKER_2_PROTECTED_VBAT, ACDB_DEVICE_SPKR_PROT_WSA_ANALOG); platform_set_snd_device_acdb_id(SND_DEVICE_IN_CAPTURE_VI_FEEDBACK, ACDB_DEVICE_VI_FEEDBACK_WSA_ANALOG); platform_set_snd_device_acdb_id(SND_DEVICE_IN_CAPTURE_VI_FEEDBACK_MONO_1, ACDB_DEVICE_VI_FEEDBACK_WSA_ANALOG); platform_set_snd_device_acdb_id(SND_DEVICE_IN_CAPTURE_VI_FEEDBACK_MONO_2, ACDB_DEVICE_VI_FEEDBACK_WSA_ANALOG); pcm_config_skr_prot.channels = 2; } #endif Loading Loading @@ -1056,12 +1080,21 @@ int audio_extn_spkr_prot_get_acdb_id(snd_device_t snd_device) case SND_DEVICE_OUT_VOICE_SPEAKER_VBAT: acdb_id = platform_get_snd_device_acdb_id(SND_DEVICE_OUT_VOICE_SPEAKER_PROTECTED_VBAT); break; case SND_DEVICE_OUT_VOICE_SPEAKER_2_VBAT: acdb_id = platform_get_snd_device_acdb_id(SND_DEVICE_OUT_VOICE_SPEAKER_2_PROTECTED_VBAT); break; case SND_DEVICE_OUT_VOICE_SPEAKER: #ifdef PLATFORM_MSM8916 case SND_DEVICE_OUT_VOICE_SPEAKER_WSA: #endif acdb_id = platform_get_snd_device_acdb_id(SND_DEVICE_OUT_VOICE_SPEAKER_PROTECTED); break; case SND_DEVICE_OUT_VOICE_SPEAKER_2: #ifdef PLATFORM_MSM8916 case SND_DEVICE_OUT_VOICE_SPEAKER_2_WSA: #endif acdb_id = platform_get_snd_device_acdb_id(SND_DEVICE_OUT_VOICE_SPEAKER_2_PROTECTED); break; default: acdb_id = -EINVAL; break; Loading @@ -1084,22 +1117,79 @@ int audio_extn_get_spkr_prot_snd_device(snd_device_t snd_device) return SND_DEVICE_OUT_SPEAKER_PROTECTED_VBAT; case SND_DEVICE_OUT_VOICE_SPEAKER_VBAT: return SND_DEVICE_OUT_VOICE_SPEAKER_PROTECTED_VBAT; case SND_DEVICE_OUT_VOICE_SPEAKER_2_VBAT: return SND_DEVICE_OUT_VOICE_SPEAKER_2_PROTECTED_VBAT; case SND_DEVICE_OUT_VOICE_SPEAKER: #ifdef PLATFORM_MSM8916 case SND_DEVICE_OUT_VOICE_SPEAKER_WSA: #endif return SND_DEVICE_OUT_VOICE_SPEAKER_PROTECTED; case SND_DEVICE_OUT_VOICE_SPEAKER_2: #ifdef PLATFORM_MSM8916 case SND_DEVICE_OUT_VOICE_SPEAKER_2_WSA: #endif return SND_DEVICE_OUT_VOICE_SPEAKER_2_PROTECTED; default: return snd_device; } } int audio_extn_get_vi_feedback_snd_device(snd_device_t snd_device) { switch(snd_device) { case SND_DEVICE_OUT_VOICE_SPEAKER_PROTECTED_VBAT: case SND_DEVICE_OUT_VOICE_SPEAKER_PROTECTED: return SND_DEVICE_IN_CAPTURE_VI_FEEDBACK_MONO_1; case SND_DEVICE_OUT_VOICE_SPEAKER_2_PROTECTED_VBAT: case SND_DEVICE_OUT_VOICE_SPEAKER_2_PROTECTED: return SND_DEVICE_IN_CAPTURE_VI_FEEDBACK_MONO_2; default: return SND_DEVICE_IN_CAPTURE_VI_FEEDBACK; } } int audio_extn_select_spkr_prot_cal_data(snd_device_t snd_device) { struct audio_cal_info_spk_prot_cfg protCfg; int acdb_fd = -1; int ret = 0; acdb_fd = open("/dev/msm_audio_cal", O_RDWR | O_NONBLOCK); if (acdb_fd < 0) { ALOGE("%s: open msm_acdb failed", __func__); return -ENODEV; } switch(snd_device) { case SND_DEVICE_OUT_VOICE_SPEAKER_2_PROTECTED_VBAT: case SND_DEVICE_OUT_VOICE_SPEAKER_2_PROTECTED: protCfg.r0[SP_V2_SPKR_1] = handle.sp_r0t0_cal.r0[SP_V2_SPKR_2]; protCfg.r0[SP_V2_SPKR_2] = handle.sp_r0t0_cal.r0[SP_V2_SPKR_1]; protCfg.t0[SP_V2_SPKR_1] = handle.sp_r0t0_cal.t0[SP_V2_SPKR_2]; protCfg.t0[SP_V2_SPKR_2] = handle.sp_r0t0_cal.t0[SP_V2_SPKR_1]; break; default: protCfg.r0[SP_V2_SPKR_1] = handle.sp_r0t0_cal.r0[SP_V2_SPKR_1]; protCfg.r0[SP_V2_SPKR_2] = handle.sp_r0t0_cal.r0[SP_V2_SPKR_2]; protCfg.t0[SP_V2_SPKR_1] = handle.sp_r0t0_cal.t0[SP_V2_SPKR_1]; protCfg.t0[SP_V2_SPKR_2] = handle.sp_r0t0_cal.t0[SP_V2_SPKR_2]; break; } protCfg.mode = MSM_SPKR_PROT_CALIBRATED; ret = set_spkr_prot_cal(acdb_fd, &protCfg); if (ret) ALOGE("%s: speaker protection cal data swap failed", __func__); close(acdb_fd); return ret; } int audio_extn_spkr_prot_start_processing(snd_device_t snd_device) { struct audio_usecase *uc_info_tx; struct audio_device *adev = handle.adev_handle; int32_t pcm_dev_tx_id = -1, ret = 0; bool disable_tx = false; snd_device_t in_snd_device; ALOGV("%s: Entry", __func__); /* cancel speaker calibration */ Loading @@ -1108,6 +1198,16 @@ int audio_extn_spkr_prot_start_processing(snd_device_t snd_device) return -EINVAL; } snd_device = audio_extn_get_spkr_prot_snd_device(snd_device); if (handle.spkr_prot_mode == MSM_SPKR_PROT_CALIBRATED) { ret = audio_extn_select_spkr_prot_cal_data(snd_device); if (ret) { ALOGE("%s: Setting speaker protection cal data failed", __func__); return ret; } } in_snd_device = audio_extn_get_vi_feedback_snd_device(snd_device); spkr_prot_set_spkrstatus(true); uc_info_tx = (struct audio_usecase *)calloc(1, sizeof(struct audio_usecase)); if (!uc_info_tx) { Loading @@ -1122,12 +1222,12 @@ int audio_extn_spkr_prot_start_processing(snd_device_t snd_device) if (handle.spkr_processing_state == SPKR_PROCESSING_IN_IDLE) { uc_info_tx->id = USECASE_AUDIO_SPKR_CALIB_TX; uc_info_tx->type = PCM_CAPTURE; uc_info_tx->in_snd_device = SND_DEVICE_IN_CAPTURE_VI_FEEDBACK; uc_info_tx->in_snd_device = in_snd_device; uc_info_tx->out_snd_device = SND_DEVICE_NONE; handle.pcm_tx = NULL; list_add_tail(&adev->usecase_list, &uc_info_tx->list); disable_tx = true; enable_snd_device(adev, SND_DEVICE_IN_CAPTURE_VI_FEEDBACK); enable_snd_device(adev, in_snd_device); enable_audio_route(adev, uc_info_tx); pcm_dev_tx_id = platform_get_pcm_device_id(uc_info_tx->id, PCM_CAPTURE); Loading Loading @@ -1167,9 +1267,9 @@ exit: list_remove(&uc_info_tx->list); uc_info_tx->id = USECASE_AUDIO_SPKR_CALIB_TX; uc_info_tx->type = PCM_CAPTURE; uc_info_tx->in_snd_device = SND_DEVICE_IN_CAPTURE_VI_FEEDBACK; uc_info_tx->in_snd_device = in_snd_device; uc_info_tx->out_snd_device = SND_DEVICE_NONE; disable_snd_device(adev, SND_DEVICE_IN_CAPTURE_VI_FEEDBACK); disable_snd_device(adev, in_snd_device); disable_audio_route(adev, uc_info_tx); free(uc_info_tx); } else Loading @@ -1183,17 +1283,20 @@ void audio_extn_spkr_prot_stop_processing(snd_device_t snd_device) { struct audio_usecase *uc_info_tx; struct audio_device *adev = handle.adev_handle; snd_device_t in_snd_device; ALOGV("%s: Entry", __func__); snd_device = audio_extn_get_spkr_prot_snd_device(snd_device); spkr_prot_set_spkrstatus(false); in_snd_device = audio_extn_get_vi_feedback_snd_device(snd_device); pthread_mutex_lock(&handle.mutex_spkr_prot); if (adev && handle.spkr_processing_state == SPKR_PROCESSING_IN_PROGRESS) { uc_info_tx = get_usecase_from_list(adev, USECASE_AUDIO_SPKR_CALIB_TX); if (handle.pcm_tx) pcm_close(handle.pcm_tx); handle.pcm_tx = NULL; disable_snd_device(adev, SND_DEVICE_IN_CAPTURE_VI_FEEDBACK); disable_snd_device(adev, in_snd_device); if (uc_info_tx) { list_remove(&uc_info_tx->list); disable_audio_route(adev, uc_info_tx); Loading