static int mtk_voice_close(struct snd_pcm_substream *substream) { printk("mtk_voice_close \n"); if (substream->stream == SNDRV_PCM_STREAM_CAPTURE) { printk("%s with SNDRV_PCM_STREAM_CAPTURE \n", __func__); AudDrv_Clk_Off(); AudDrv_ADC_Clk_Off(); return 0; } // todo : enable sidetone // here start digital part SetConnection(Soc_Aud_InterCon_DisConnect, Soc_Aud_InterConnectionInput_I03, Soc_Aud_InterConnectionOutput_O17); SetConnection(Soc_Aud_InterCon_DisConnect, Soc_Aud_InterConnectionInput_I04, Soc_Aud_InterConnectionOutput_O18); SetConnection(Soc_Aud_InterCon_DisConnect, Soc_Aud_InterConnectionInput_I14, Soc_Aud_InterConnectionOutput_O03); SetConnection(Soc_Aud_InterCon_DisConnect, Soc_Aud_InterConnectionInput_I14, Soc_Aud_InterConnectionOutput_O04); SetI2SAdcEnable(false); SetI2SDacEnable(false); SetModemPcmEnable(MODEM_1, false); SetMemoryPathEnable(Soc_Aud_Digital_Block_I2S_OUT_DAC, false); SetMemoryPathEnable(Soc_Aud_Digital_Block_I2S_IN_ADC, false); EnableAfe(false); AudDrv_Clk_Off(); AudDrv_ADC_Clk_Off(); Voice_Status = false; return 0; }
static int mtk_voice_extint_close(struct snd_pcm_substream *substream) { printk("mtk_voice_extint_close \n"); if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) { printk("%s with SNDRV_PCM_STREAM_CAPTURE \n",__func__); SetConnection(Soc_Aud_InterCon_DisConnect, Soc_Aud_InterConnectionInput_I14, Soc_Aud_InterConnectionOutput_O03); SetConnection(Soc_Aud_InterCon_DisConnect, Soc_Aud_InterConnectionInput_I14, Soc_Aud_InterConnectionOutput_O04); SetI2SDacEnable(false); SetMemoryPathEnable(Soc_Aud_Digital_Block_I2S_OUT_DAC, false); Voice_ExtInt_Status &= ~VOICE_DL_ON; if(Voice_ExtInt_Status == 0) { SetConnection(Soc_Aud_InterCon_DisConnect, Soc_Aud_InterConnectionInput_I21, Soc_Aud_InterConnectionOutput_O07); SetConnection(Soc_Aud_InterCon_DisConnect, Soc_Aud_InterConnectionInput_I21, Soc_Aud_InterConnectionOutput_O08); SetConnection(Soc_Aud_InterCon_DisConnect, Soc_Aud_InterConnectionInput_I09, Soc_Aud_InterConnectionOutput_O25); SetModemPcmEnable(MODEM_EXTERNAL, false); SetModemPcmEnable(MODEM_1, false); } EnableAfe(false); AudDrv_Clk_Off(); AudDrv_ADC_Clk_Off(); } else if (substream->stream == SNDRV_PCM_STREAM_CAPTURE) { printk("%s with SNDRV_PCM_STREAM_CAPTURE \n",__func__); SetConnection(Soc_Aud_InterCon_DisConnect, Soc_Aud_InterConnectionInput_I03, Soc_Aud_InterConnectionOutput_O17); SetConnection(Soc_Aud_InterCon_DisConnect, Soc_Aud_InterConnectionInput_I04, Soc_Aud_InterConnectionOutput_O18); SetI2SAdcEnable(false); SetMemoryPathEnable(Soc_Aud_Digital_Block_I2S_IN_ADC, false); Voice_ExtInt_Status &= ~VOICE_UL_ON; if(Voice_ExtInt_Status == 0) { SetConnection(Soc_Aud_InterCon_DisConnect, Soc_Aud_InterConnectionInput_I21, Soc_Aud_InterConnectionOutput_O07); SetConnection(Soc_Aud_InterCon_DisConnect, Soc_Aud_InterConnectionInput_I21, Soc_Aud_InterConnectionOutput_O08); SetConnection(Soc_Aud_InterCon_DisConnect, Soc_Aud_InterConnectionInput_I09, Soc_Aud_InterConnectionOutput_O25); SetModemPcmEnable(MODEM_EXTERNAL, false); SetModemPcmEnable(MODEM_1, false); } EnableAfe(false); AudDrv_Clk_Off(); AudDrv_ADC_Clk_Off(); } SetExternalModemStatus(false); return 0; }
static int mtk_capture_pcm_close(struct snd_pcm_substream *substream) { if(mCaptureUseSram == false) { AudDrv_Emi_Clk_Off(); } if (mCaptureUseSram == true) { ClearSramState(SRAM_STATE_CAPTURE); mCaptureUseSram = false; } AudDrv_ADC_Clk_Off(); AudDrv_Clk_Off(); return 0; }
static int mtk_uldlloopbackpcm_close(struct snd_pcm_substream *substream) { printk("%s \n", __func__); if (substream->stream == SNDRV_PCM_STREAM_CAPTURE) { printk("%s with SNDRV_PCM_STREAM_CAPTURE \n", __func__); return 0; } // interconnection setting SetConnection(Soc_Aud_InterCon_DisConnect, Soc_Aud_InterConnectionInput_I03, Soc_Aud_InterConnectionOutput_O00); SetConnection(Soc_Aud_InterCon_DisConnect, Soc_Aud_InterConnectionInput_I04, Soc_Aud_InterConnectionOutput_O01); SetConnection(Soc_Aud_InterCon_DisConnect, Soc_Aud_InterConnectionInput_I03, Soc_Aud_InterConnectionOutput_O03); SetConnection(Soc_Aud_InterCon_DisConnect, Soc_Aud_InterConnectionInput_I04, Soc_Aud_InterConnectionOutput_O04); SetMemoryPathEnable(Soc_Aud_Digital_Block_I2S_IN_ADC, false); if (GetMemoryPathEnable(Soc_Aud_Digital_Block_I2S_IN_ADC) == false) { SetI2SAdcEnable(false); } // stop DAC output SetMemoryPathEnable(Soc_Aud_Digital_Block_I2S_OUT_DAC, false); if (GetI2SDacEnable() == false) { SetI2SDacEnable(false); } // stop I2S Afe_Set_Reg(AFE_I2S_CON3, 0x0, 0x1); Afe_Set_Reg(AFE_I2S_CON, 0x0, 0x1); Afe_Set_Reg(AFE_I2S_CON1, 0x0, 0x1); Afe_Set_Reg(AFE_I2S_CON2, 0x0, 0x1); EnableAfe(false); AudDrv_Clk_Off(); AudDrv_ADC_Clk_Off(); return 0; }