static int mtk_pcm_hdmi_stop(struct snd_pcm_substream *substream) { AFE_BLOCK_T *Afe_Block = &(pMemControl->rBlock); printk("mtk_pcm_hdmi_stop \n"); SetIrqEnable(Soc_Aud_IRQ_MCU_MODE_IRQ5_MCU_MODE, false); SetMemoryPathEnable(Soc_Aud_Digital_Block_MEM_HDMI, false); #ifdef _DEBUG_TDM_KERNEL_ #if 0 Afe_Set_Reg(AFE_TDM_CON2, 0, 0x00010000); // disable TDM to I2S path #endif Afe_Set_Reg(AFE_I2S_CON, 0, 0x00000001); // I2S disable msleep(1); #endif SetTDMEnable(false); //disable TDM SetHDMIEnable(false); Afe_Set_Reg(AUDIO_TOP_CON0, 0 << 20, 1 << 20); // disable HDMI CK EnableAfe(false); RemoveMemifSubStream(Soc_Aud_Digital_Block_MEM_HDMI, substream); Afe_Block->u4DMAReadIdx = 0; Afe_Block->u4WriteIdx = 0; Afe_Block->u4DataRemained = 0; return 0; }
static int mtk_mrgrx_awb_alsa_stop(struct snd_pcm_substream *substream) { AFE_BLOCK_T *Awb_Block = &(Mrgrx_AWB_Control_context->rBlock); printk("mtk_mrgrx_awb_alsa_stop \n"); StopAudioAWBHardware(substream); RemoveMemifSubStream(Soc_Aud_Digital_Block_MEM_AWB); #if 0 // TODO(Harvey) SetMemoryPathEnable(Soc_Aud_Digital_Block_MRG_I2S_OUT, false); if (GetMemoryPathEnable(Soc_Aud_Digital_Block_MRG_I2S_OUT) == false) { SetMrgI2SEnable(false, substream->runtime->rate); } #else SetMemoryPathEnable(Soc_Aud_Digital_Block_I2S_IN_2, false); if (GetMemoryPathEnable(Soc_Aud_Digital_Block_I2S_IN_2) == false) { SetI2SASRCEnable(false); SetI2SASRCConfig(false, 0); // Setting to bypass ASRC Set2ndI2SInEnable(false); } #endif return 0; }
static int mtk_pcm_dl1Bt_stop(struct snd_pcm_substream *substream) { PRINTK_AUDDRV("mtk_pcm_dl1Bt_stop\n"); SetIrqEnable(Soc_Aud_IRQ_MCU_MODE_IRQ1_MCU_MODE, false); /* here to turn off digital part */ SetConnection(Soc_Aud_InterCon_DisConnect, Soc_Aud_InterConnectionInput_I05, Soc_Aud_InterConnectionOutput_O02); SetConnection(Soc_Aud_InterCon_DisConnect, Soc_Aud_InterConnectionInput_I06, Soc_Aud_InterConnectionOutput_O02); SetMemoryPathEnable(Soc_Aud_Digital_Block_MEM_DL1, false); SetIrqEnable(Soc_Aud_IRQ_MCU_MODE_IRQ1_MCU_MODE, false); SetMemoryPathEnable(Soc_Aud_Digital_Block_DAI_BT, false); if (GetMemoryPathEnable(Soc_Aud_Digital_Block_DAI_BT) == false) { /* turn off DAI BT if not using */ SetDaiBtEnable(false); } EnableAfe(false); RemoveMemifSubStream(Soc_Aud_Digital_Block_MEM_DL1, substream); AudDrv_Clk_Off(); return 0; }
static int mtk_pcm_fmtx_stop(struct snd_pcm_substream *substream) { struct snd_pcm_runtime *runtime = substream->runtime; //AFE_BLOCK_T *Afe_Block = &(pMemControl->rBlock); PRINTK_AUD_FMTX("mtk_pcm_fmtx_stop \n"); SetIrqEnable(Soc_Aud_IRQ_MCU_MODE_IRQ1_MCU_MODE, false); // here to turn off digital part SetConnection(Soc_Aud_InterCon_DisConnect, Soc_Aud_InterConnectionInput_I05, Soc_Aud_InterConnectionOutput_O00); SetConnection(Soc_Aud_InterCon_DisConnect, Soc_Aud_InterConnectionInput_I06, Soc_Aud_InterConnectionOutput_O01); // if (GetMrgI2SEnable() == false) // { SetMrgI2SEnable(false, runtime->rate); // } SetMemoryPathEnable(Soc_Aud_Digital_Block_MEM_DL1, false); SetMemoryPathEnable(Soc_Aud_Digital_Block_MRG_I2S_OUT, false); Set2ndI2SOutEnable(false); EnableAfe(false); RemoveMemifSubStream(Soc_Aud_Digital_Block_MEM_DL1, substream); AudDrv_Clk_Off(); return 0; }
static int mtk_soc_pcm_dl2_close(struct snd_pcm_substream *substream) { pr_warn("%s\n", __func__); if (mPrepareDone == true) { /* stop DAC output */ SetMemoryPathEnable(Soc_Aud_Digital_Block_I2S_OUT_DAC, false); if (GetI2SDacEnable() == false) SetI2SDacEnable(false); RemoveMemifSubStream(Soc_Aud_Digital_Block_MEM_DL2, substream); EnableAfe(false); mPrepareDone = false; } if (mPlaybackSramState == SRAM_STATE_PLAYBACKDRAM) AudDrv_Emi_Clk_Off(); AfeControlSramLock(); ClearSramState(mPlaybackSramState); mPlaybackSramState = GetSramState(); AfeControlSramUnLock(); AudDrv_Clk_Off(); return 0; }
static int mtk_pcm_dl1_stop(struct snd_pcm_substream *substream) { AFE_BLOCK_T *Afe_Block = &(pMemControl->rBlock); PRINTK_AUDDRV("mtk_pcm_dl1_stop \n"); printk("%s \n", __func__); SetIrqEnable(Soc_Aud_IRQ_MCU_MODE_IRQ1_MCU_MODE, false); // here to turn off digital part SetConnection(Soc_Aud_InterCon_DisConnect, Soc_Aud_InterConnectionInput_I05, Soc_Aud_InterConnectionOutput_O03); SetConnection(Soc_Aud_InterCon_DisConnect, Soc_Aud_InterConnectionInput_I06, Soc_Aud_InterConnectionOutput_O04); SetMemoryPathEnable(Soc_Aud_Digital_Block_MEM_DL1, false); SetMemoryPathEnable(Soc_Aud_Digital_Block_I2S_OUT_DAC, false); if (GetI2SDacEnable() == false) { SetI2SDacEnable(false); } EnableAfe(false); RemoveMemifSubStream(Soc_Aud_Digital_Block_MEM_DL1,substream); AudDrv_Clk_Off(); return 0; }
static int mtk_pcm_i2s0_stop(struct snd_pcm_substream *substream) { AFE_BLOCK_T *Afe_Block = &(pI2s0MemControl->rBlock); printk("mtk_pcm_i2s0_stop \n"); SetIrqEnable(Soc_Aud_IRQ_MCU_MODE_IRQ1_MCU_MODE, false); // here start digital part SetConnection(Soc_Aud_InterCon_DisConnect, Soc_Aud_InterConnectionInput_I05, Soc_Aud_InterConnectionOutput_O00); SetConnection(Soc_Aud_InterCon_DisConnect, Soc_Aud_InterConnectionInput_I06, Soc_Aud_InterConnectionOutput_O01); SetMemoryPathEnable(Soc_Aud_Digital_Block_MEM_DL1, false); // stop I2S Afe_Set_Reg(AFE_I2S_CON3, 0x0, 0x1); Afe_Set_Reg(AFE_I2S_CON, 0x0, 0x1); EnableAfe(false); // clean audio hardware buffer memset(Afe_Block->pucVirtBufAddr, 0, Afe_Block->u4BufferSize); RemoveMemifSubStream(Soc_Aud_Digital_Block_MEM_DL1,substream); AudDrv_Clk_Off(); return 0; }
static int mtk_dl1_awb_alsa_stop(struct snd_pcm_substream *substream) { printk("mtk_dl1_awb_alsa_stop \n"); StopAudioDl1AWBHardware(substream); RemoveMemifSubStream(Soc_Aud_Digital_Block_MEM_AWB, substream); return 0; }
static int mtk_pcm_dl1Bt_stop(struct snd_pcm_substream *substream) { AFE_BLOCK_T *Afe_Block = &(pdl1btMemControl->rBlock); PRINTK_AUDDRV("mtk_pcm_dl1Bt_stop \n"); SetIrqEnable(Soc_Aud_IRQ_MCU_MODE_IRQ1_MCU_MODE, false); // here to turn off digital part SetConnection(Soc_Aud_InterCon_DisConnect, Soc_Aud_InterConnectionInput_I05, Soc_Aud_InterConnectionOutput_O02); SetConnection(Soc_Aud_InterCon_DisConnect, Soc_Aud_InterConnectionInput_I06, Soc_Aud_InterConnectionOutput_O02); SetMemoryPathEnable(Soc_Aud_Digital_Block_MEM_DL1, false); SetIrqEnable(Soc_Aud_IRQ_MCU_MODE_IRQ1_MCU_MODE, false); SetMemoryPathEnable(Soc_Aud_Digital_Block_DAI_BT, false); if (GetMemoryPathEnable(Soc_Aud_Digital_Block_DAI_BT) == false) { SetDaiBtEnable(false); } EnableAfe(false); RemoveMemifSubStream(Soc_Aud_Digital_Block_MEM_DL1,substream); AudDrv_Clk_Off(); return 0; }
static int mtk_pcm_hdmi_stop(struct snd_pcm_substream *substream) { AFE_BLOCK_T *Afe_Block = &(pMemControl->rBlock); struct snd_pcm_runtime *runtime = substream->runtime; printk("mtk_pcm_hdmi_stop \n"); SetTDMEnable(false); SetHDMIEnable(false); SetIrqEnable(Soc_Aud_IRQ_MCU_MODE_IRQ5_MCU_MODE, false); SetMemoryPathEnable(Soc_Aud_Digital_Block_MEM_HDMI, false); EnableAfe(false); SetHdmiPcmInterConnection(Soc_Aud_InterCon_DisConnect, runtime->channels); RemoveMemifSubStream(Soc_Aud_Digital_Block_MEM_HDMI, substream); SetHdmiClkOff(); EnableSpdifDivPower(AUDIO_APLL_SPDIF_DIV, false); EnableHDMIDivPower(AUDIO_APLL_HDMI_BCK_DIV, false); Afe_Block->u4DMAReadIdx = 0; Afe_Block->u4WriteIdx = 0; Afe_Block->u4DataRemained = 0; return 0; }
static int mtk_i2s0_awb_alsa_stop(struct snd_pcm_substream *substream) { //AFE_BLOCK_T *Awb_Block = &(I2S0_AWB_Control_context->rBlock); printk("mtk_i2s0_awb_alsa_stop \n"); StopAudioI2S0AWBHardware(substream); RemoveMemifSubStream(Soc_Aud_Digital_Block_MEM_AWB,substream); return 0; }
static int mtk_capture_alsa_stop(struct snd_pcm_substream *substream) { //AFE_BLOCK_T *Vul_Block = &(VUL_Control_context->rBlock); printk("mtk_capture_alsa_stop \n"); StopAudioCaptureHardware(substream); RemoveMemifSubStream(Soc_Aud_Digital_Block_MEM_VUL,substream); return 0; }
static int mtk_dl1_awb_alsa_stop(struct snd_pcm_substream *substream) { AFE_BLOCK_T *Awb_Block = &(Dl1_AWB_Control_context->rBlock); pr_debug("mtk_dl1_awb_alsa_stop\n"); StopAudioDl1AWBHardware(substream); Awb_Block->u4DMAReadIdx = 0; Awb_Block->u4WriteIdx = 0; Awb_Block->u4DataRemained = 0; RemoveMemifSubStream(Soc_Aud_Digital_Block_MEM_AWB); return 0; }
static int mtk_capture_alsa_stop(struct snd_pcm_substream *substream) { AFE_BLOCK_T *Vul_Block = &(TDM_VUL_Control_context->rBlock); printk("mtk_capture_alsa_stop \n"); StopAudioCaptureHardware(substream); Vul_Block->u4DMAReadIdx = 0; Vul_Block->u4WriteIdx = 0; Vul_Block->u4DataRemained = 0; RemoveMemifSubStream(Soc_Aud_Digital_Block_MEM_VUL); return 0; }
static int mtk_mod_dai_alsa_stop(struct snd_pcm_substream *substream) { AFE_BLOCK_T *pModDai_Block = &(MOD_DAI_Control_context->rBlock); printk("mtk_mod_dai_alsa_stop \n"); StopAudioCaptureHardware(substream); pModDai_Block->u4DMAReadIdx = 0; pModDai_Block->u4WriteIdx = 0; pModDai_Block->u4DataRemained = 0; RemoveMemifSubStream(Soc_Aud_Digital_Block_MEM_MOD_DAI, substream); return 0; }
static int mtk_mrgrx_awb_alsa_stop(struct snd_pcm_substream *substream) { printk("mtk_mrgrx_awb_alsa_stop \n"); StopAudioAWBHardware(substream); RemoveMemifSubStream(Soc_Aud_Digital_Block_MEM_AWB, substream); SetMemoryPathEnable(Soc_Aud_Digital_Block_MRG_I2S_OUT, false); if (GetMemoryPathEnable(Soc_Aud_Digital_Block_MRG_I2S_OUT) == false) { SetMrgI2SEnable(false, substream->runtime->rate); } return 0; }
static int mtk_pcm_I2S0dl1_close(struct snd_pcm_substream *substream) { struct snd_pcm_runtime *runtime = substream->runtime; printk("%s \n", __func__); if (mPrepareDone == true) { // stop DAC output SetMemoryPathEnable(Soc_Aud_Digital_Block_I2S_OUT_DAC, false); if (GetI2SDacEnable() == false) { SetI2SDacEnable(false); } // stop I2S output SetMemoryPathEnable(Soc_Aud_Digital_Block_I2S_OUT_2, false); if (GetMemoryPathEnable(Soc_Aud_Digital_Block_I2S_OUT_2) == false) { Afe_Set_Reg(AFE_I2S_CON3, 0x0, 0x1); //Afe_Set_Reg(AFE_I2S_CON, 0x0, 0x1);//K2 TODO: fix fm playback then mp3, i2s_con is misconfigured... } RemoveMemifSubStream(Soc_Aud_Digital_Block_MEM_DL1, substream); EnableAfe(false); if (mI2S0dl1_hdoutput_control == true) { printk("%s mI2S0dl1_hdoutput_control == %d \n", __func__, mI2S0dl1_hdoutput_control); EnableI2SDivPower(AUDIO_APLL12_DIV2, false); EnableI2SDivPower(AUDIO_APLL12_DIV4, false); //Todo do we need open I2S3? EnableApll(runtime->rate, false); EnableApllTuner(runtime->rate, false); } mPrepareDone = false; } if (mPlaybackSramState == SRAM_STATE_PLAYBACKDRAM) { AudDrv_Emi_Clk_Off(); } AfeControlSramLock(); ClearSramState(mPlaybackSramState); mPlaybackSramState = GetSramState(); AfeControlSramUnLock(); AudDrv_Clk_Off(); return 0; }
static int mtk_fm_i2s_awb_alsa_stop(struct snd_pcm_substream *substream) { pr_warn("mtk_fm_i2s_awb_alsa_stop\n"); StopAudioFMI2SAWBHardware(substream); RemoveMemifSubStream(Soc_Aud_Digital_Block_MEM_AWB, substream); SetMemoryPathEnable(Soc_Aud_Digital_Block_I2S_IN_2, false); if (GetMemoryPathEnable(Soc_Aud_Digital_Block_I2S_IN_2) == false) { SetI2SASRCEnable(false); SetI2SASRCConfig(false, 0); /* Setting to bypass ASRC */ Set2ndI2SInEnable(false); } return 0; }
static int mtk_bt_dai_alsa_stop(struct snd_pcm_substream *substream) { /* AFE_BLOCK_T *Dai_Block = &(Bt_Dai_Control_context->rBlock); */ pr_warn("mtk_bt_dai_alsa_stop\n"); SetMemoryPathEnable(Soc_Aud_Digital_Block_MEM_DAI, false); SetMemoryPathEnable(Soc_Aud_Digital_Block_DAI_BT, false); if (GetMemoryPathEnable(Soc_Aud_Digital_Block_DAI_BT) == false) SetDaiBtEnable(false); StopAudioBtDaiHardware(substream); RemoveMemifSubStream(Soc_Aud_Digital_Block_MEM_DAI, substream); return 0; }
static int mtk_mrgrx_awb_alsa_stop(struct snd_pcm_substream *substream) { AFE_BLOCK_T *Awb_Block = &(Mrgrx_AWB_Control_context->rBlock); pr_debug("mtk_mrgrx_awb_alsa_stop\n"); StopAudioAWBHardware(substream); Awb_Block->u4DMAReadIdx = 0; Awb_Block->u4WriteIdx = 0; Awb_Block->u4DataRemained = 0; RemoveMemifSubStream(Soc_Aud_Digital_Block_MEM_AWB); SetMemoryPathEnable(Soc_Aud_Digital_Block_MRG_I2S_OUT, false); if (GetMemoryPathEnable(Soc_Aud_Digital_Block_MRG_I2S_OUT) == false) { SetMrgI2SEnable(false, substream->runtime->rate); } return 0; }
static int mtk_bt_dai_alsa_stop(struct snd_pcm_substream *substream) { AFE_BLOCK_T *Dai_Block = &(Bt_Dai_Control_context->rBlock); pr_debug("mtk_bt_dai_alsa_stop\n"); SetMemoryPathEnable(Soc_Aud_Digital_Block_MEM_DAI, false); SetMemoryPathEnable(Soc_Aud_Digital_Block_DAI_BT, false); if (GetMemoryPathEnable(Soc_Aud_Digital_Block_DAI_BT) == false) { SetDaiBtEnable(false); } StopAudioBtDaiHardware(substream); Dai_Block->u4DMAReadIdx = 0; Dai_Block->u4WriteIdx = 0; Dai_Block->u4DataRemained = 0; RemoveMemifSubStream(Soc_Aud_Digital_Block_MEM_DAI); return 0; }
static int mtk_pcm_I2S0dl1_close(struct snd_pcm_substream *substream) { printk("%s \n", __func__); if (mPrepareDone == true) { // stop DAC output SetMemoryPathEnable(Soc_Aud_Digital_Block_I2S_OUT_DAC, false); if (GetI2SDacEnable() == false) { SetI2SDacEnable(false); } // stop I2S output SetMemoryPathEnable(Soc_Aud_Digital_Block_I2S_OUT_2, false); if (GetMemoryPathEnable(Soc_Aud_Digital_Block_I2S_OUT_2) == false) { Afe_Set_Reg(AFE_I2S_CON3, 0x0, 0x1); //Afe_Set_Reg(AFE_I2S_CON, 0x0, 0x1);//K2 TODO: fix fm playback then mp3, i2s_con is misconfigured... } RemoveMemifSubStream(Soc_Aud_Digital_Block_MEM_DL1, substream); EnableAfe(false); mPrepareDone = false; } if (mPlaybackSramState == SRAM_STATE_PLAYBACKDRAM) { AudDrv_Emi_Clk_Off(); } AfeControlSramLock(); ClearSramState(mPlaybackSramState); mPlaybackSramState = GetSramState(); AfeControlSramUnLock(); AudDrv_Clk_Off(); return 0; }
static int mtk_pcm_I2S0dl1_close(struct snd_pcm_substream *substream) { pr_debug("%s \n", __func__); if (mPrepareDone == true) { //Flyme { [email protected] Fix low jitter mode issue that sound will be abnormal when the MediaService reboot if (mi2s0_sidegen_control) { SetMemoryPathEnable(Soc_Aud_Digital_Block_I2S_OUT_2, false); if (GetMemoryPathEnable(Soc_Aud_Digital_Block_I2S_OUT_2) == false) { if (mI2S0dl1_hdoutput_control == true) { Afe_Set_Reg(AFE_I2S_CON3, 0, 1 << 12); //Clear Low jitter mode setting } Afe_Set_Reg(AFE_I2S_CON3, 0x0, 0x1); Afe_Set_Reg(AFE_I2S_CON, 0x0, 0x1); SetConnection(Soc_Aud_InterCon_DisConnect, Soc_Aud_InterConnectionInput_I14, Soc_Aud_InterConnectionOutput_O00); SetConnection(Soc_Aud_InterCon_DisConnect, Soc_Aud_InterConnectionInput_I14, Soc_Aud_InterConnectionOutput_O01); EnableAfe(false); } AudDrv_Clk_Off(); mi2s0_sidegen_control = 0; } if (mI2S0dl1_hdoutput_control) { // set APLL clock setting EnableApll1(false); EnableApll2(false); EnableI2SDivPower(AUDIO_APLL1_DIV0, false); EnableI2SDivPower(AUDIO_APLL2_DIV0, false); AudDrv_APLL1Tuner_Clk_Off(); AudDrv_APLL2Tuner_Clk_Off(); mI2S0dl1_hdoutput_control = false; } // } // stop DAC output SetMemoryPathEnable(Soc_Aud_Digital_Block_I2S_OUT_DAC, false); if (GetI2SDacEnable() == false) { SetI2SDacEnable(false); } // stop I2S output SetMemoryPathEnable(Soc_Aud_Digital_Block_I2S_OUT_2, false); if (GetMemoryPathEnable(Soc_Aud_Digital_Block_I2S_OUT_2) == false) { Afe_Set_Reg(AFE_I2S_CON3, 0x0, 0x1); Afe_Set_Reg(AFE_I2S_CON, 0x0, 0x1); } RemoveMemifSubStream(Soc_Aud_Digital_Block_MEM_DL1,substream); EnableAfe(false); mPrepareDone = false; } if(mPlaybackSramState == SRAM_STATE_PLAYBACKDRAM) { AudDrv_Emi_Clk_Off(); } AfeControlSramLock(); ClearSramState(mPlaybackSramState); mPlaybackSramState = GetSramState(); AfeControlSramUnLock(); AudDrv_Clk_Off(); return 0; }