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_bt_close(struct snd_pcm_substream *substream) { pr_debug("mtk_voice_bt_close\n"); if (substream->stream == SNDRV_PCM_STREAM_CAPTURE) { pr_err("%s with SNDRV_PCM_STREAM_CAPTURE\n", __func__); AudDrv_Clk_Off(); AudDrv_ANA_Clk_Off(); return 0; } /* interconnection setting */ SetConnection(Soc_Aud_InterCon_DisConnect, Soc_Aud_InterConnectionInput_I02, Soc_Aud_InterConnectionOutput_O17); SetConnection(Soc_Aud_InterCon_DisConnect, Soc_Aud_InterConnectionInput_I02, Soc_Aud_InterConnectionOutput_O18); SetConnection(Soc_Aud_InterCon_DisConnect, Soc_Aud_InterConnectionInput_I14, Soc_Aud_InterConnectionOutput_O02); SetConnection(Soc_Aud_InterCon_DisConnect, Soc_Aud_InterConnectionInput_I21, Soc_Aud_InterConnectionOutput_O02); /* here start digital part */ SetMemoryPathEnable(Soc_Aud_Digital_Block_DAI_BT, false); SetDaiBtEnable(false); EnableAfe(false); AudDrv_Clk_Off(); AudDrv_ANA_Clk_Off(); voice_bt_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_i2s0_awb_pcm_close(struct snd_pcm_substream *substream) { /*modified by jiaqing.yang for ALPS02074446(For_JHZ6735M_65C_L_ALPS.L1.MP3.V1_P67) 20150706 begin*/ AudDrv_Clk_Off(); /*modified by jiaqing.yang for ALPS02074446(For_JHZ6735M_65C_L_ALPS.L1.MP3.V1_P67) 20150706 end*/ 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_fm_i2s_awb_pcm_close(struct snd_pcm_substream *substream) { AudDrv_Emi_Clk_Off(); AudDrv_I2S_Clk_Off(); 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_pcm_fm_i2s_close(struct snd_pcm_substream *substream) { struct snd_pcm_runtime *runtime = substream->runtime; printk("%s rate = %d\n", __func__, runtime->rate); //mtk_wcn_cmb_stub_audio_ctrl((CMB_STUB_AIF_X)CMB_STUB_AIF_0);//temp mark for early porting 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); } SetMemoryPathEnable(Soc_Aud_Digital_Block_I2S_OUT_DAC, false); if (GetI2SDacEnable() == false) { SetI2SDacEnable(false); } // interconnection setting SetConnection(Soc_Aud_InterCon_DisConnect, Soc_Aud_InterConnectionInput_I00, Soc_Aud_InterConnectionOutput_O13); SetConnection(Soc_Aud_InterCon_DisConnect, Soc_Aud_InterConnectionInput_I01, Soc_Aud_InterConnectionOutput_O14); SetConnection(Soc_Aud_InterCon_DisConnect, Soc_Aud_InterConnectionInput_I10, Soc_Aud_InterConnectionOutput_O03); SetConnection(Soc_Aud_InterCon_DisConnect, Soc_Aud_InterConnectionInput_I11, Soc_Aud_InterConnectionOutput_O04); EnableAfe(false); AudDrv_I2S_Clk_Off(); AudDrv_Clk_Off(); mPrepareDone = false; 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_mrgrx_awb_pcm_close(struct snd_pcm_substream *substream) { AudDrv_Emi_Clk_Off(); AudDrv_Clk_Off(); AudDrv_ANA_Clk_Off(); return 0; }
static int mtk_pcm_mrgrx_close(struct snd_pcm_substream *substream) { struct snd_pcm_runtime *runtime = substream->runtime; printk("%s \n", __func__); mtk_wcn_cmb_stub_audio_ctrl((CMB_STUB_AIF_X)CMB_STUB_AIF_0); SetMemoryPathEnable(Soc_Aud_Digital_Block_MRG_I2S_OUT, false); if (GetMemoryPathEnable(Soc_Aud_Digital_Block_MRG_I2S_OUT) == false) { SetMrgI2SEnable(false, runtime->rate); } SetMemoryPathEnable(Soc_Aud_Digital_Block_I2S_OUT_DAC, false); if (GetI2SDacEnable() == false) { SetI2SDacEnable(false); } // interconnection setting SetConnection(Soc_Aud_InterCon_DisConnect, Soc_Aud_InterConnectionInput_I15, Soc_Aud_InterConnectionOutput_O13); SetConnection(Soc_Aud_InterCon_DisConnect, Soc_Aud_InterConnectionInput_I16, Soc_Aud_InterConnectionOutput_O14); SetConnection(Soc_Aud_InterCon_DisConnect, Soc_Aud_InterConnectionInput_I10, Soc_Aud_InterConnectionOutput_O03); SetConnection(Soc_Aud_InterCon_DisConnect, Soc_Aud_InterConnectionInput_I11, Soc_Aud_InterConnectionOutput_O04); EnableAfe(false); AudDrv_Clk_Off(); mPrepareDone = false; return 0; }
static int Audio_i2s0_hdoutput_Set(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) { printk("+%s()\n", __func__); if (ucontrol->value.enumerated.item[0] > ARRAY_SIZE(i2s0_HD_output)) { printk("return -EINVAL\n"); return -EINVAL; } AudDrv_Clk_On(); mi2s0_hdoutput_control = ucontrol->value.integer.value[0]; if (mi2s0_hdoutput_control) { // set APLL clock setting EnableApll1(true); EnableApll2(true); EnableI2SDivPower(AUDIO_APLL1_DIV0, true); EnableI2SDivPower(AUDIO_APLL2_DIV0, true); } else { // set APLL clock setting EnableApll1(false); EnableApll2(false); EnableI2SDivPower(AUDIO_APLL1_DIV0, false); EnableI2SDivPower(AUDIO_APLL2_DIV0, false); } AudDrv_Clk_Off(); 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_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_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_open(struct snd_pcm_substream *substream) { int ret = 0; struct snd_pcm_runtime *runtime = substream->runtime; AfeControlSramLock(); if (GetSramState() == SRAM_STATE_FREE) { mtk_i2s0_hardware.buffer_bytes_max = GetPLaybackSramFullSize(); mPlaybackSramState = SRAM_STATE_PLAYBACKFULL; SetSramState(mPlaybackSramState); } else { mtk_i2s0_hardware.buffer_bytes_max = GetPLaybackSramPartial(); mPlaybackSramState = SRAM_STATE_PLAYBACKPARTIAL; SetSramState(mPlaybackSramState); } AfeControlSramUnLock(); runtime->hw = mtk_i2s0_hardware; printk("mtk_pcm_i2s0_open\n"); AudDrv_Clk_On(); memcpy((void *)(&(runtime->hw)), (void *)&mtk_i2s0_hardware , sizeof(struct snd_pcm_hardware)); pI2s0MemControl = Get_Mem_ControlT(Soc_Aud_Digital_Block_MEM_DL1); ret = snd_pcm_hw_constraint_list(runtime, 0, SNDRV_PCM_HW_PARAM_RATE, &constraints_sample_rates); ret = snd_pcm_hw_constraint_integer(runtime, SNDRV_PCM_HW_PARAM_PERIODS); if (ret < 0) { printk("snd_pcm_hw_constraint_integer failed\n"); } //print for hw pcm information printk("mtk_pcm_i2s0_open runtime rate = %d channels = %d substream->pcm->device = %d\n", runtime->rate, runtime->channels, substream->pcm->device); if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) { printk("SNDRV_PCM_STREAM_PLAYBACK mtkalsa_i2s0_playback_constraints\n"); } else { } if (ret < 0) { printk("mtk_pcm_i2s0_close\n"); mtk_pcm_i2s0_close(substream); return ret; } printk("mtk_pcm_i2s0_open return\n"); AudDrv_Clk_Off(); return 0; }
static int Audio_Irqcnt2_Get(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) { printk("Audio_Irqcnt2_Get \n"); AudDrv_Clk_On(); ucontrol->value.integer.value[0] = Afe_Get_Reg(AFE_IRQ_MCU_CNT2); AudDrv_Clk_Off(); return 0; }
static int Audio_Irqcnt2_Set(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) { uint32 irq1_cnt = ucontrol->value.integer.value[0]; printk("%s()\n", __func__); AudDrv_Clk_On(); Afe_Set_Reg(AFE_IRQ_MCU_CNT2, irq1_cnt, 0xffffffff); AudDrv_Clk_Off(); return 0; }
static int mtk_Dl1Bt_close(struct snd_pcm_substream *substream) { PRINTK_AUDDRV("%s\n", __func__); AfeControlSramLock(); ClearSramState(mPlaybackSramState); mPlaybackSramState = GetSramState(); AfeControlSramUnLock(); AudDrv_Clk_Off(); return 0; }
static void GetAudioTrimOffset(int channels) { int Buffer_on_value = 0 , Buffer_offl_value = 0, Buffer_offr_value = 0; const int off_counter = 20, on_counter = 20 , Const_DC_OFFSET = 0;//2048; printk("%s channels = %d\n", __func__, channels); // open headphone and digital part AudDrv_Clk_On(); AudDrv_Emi_Clk_On(); OpenAfeDigitaldl1(true); setHpDcCalibration(AUDIO_ANALOG_DEVICE_OUT_HEADSETR, 0); setHpDcCalibration(AUDIO_ANALOG_DEVICE_OUT_HEADSETL, 0); //get DC value when off //Sammodi Todo, need enable this on Rainier #ifdef RAINIER_NEED_CHECK Buffer_offl_value = PMIC_IMM_GetOneChannelValue(AUXADC_HP_L_CHANNEL, off_counter, 0); #endif printk("%s, Buffer_offl_value = %d \n",__func__, Buffer_offl_value); //Sammodi Todo, need enable this #ifdef RAINIER_NEED_CHECK Buffer_offr_value = PMIC_IMM_GetOneChannelValue(AUXADC_HP_R_CHANNEL, off_counter, 0); #endif printk("%s, Buffer_offr_value = %d \n",__func__, Buffer_offr_value); OpenAnalogHeadphone(true); setHpDcCalibrationGain(AUDIO_ANALOG_DEVICE_OUT_HEADSETR,10); // -1dB, (9-(-1) = 10) setHpDcCalibrationGain(AUDIO_ANALOG_DEVICE_OUT_HEADSETL,10); msleep(10); //Sammodi Todo, need enable this #ifdef RAINIER_NEED_CHECK Buffer_on_value = PMIC_IMM_GetOneChannelValue(AUXADC_HP_L_CHANNEL, on_counter, 0); #endif mHplOffset = Buffer_on_value - Buffer_offl_value + Const_DC_OFFSET; printk("%s, Buffer_on_value = %d Buffer_offl_value = %d mHplOffset = %d \n", __func__,Buffer_on_value, Buffer_offl_value, mHplOffset); //Sammodi Todo, need enable this #ifdef RAINIER_NEED_CHECK Buffer_on_value = PMIC_IMM_GetOneChannelValue(AUXADC_HP_R_CHANNEL, on_counter, 0); #endif mHprOffset = Buffer_on_value - Buffer_offr_value + Const_DC_OFFSET; printk("%s, Buffer_on_value = %d Buffer_offr_value = %d mHprOffset = %d \n", __func__,Buffer_on_value, Buffer_offr_value, mHprOffset); OpenAnalogHeadphone(false); OpenAfeDigitaldl1(false); AudDrv_Emi_Clk_Off(); AudDrv_Clk_Off(); }
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_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; }
/* supend and resume function */ static int mtk_voice_md2_bt_pm_ops_suspend(struct device *device) { /* if now in phone call state, not suspend!! */ bool b_modem1_speech_on; bool b_modem2_speech_on; AudDrv_Clk_On();/* should enable clk for access reg */ b_modem1_speech_on = (bool)(Afe_Get_Reg(PCM2_INTF_CON) & 0x1); b_modem2_speech_on = (bool)(Afe_Get_Reg(PCM_INTF_CON) & 0x1); AudDrv_Clk_Off(); if (b_modem1_speech_on == true || b_modem2_speech_on == true) { clkmux_sel(MT_MUX_AUDINTBUS, 0, "AUDIO"); /* select 26M */ return 0; } return 0; }
static int mtk_voice_md2_bt_pm_ops_resume(struct device *device) { bool b_modem1_speech_on; bool b_modem2_speech_on; AudDrv_Clk_On();/* should enable clk for access reg */ b_modem1_speech_on = (bool)(Afe_Get_Reg(PCM2_INTF_CON) & 0x1); b_modem2_speech_on = (bool)(Afe_Get_Reg(PCM_INTF_CON) & 0x1); AudDrv_Clk_Off(); if (b_modem1_speech_on == true || b_modem2_speech_on == true) { clkmux_sel(MT_MUX_AUDINTBUS, 1, "AUDIO"); /* mainpll */ return 0; } return 0; }
static int mtk_voice_md2_bt_pm_ops_resume(struct device *device) { bool b_modem1_speech_on; bool b_modem2_speech_on; AudDrv_Clk_On();//should enable clk for access reg b_modem1_speech_on = (bool)(Afe_Get_Reg(PCM2_INTF_CON) & 0x1); b_modem2_speech_on = (bool)(Afe_Get_Reg(PCM_INTF_CON) & 0x1); AudDrv_Clk_Off(); if (b_modem1_speech_on == true || b_modem2_speech_on == true) { //clkmux_sel(MT_MUX_AUDINTBUS, 0, "AUDIO"); SetClkCfg(AUDIO_CLK_CFG_4, 0x1000000, 0x1000000); return 0; } return 0; }
void AudDrv_HDMI_Clk_Off(void) { PRINTK_AUD_CLK("+AudDrv_HDMI_Clk_Off, Aud_I2S_Clk_cntr:%d \n", Aud_HDMI_Clk_cntr); Aud_HDMI_Clk_cntr--; if (Aud_HDMI_Clk_cntr == 0) { AudDrv_ANA_Clk_Off(); AudDrv_Clk_Off(); } else if (Aud_HDMI_Clk_cntr < 0) { PRINTK_AUD_ERROR("!! AudDrv_Linein_Clk_Off, Aud_I2S_Clk_cntr<0 (%d) \n", Aud_HDMI_Clk_cntr); AUDIO_ASSERT(true); Aud_HDMI_Clk_cntr = 0; } PRINTK_AUD_CLK("-AudDrv_I2S_Clk_Off, Aud_I2S_Clk_cntr:%d \n", Aud_HDMI_Clk_cntr); }
static int mtk_pcm_fmtx_close(struct snd_pcm_substream *substream) { PRINTK_AUD_FMTX("%s \n", __func__); // mtk_wcn_cmb_stub_audio_ctrl((CMB_STUB_AIF_X)CMB_STUB_AIF_0); if (mPlaybackSramState == SRAM_STATE_PLAYBACKDRAM) { AudDrv_Emi_Clk_Off(); } AfeControlSramLock(); ClearSramState(mPlaybackSramState); mPlaybackSramState = GetSramState(); AfeControlSramUnLock(); AudDrv_Clk_Off(); return 0; }
//supend and resume function static int mtk_voice_pm_ops_suspend(struct device *device) { // if now in phone call state, not suspend!! bool b_modem1_speech_on; bool b_modem2_speech_on; AudDrv_Clk_On();//should enable clk for access reg b_modem1_speech_on = (bool)(Afe_Get_Reg(PCM2_INTF_CON) & 0x1); b_modem2_speech_on = (bool)(Afe_Get_Reg(PCM_INTF_CON) & 0x1); AudDrv_Clk_Off();//should enable clk for access reg printk("mtk_voice_pm_ops_suspend, b_modem1_speech_on=%d, b_modem2_speech_on=%d, speech_md_usage_control=%d\n", b_modem1_speech_on, b_modem2_speech_on, speech_md_usage_control); if (b_modem1_speech_on == true || b_modem2_speech_on == true || speech_md_usage_control == true) { clkmux_sel(MT_MUX_AUDINTBUS, 0, "AUDIO"); //select 26M return 0; } return 0; }
static int mtk_voice_pm_ops_resume(struct device *device) { bool b_modem1_speech_on; bool b_modem2_speech_on; AudDrv_Clk_On(); /* should enable clk for access reg */ b_modem1_speech_on = (bool) (Afe_Get_Reg(PCM2_INTF_CON) & 0x1); b_modem2_speech_on = (bool) (Afe_Get_Reg(PCM_INTF_CON) & 0x1); AudDrv_Clk_Off(); if (b_modem1_speech_on == true || b_modem2_speech_on == true) { /* mainpll */ clkmux_sel(MT_CLKMUX_AUD_HF_26M_SEL, MT_CG_SYS_TEMP, "AUDIO "); clkmux_sel(MT_CLKMUX_AUD_INTBUS_SEL, MT_CG_MPLL_D12, "AUDIO "); return 0; } return 0; }
static int Audio_I2S0dl1_hdoutput_Set(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) { printk("%s()\n", __func__); if (ucontrol->value.enumerated.item[0] > ARRAY_SIZE(I2S0dl1_HD_output)) { printk("return -EINVAL\n"); return -EINVAL; } mI2S0dl1_hdoutput_control = ucontrol->value.integer.value[0]; if (GetMemoryPathEnable(Soc_Aud_Digital_Block_MEM_HDMI) == true ) { printk("return HDMI enabled\n"); return 0; } if (mI2S0dl1_hdoutput_control) { // set APLL clock setting AudDrv_Clk_On(); EnableApll1(true); EnableApll2(true); EnableI2SDivPower(AUDIO_APLL1_DIV0, true); EnableI2SDivPower(AUDIO_APLL2_DIV0, true); AudDrv_APLL1Tuner_Clk_On(); AudDrv_APLL2Tuner_Clk_On(); } else { // 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(); AudDrv_Clk_Off(); } return 0; }