示例#1
0
void AudDrv_APLL22M_Clk_On(void)
{
    PRINTK_AUD_CLK("+%s %d \n", __func__, Aud_APLL22M_Clk_cntr);
    mutex_lock(&auddrv_pmic_mutex);

    if (Aud_APLL22M_Clk_cntr == 0)
    {
        PRINTK_AUDDRV("+%s  enable_clock ADC clk(%x)\n", __func__, Aud_APLL22M_Clk_cntr);
#ifdef PM_MANAGER_API
        enable_mux(MT_MUX_AUD1, "AUDIO");
        clkmux_sel(MT_MUX_AUD1, 1 , "AUDIO"); //select APLL1

        if (enable_clock(MT_CG_AUDIO_22M, "AUDIO"))
        {
            PRINTK_AUD_CLK("%s fail", __func__);
        }
        if (enable_clock(MT_CG_AUDIO_APLL_TUNER, "AUDIO"))
        {
            PRINTK_AUD_CLK("%s fail", __func__);
        }
#endif
    }
    Aud_APLL22M_Clk_cntr++;
    mutex_unlock(&auddrv_pmic_mutex);
}
示例#2
0
void AudDrv_APLL24M_Clk_Off(void)
{
    mutex_lock(&auddrv_pmic_mutex);
    Aud_APLL24M_Clk_cntr--;
    if (Aud_APLL24M_Clk_cntr == 0)
    {
        PRINTK_AUDDRV("+%s disable_clock ADC clk(%x)\n", __func__, Aud_APLL24M_Clk_cntr);
#ifdef PM_MANAGER_API
        if (disable_clock(MT_CG_AUDIO_24M, "AUDIO"))
        {
            PRINTK_AUD_CLK("%s fail", __func__);
        }
        if (disable_clock(MT_CG_AUDIO_APLL2_TUNER, "AUDIO"))
        {
            PRINTK_AUD_CLK("%s fail", __func__);
        }

        clkmux_sel(MT_MUX_AUD2, 0, "AUDIO"); //select 26M
        disable_mux(MT_MUX_AUD2, "AUDIO");
#endif
    }
    if (Aud_APLL24M_Clk_cntr < 0)
    {
        PRINTK_AUDDRV("%s  <0 (%d) \n", __func__, Aud_APLL24M_Clk_cntr);
        Aud_APLL24M_Clk_cntr = 0;
    }
    mutex_unlock(&auddrv_pmic_mutex);
}
void AudDrv_Suspend_Clk_Off(void)
{
    unsigned long flags;
    spin_lock_irqsave(&auddrv_Clk_lock, flags);
    if (Aud_AFE_Clk_cntr > 0)
    {
        PRINTK_AUD_CLK("AudDrv_Suspend_Clk_Off Aud_AFE_Clk_cntr:%d ANA_Clk(%d)\n", Aud_AFE_Clk_cntr, Aud_ANA_Clk_cntr);
#ifdef PM_MANAGER_API
        //Disable AFE clock and I2S clock
        Afe_Set_Reg(AUDIO_TOP_CON0, 0x00004044, 0x00004044); // bit2: afe power off, bit6: I2S power off

        if (disable_clock(MT_CG_AUDIO_AFE, "AUDIO"))
        {
            xlog_printk(ANDROID_LOG_ERROR, "Sound", "AudDrv_Suspend_Clk_Off() disable_clock MT_CG_AUDIO_AFE fail");
        }

        if (Aud_I2S_Clk_cntr > 0)
        {
            if (disable_clock(MT_CG_AUDIO_I2S, "AUDIO"))
            {
                xlog_printk(ANDROID_LOG_ERROR, "Sound", "AudDrv_Suspend_Clk_Off() disable_clock MT_CG_AUDIO_I2S fail");
            }
        }
#else
        Afe_Set_Reg(AUDIO_TOP_CON0, 0x00004044, 0x00004044);  // bit2: afe power off, bit6: I2S power off
#endif
    }
    spin_unlock_irqrestore(&auddrv_Clk_lock, flags);
    if (Aud_ANA_Clk_cntr > 0)
    {
        PRINTK_AUD_CLK("AudDrv_Suspend_Clk_On Aud_AFE_Clk_cntr:%d ANA_Clk(%d) \n", Aud_AFE_Clk_cntr, Aud_ANA_Clk_cntr);
    }
}
示例#4
0
void AudDrv_Clk_Off(void)
{
    unsigned long flags;
    PRINTK_AUD_CLK("+!! AudDrv_Clk_Off, Aud_AFE_Clk_cntr:%d \n",Aud_AFE_Clk_cntr);
    spin_lock_irqsave(&auddrv_Clk_lock, flags);

    Aud_AFE_Clk_cntr--;
    if (Aud_AFE_Clk_cntr == 0)
    {
        printk("------------AudDrv_Clk_Off, Aud_AFE_Clk_cntr:%d \n", Aud_AFE_Clk_cntr);
        {
            // Disable AFE clock
#ifdef PM_MANAGER_API
            if (disable_clock(MT_CG_AUDIO_AFE, "AUDIO"))
            {
                xlog_printk(ANDROID_LOG_ERROR, "Sound", "disable_clock MT_CG_AUDIO_AFE fail");
            }
#else
            Afe_Set_Reg(AUDIO_TOP_CON0, 0x06000044, 0x06000044);
#endif

        }
    }
    else if (Aud_AFE_Clk_cntr < 0)
    {
        PRINTK_AUD_ERROR("!! AudDrv_Clk_Off, Aud_AFE_Clk_cntr<0 (%d) \n", Aud_AFE_Clk_cntr);
        AUDIO_ASSERT(true);
        Aud_AFE_Clk_cntr = 0;
    }
    PRINTK_AUD_CLK("-!! AudDrv_Clk_Off, Aud_AFE_Clk_cntr:%d \n",Aud_AFE_Clk_cntr);
    spin_unlock_irqrestore(&auddrv_Clk_lock, flags);
}
void AudDrv_ADC_Clk_Off(void)
{
    //PRINTK_AUDDRV("+AudDrv_ADC_Clk_Off, Aud_ADC_Clk_cntr:%d \n", Aud_ADC_Clk_cntr);
    mutex_lock(&auddrv_pmic_mutex);
    Aud_ADC_Clk_cntr--;
    if (Aud_ADC_Clk_cntr == 0)
    {
        PRINTK_AUDDRV("+AudDrv_ADC_Clk_On disable_clock ADC clk(%x)\n", Aud_ADC_Clk_cntr);
        //Afe_Set_Reg(AUDIO_TOP_CON0, 1 << 24 , 1 << 24);
#ifdef PM_MANAGER_API
#if defined(CONFIG_MTK_LEGACY)

        if (disable_clock(MT_CG_AUDIO_ADC, "AUDIO"))
        {
            PRINTK_AUD_CLK("%s fail", __func__);
        }
#else
        if (paudclk->aud_adc_clk_status)
        {
            clk_disable_unprepare(paudclk->aud_adc_clk);
        }
#endif
#else
        Afe_Set_Reg(AUDIO_TOP_CON0, 1 << 24 , 1 << 24);
#endif
    }
    if (Aud_ADC_Clk_cntr < 0)
    {
        PRINTK_AUDDRV("!! AudDrv_ADC_Clk_Off, Aud_ADC_Clk_cntr<0 (%d) \n", Aud_ADC_Clk_cntr);
        Aud_ADC_Clk_cntr = 0;
    }
    mutex_unlock(&auddrv_pmic_mutex);
    //PRINTK_AUDDRV("-AudDrv_ADC_Clk_Off, Aud_ADC_Clk_cntr:%d \n", Aud_ADC_Clk_cntr);
}
示例#6
0
void AudDrv_ADC3_Clk_Off(void)
{
    //PRINTK_AUDDRV("+%s %d \n", __func__,Aud_ADC2_Clk_cntr);
    mutex_lock(&auddrv_pmic_mutex);
    Aud_ADC3_Clk_cntr--;
    if (Aud_ADC3_Clk_cntr == 0)
    {
        PRINTK_AUDDRV("+%s disable_clock ADC clk(%x)\n", __func__, Aud_ADC3_Clk_cntr);
#if 0 //K2 removed		
#ifdef PM_MANAGER_API
        if (disable_clock(MT_CG_AUDIO_ADDA3, "AUDIO"))
        {
            PRINTK_AUD_CLK("%s fail", __func__);
        }
#endif
#endif
    }
    if (Aud_ADC3_Clk_cntr < 0)
    {
        PRINTK_AUDDRV("%s  <0 (%d) \n", __func__, Aud_ADC3_Clk_cntr);
        Aud_ADC3_Clk_cntr = 0;
    }
    mutex_unlock(&auddrv_pmic_mutex);
    //PRINTK_AUDDRV("-AudDrv_ADC_Clk_Off, Aud_ADC_Clk_cntr:%d \n", Aud_ADC_Clk_cntr);
}
示例#7
0
void AudDrv_ADC2_Clk_Off(void)
{
    //PRINTK_AUDDRV("+%s %d \n", __func__,Aud_ADC2_Clk_cntr);
    mutex_lock(&auddrv_pmic_mutex);
    Aud_ADC2_Clk_cntr--;
    if (Aud_ADC2_Clk_cntr == 0)
    {
        PRINTK_AUDDRV("+%s disable_clock ADC clk(%x)\n", __func__, Aud_ADC2_Clk_cntr);
#if 0 //K2 removed		
#ifdef PM_MANAGER_API
        if (disable_clock(MT_CG_AUDIO_ADDA2, "AUDIO"))
        {
            PRINTK_AUD_CLK("%s fail", __func__);
        }
#else
        Afe_Set_Reg(AUDIO_TOP_CON0, 1 << 23 , 1 << 23); //temp hard code setting, after confirm with enable clock usage, this could be removed.
#endif
#endif
    }
    if (Aud_ADC2_Clk_cntr < 0)
    {
        PRINTK_AUDDRV("%s  <0 (%d) \n", __func__, Aud_ADC2_Clk_cntr);
        Aud_ADC2_Clk_cntr = 0;
    }
    mutex_unlock(&auddrv_pmic_mutex);
    //PRINTK_AUDDRV("-AudDrv_ADC_Clk_Off, Aud_ADC_Clk_cntr:%d \n", Aud_ADC_Clk_cntr);
}
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);
}
void AudDrv_HDMI_Clk_On(void)
{
    PRINTK_AUD_CLK("+AudDrv_HDMI_Clk_On, Aud_I2S_Clk_cntr:%d \n", Aud_HDMI_Clk_cntr);
    if (Aud_HDMI_Clk_cntr == 0)
    {
        AudDrv_ANA_Clk_On();
        AudDrv_Clk_On();
    }
    Aud_HDMI_Clk_cntr++;
}
/*****************************************************************************
 * FUNCTION
 *  AudDrv_ANA_Clk_On / AudDrv_ANA_Clk_Off
 *
 * DESCRIPTION
 *  Enable/Disable analog part clock
 *
 *****************************************************************************/
void AudDrv_ANA_Clk_On(void)
{
    mutex_lock(&auddrv_pmic_mutex);
    if (Aud_ANA_Clk_cntr == 0)
    {
        PRINTK_AUD_CLK("+AudDrv_ANA_Clk_On, Aud_ANA_Clk_cntr:%d \n", Aud_ANA_Clk_cntr);
    }
    Aud_ANA_Clk_cntr++;
    mutex_unlock(&auddrv_pmic_mutex);
    //PRINTK_AUD_CLK("-AudDrv_ANA_Clk_Off, Aud_ANA_Clk_cntr:%d \n",Aud_ANA_Clk_cntr);
}
示例#11
0
void AudDrv_ADC3_Clk_On(void)
{
    PRINTK_AUD_CLK("+%s %d \n", __func__, Aud_ADC3_Clk_cntr);
    mutex_lock(&auddrv_pmic_mutex);

    if (Aud_ADC3_Clk_cntr == 0)
    {
        PRINTK_AUDDRV("+%s  enable_clock ADC clk(%x)\n", __func__, Aud_ADC3_Clk_cntr);
#if 0 //K2 removed		
#ifdef PM_MANAGER_API
        if (enable_clock(MT_CG_AUDIO_ADDA3, "AUDIO"))
        {
            PRINTK_AUD_CLK("%s fail", __func__);
        }
#endif
#endif
    }
    Aud_ADC2_Clk_cntr++;
    mutex_unlock(&auddrv_pmic_mutex);
}
示例#12
0
/*****************************************************************************
 * FUNCTION
 *  AudDrv_Clk_On / AudDrv_Clk_Off
 *
 * DESCRIPTION
 *  Enable/Disable PLL(26M clock) \ AFE clock
 *
 *****************************************************************************
 */
void AudDrv_Clk_On(void)
{
    unsigned long flags;
    PRINTK_AUD_CLK("+AudDrv_Clk_On, Aud_AFE_Clk_cntr:%d \n",Aud_AFE_Clk_cntr);
    spin_lock_irqsave(&auddrv_Clk_lock, flags);
    if (Aud_AFE_Clk_cntr == 0)
    {
        printk("-----------AudDrv_Clk_On, Aud_AFE_Clk_cntr:%d \n", Aud_AFE_Clk_cntr);
#ifdef PM_MANAGER_API
        if (enable_clock(MT_CG_AUDIO_AFE, "AUDIO"))
        {
            xlog_printk(ANDROID_LOG_ERROR, "Sound", "Aud enable_clock MT_CG_AUDIO_AFE fail !!!\n");
        }
#else
        Afe_Set_Reg(AUDIO_TOP_CON0, 0x4000, 0x06004044);
#endif
    }
    Aud_AFE_Clk_cntr++;
    spin_unlock_irqrestore(&auddrv_Clk_lock, flags);
    PRINTK_AUD_CLK("-AudDrv_Clk_On, Aud_AFE_Clk_cntr:%d \n",Aud_AFE_Clk_cntr);
}
void AudDrv_APLL1Tuner_Clk_On(void)
{
    unsigned long flags;
    spin_lock_irqsave(&auddrv_Clk_lock, flags);
    if (Aud_APLL1_Tuner_cntr == 0)
    {
        PRINTK_AUD_CLK("+AudDrv_APLLTuner_Clk_On, Aud_APLL1_Tuner_cntr:%d \n", Aud_APLL1_Tuner_cntr);
        Afe_Set_Reg(AUDIO_TOP_CON0, 0x0 << 19, 0x1 << 19);
    }
    Aud_APLL1_Tuner_cntr++;
    spin_unlock_irqrestore(&auddrv_Clk_lock, flags);
}
void AudDrv_APLL24M_Clk_Off(void)
{
    pr_debug("+%s %d \n", __func__, Aud_APLL24M_Clk_cntr);
    mutex_lock(&auddrv_pmic_mutex);
    Aud_APLL24M_Clk_cntr--;
    if (Aud_APLL24M_Clk_cntr == 0)
    {
        PRINTK_AUDDRV("+%s disable_clock ADC clk(%x)\n", __func__, Aud_APLL24M_Clk_cntr);
#ifdef PM_MANAGER_API
#if defined(CONFIG_MTK_LEGACY)

        if (disable_clock(MT_CG_AUDIO_24M, "AUDIO"))
        {
            PRINTK_AUD_CLK("%s fail", __func__);
        }
        if (disable_clock(MT_CG_AUDIO_APLL2_TUNER, "AUDIO"))
        {
            PRINTK_AUD_CLK("%s fail", __func__);
        }
#else
        if (paudclk->aud_apll24m_clk_status)
        {
            clk_disable_unprepare(paudclk->aud_apll24m_clk);
        }
        if (paudclk->aud_apll2_tuner_clk_status)
        {
            clk_disable_unprepare(paudclk->aud_apll2_tuner_clk);
        }        
#endif
        clkmux_sel(MT_MUX_AUD1, 0, "AUDIO"); //select 26M
        disable_mux(MT_MUX_AUD1, "AUDIO");
#endif
    }
    if (Aud_APLL24M_Clk_cntr < 0)
    {
        PRINTK_AUDDRV("%s  <0 (%d) \n", __func__, Aud_APLL24M_Clk_cntr);
        Aud_APLL24M_Clk_cntr = 0;
    }
    mutex_unlock(&auddrv_pmic_mutex);
}
/*****************************************************************************
* FUNCTION
*  AudDrv_Suspend_Clk_Off / AudDrv_Suspend_Clk_On
*
* DESCRIPTION
*  Enable/Disable AFE clock for suspend
*
*****************************************************************************
*/
void AudDrv_Suspend_Clk_On(void)
{
    unsigned long flags;
    spin_lock_irqsave(&auddrv_Clk_lock, flags);

    if (Aud_AFE_Clk_cntr > 0)
    {
        PRINTK_AUD_CLK("AudDrv_Suspend_Clk_On Aud_AFE_Clk_cntr:%d ANA_Clk(%d) \n", Aud_AFE_Clk_cntr, Aud_ANA_Clk_cntr);
#ifdef PM_MANAGER_API

        //Enable AFE clock
        if (enable_clock(MT_CG_AUDIO_AFE, "AUDIO"))
        {
            PRINTK_AUD_CLK("AudDrv_Suspend_Clk_On() Aud enable_clock() MT_CG_AUDIO_AFE fail");
        }
        else
        {
            PRINTK_AUD_CLK("AudDrv_Suspend_Clk_On() Aud enable_clock() MT_CG_AUDIO_AFE success");
        }
        if (Aud_I2S_Clk_cntr > 0)
        {
            ///Enable I2S clock
            if (enable_clock(MT_CG_AUDIO_I2S, "AUDIO"))
            {
                xlog_printk(ANDROID_LOG_ERROR, "Sound", "AudDrv_Suspend_Clk_On() Aud enable_clock() MT_CG_AUDIO_I2S fail");
            }
        }
#else
        Afe_Set_Reg(AUDIO_TOP_CON0, 0x00004000, 0x00004000); // bit2: afe power on, bit6: I2S power on
#endif
    }
    spin_unlock_irqrestore(&auddrv_Clk_lock, flags);
    if (Aud_ANA_Clk_cntr > 0)
    {
        PRINTK_AUD_CLK("AudDrv_Suspend_Clk_On Aud_AFE_Clk_cntr:%d ANA_Clk(%d) \n", Aud_AFE_Clk_cntr, Aud_ANA_Clk_cntr);
    }
    //PRINTK_AUD_CLK("-AudDrv_Suspend_Clk_On Aud_AFE_Clk_cntr:%d ANA_Clk(%d) \n",Aud_AFE_Clk_cntr,Aud_ANA_Clk_cntr);
}
示例#16
0
void AudDrv_APLL2Tuner_Clk_On(void)
{
    unsigned long flags;
    spin_lock_irqsave(&auddrv_Clk_lock, flags);
    if (Aud_APLL2_Tuner_cntr == 0)
    {
        PRINTK_AUD_CLK("+Aud_APLL2_Tuner_cntr, Aud_APLL2_Tuner_cntr:%d \n", Aud_APLL2_Tuner_cntr);
        Afe_Set_Reg(AUDIO_TOP_CON0, 0x0 << 20, 0x1 << 20);
        Afe_Set_Reg(AFE_APLL2_TUNER_CFG, 0x00000033, 0x1 << 19);
        SetpllCfg(AP_PLL_CON5, 0x1<<1, 0x1<<1);
    }
    Aud_APLL2_Tuner_cntr++;
    spin_unlock_irqrestore(&auddrv_Clk_lock, flags);
}
void AudDrv_ADC_Clk_On(void)
{
    //PRINTK_AUDDRV("+AudDrv_ADC_Clk_On, Aud_ADC_Clk_cntr:%d \n", Aud_ADC_Clk_cntr);
#if !defined(CONFIG_MTK_LEGACY)  
    int ret = 0;
#endif
    mutex_lock(&auddrv_pmic_mutex);

    if (Aud_ADC_Clk_cntr == 0)
    {
        PRINTK_AUDDRV("+AudDrv_ADC_Clk_On enable_clock ADC clk(%x)\n", Aud_ADC_Clk_cntr);
//        Afe_Set_Reg(AUDIO_TOP_CON0, 0 << 24 , 1 << 24);
#ifdef PM_MANAGER_API
#if defined(CONFIG_MTK_LEGACY)
        if (enable_clock(MT_CG_AUDIO_ADC, "AUDIO"))
        {
            PRINTK_AUD_CLK("%s fail", __func__);
        }
#else
        if (paudclk->aud_adc_clk_status)
        {
            ret = clk_prepare_enable(paudclk->aud_adc_clk);
            if (!ret)
            {
                pr_err("%s Aud enable_clock enable_clock ADC fail", __func__);
                BUG();
                return;
            }
        }
        else
        {
            pr_err("%s clk_status error Aud enable_clock ADC fail", __func__);
            BUG();
            return;                                    
        }        

#endif
#else
        Afe_Set_Reg(AUDIO_TOP_CON0, 0 << 24 , 1 << 24);
#endif
    }
    Aud_ADC_Clk_cntr++;
    mutex_unlock(&auddrv_pmic_mutex);
}
void AudDrv_ANA_Clk_Off(void)
{
    //PRINTK_AUD_CLK("+AudDrv_ANA_Clk_Off, Aud_ADC_Clk_cntr:%d \n",  Aud_ANA_Clk_cntr);
    mutex_lock(&auddrv_pmic_mutex);
    Aud_ANA_Clk_cntr--;
    if (Aud_ANA_Clk_cntr == 0)
    {
        PRINTK_AUD_CLK("+AudDrv_ANA_Clk_Off disable_clock Ana clk(%x)\n", Aud_ANA_Clk_cntr);
        // Disable ADC clock
#ifdef PM_MANAGER_API
#else
        // TODO:: open ADC clock....
#endif
    }
    else if (Aud_ANA_Clk_cntr < 0)
    {
        PRINTK_AUD_ERROR("!! AudDrv_ANA_Clk_Off, Aud_ADC_Clk_cntr<0 (%d) \n", Aud_ANA_Clk_cntr);
        AUDIO_ASSERT(true);
        Aud_ANA_Clk_cntr = 0;
    }
    mutex_unlock(&auddrv_pmic_mutex);
    //PRINTK_AUD_CLK("-AudDrv_ANA_Clk_Off, Aud_ADC_Clk_cntr:%d \n", Aud_ANA_Clk_cntr);
}
void AudDrv_Suspend_Clk_On(void)
{
    unsigned long flags;
#if !defined(CONFIG_MTK_LEGACY)  
    int ret = 0;
#endif      
    
    spin_lock_irqsave(&auddrv_Clk_lock, flags);
    if (Aud_Core_Clk_cntr > 0)
    {
#ifdef PM_MANAGER_API
#if defined(CONFIG_MTK_LEGACY)
            if (enable_clock(MT_CG_AUDIO_AFE, "AUDIO"))
            {
                PRINTK_AUD_ERROR("Aud enable_clock MT_CG_AUDIO_AFE fail !!!\n");
            }
#else
            if (paudclk->aud_afe_clk_status)
            {
                ret = clk_prepare_enable(paudclk->aud_afe_clk);
                if (!ret)
                {
                    pr_err("%s Aud enable_clock enable_clock aud_afe_clk fail", __func__);
                    BUG();
                    return;                     
                }
            }
            else
            {
                pr_err("%s clk_status error Aud enable_clock aud_afe_clk fail", __func__);
                BUG();
                return;                                    
            }            
#endif                    

        if (Aud_I2S_Clk_cntr > 0)
        {
#if defined(CONFIG_MTK_LEGACY)       
            if (enable_clock(MT_CG_AUDIO_I2S, "AUDIO"))
            {
                PRINTK_AUD_ERROR("enable_clock MT_CG_AUDIO_I2S fail");
            }
#else
            if (paudclk->aud_i2s_clk_status)
            {
                ret = clk_prepare_enable(paudclk->aud_i2s_clk);
                if (!ret)
                {
                    pr_err("%s Aud enable_clock enable_clock aud_i2s_clk fail", __func__);
                    BUG();
                    return;                     
                }
            }
            else
            {
                pr_err("%s clk_status error Aud enable_clock aud_i2s_clk fail", __func__);
                BUG();
                return;                                    
            }            
#endif             
        }
        if (Aud_ADC_Clk_cntr > 0)
        {
            Afe_Set_Reg(AUDIO_TOP_CON0, 0 << 24 , 1 << 24);
        }
        if (Aud_ADC2_Clk_cntr > 0)
        {
        	#if 0 //K2 removed
            if (enable_clock(MT_CG_AUDIO_ADDA2, "AUDIO"))
            {
                PRINTK_AUD_CLK("%s fail", __func__);
            }
			#endif
        }
        if (Aud_ADC3_Clk_cntr > 0)
        {
        	#if 0 //K2 removed
            if (enable_clock(MT_CG_AUDIO_ADDA3, "AUDIO"))
            {
                PRINTK_AUD_CLK("%s fail", __func__);
            }
			#endif
        }
        if (Aud_ANA_Clk_cntr > 0)
        {

        }
        if (Aud_HDMI_Clk_cntr > 0)
        {

        }
        if (Aud_APLL22M_Clk_cntr  > 0)
        {

            enable_mux(MT_MUX_AUD1, "AUDIO");
            clkmux_sel(MT_MUX_AUD1, 1 , "AUDIO"); //select APLL1
            
#if defined(CONFIG_MTK_LEGACY)       
            if (enable_clock(MT_CG_AUDIO_22M, "AUDIO"))
            {
                PRINTK_AUD_CLK("%s fail", __func__);
            }
            if (enable_clock(MT_CG_AUDIO_APLL_TUNER, "AUDIO"))
            {
                PRINTK_AUD_CLK("%s fail", __func__);
            }
#else            
            if (paudclk->aud_apll22m_clk_status)
            {
                ret = clk_prepare_enable(paudclk->aud_apll22m_clk);
                if (!ret)
                {
                    pr_err("%s Aud enable_clock enable_clock aud_apll22m_clk fail", __func__);
                    BUG();
                    return;                     
                }
            }
            else
            {
                pr_err("%s clk_status error Aud enable_clock aud_apll22m_clk fail", __func__);
                BUG();
                return;                                    
            }  
            
            if (paudclk->aud_apll1_tuner_clk_status)
            {
                ret = clk_prepare_enable(paudclk->aud_apll1_tuner_clk);
                if (!ret)
                {
                    pr_err("%s Aud enable_clock enable_clock aud_apll1_tuner_clk fail", __func__);
                    BUG();
                    return;                     
                }
            }
            else
            {
                pr_err("%s clk_status error Aud enable_clock aud_apll1_tuner_clk fail", __func__);
                BUG();
                return;                                    
            }  
#endif        
        }
        if (Aud_APLL24M_Clk_cntr > 0)
        {
            enable_mux(MT_MUX_AUD2, "AUDIO");
            clkmux_sel(MT_MUX_AUD2, 1, "AUDIO"); //APLL2
#if defined(CONFIG_MTK_LEGACY)                   
            if (enable_clock(MT_CG_AUDIO_24M, "AUDIO"))
            {
                PRINTK_AUD_CLK("%s fail", __func__);
            }
            if (enable_clock(MT_CG_AUDIO_APLL2_TUNER, "AUDIO"))
            {
                PRINTK_AUD_CLK("%s fail", __func__);
            }
#else            
            if (paudclk->aud_apll24m_clk_status)
            {
                ret = clk_prepare_enable(paudclk->aud_apll24m_clk);
                if (!ret)
                {
                    pr_err("%s Aud enable_clock enable_clock aud_apll24m_clk fail", __func__);
                    BUG();
                    return;                     
                }
            }
            else
            {
                pr_err("%s clk_status error Aud enable_clock aud_apll24m_clk fail", __func__);
                BUG();
                return;                                    
            }


            if (paudclk->aud_apll2_tuner_clk_status)
            {
                ret = clk_prepare_enable(paudclk->aud_apll2_tuner_clk);
                if (!ret)
                {
                    pr_err("%s Aud enable_clock enable_clock aud_apll2_tuner_clk fail", __func__);
                    BUG();
                    return;                     
                }
            }
            else
            {
                pr_err("%s clk_status error Aud enable_clock aud_apll2_tuner_clk fail", __func__);
                BUG();
                return;                                    
            }    
#endif            
        }
#endif
    }
    spin_unlock_irqrestore(&auddrv_Clk_lock, flags);
}
示例#20
0
void AudDrv_Suspend_Clk_On(void)
{
    unsigned long flags;
    spin_lock_irqsave(&auddrv_Clk_lock, flags);
    if (Aud_Core_Clk_cntr > 0)
    {
#ifdef PM_MANAGER_API
        if (Aud_AFE_Clk_cntr  > 0)
        {
            if (enable_clock(MT_CG_AUDIO_AFE, "AUDIO"))
            {
                xlog_printk(ANDROID_LOG_ERROR, "Sound", "Aud enable_clock MT_CG_AUDIO_AFE fail !!!\n");
            }
        }
        if (Aud_I2S_Clk_cntr > 0)
        {
            if (enable_clock(MT_CG_AUDIO_I2S, "AUDIO"))
            {
                PRINTK_AUD_ERROR("enable_clock MT_CG_AUDIO_I2S fail");
            }
        }
        if (Aud_ADC_Clk_cntr > 0)
        {
            Afe_Set_Reg(AUDIO_TOP_CON0, 0 << 24 , 1 << 24);
        }
        if (Aud_ADC2_Clk_cntr > 0)
        {
        	#if 0 //K2 removed
            if (enable_clock(MT_CG_AUDIO_ADDA2, "AUDIO"))
            {
                PRINTK_AUD_CLK("%s fail", __func__);
            }
			#endif
        }
        if (Aud_ADC3_Clk_cntr > 0)
        {
        	#if 0 //K2 removed	
            if (enable_clock(MT_CG_AUDIO_ADDA3, "AUDIO"))
            {
                PRINTK_AUD_CLK("%s fail", __func__);
            }
			#endif
        }
        if (Aud_ANA_Clk_cntr > 0)
        {

        }
        if (Aud_HDMI_Clk_cntr > 0)
        {

        }
        if (Aud_APLL22M_Clk_cntr  > 0)
        {

            enable_mux(MT_MUX_AUD1, "AUDIO");
            clkmux_sel(MT_MUX_AUD1, 1 , "AUDIO"); //select APLL1

            if (enable_clock(MT_CG_AUDIO_22M, "AUDIO"))
            {
                PRINTK_AUD_CLK("%s fail", __func__);
            }
            if (enable_clock(MT_CG_AUDIO_APLL_TUNER, "AUDIO"))
            {
                PRINTK_AUD_CLK("%s fail", __func__);
            }
        }
        if (Aud_APLL24M_Clk_cntr > 0)
        {
            enable_mux(MT_MUX_AUD2, "AUDIO");
            clkmux_sel(MT_MUX_AUD2, 1, "AUDIO"); //APLL2
            if (enable_clock(MT_CG_AUDIO_24M, "AUDIO"))
            {
                PRINTK_AUD_CLK("%s fail", __func__);
            }
            if (enable_clock(MT_CG_AUDIO_APLL2_TUNER, "AUDIO"))
            {
                PRINTK_AUD_CLK("%s fail", __func__);
            }
        }
#endif
    }
    spin_unlock_irqrestore(&auddrv_Clk_lock, flags);
}
void AudDrv_Clk_Off(void)
{
    unsigned long flags;
    PRINTK_AUD_CLK("+!! AudDrv_Clk_Off, Aud_AFE_Clk_cntr:%d \n",Aud_AFE_Clk_cntr);
    spin_lock_irqsave(&auddrv_Clk_lock, flags);

    Aud_AFE_Clk_cntr--;
    if (Aud_AFE_Clk_cntr == 0)
    {
        pr_err("------------AudDrv_Clk_Off, Aud_AFE_Clk_cntr:%d \n", Aud_AFE_Clk_cntr);
        {
            // Disable AFE clock
#ifdef PM_MANAGER_API
#if defined(CONFIG_MTK_LEGACY)
            if (disable_clock(MT_CG_AUDIO_AFE, "AUDIO"))
            {
                PRINTK_AUD_CLK("%s disable_clock MT_CG_AUDIO_AFE fail", __func__);
            }
            if (disable_clock(MT_CG_AUDIO_DAC, "AUDIO"))
            {
                PRINTK_AUD_CLK("%s MT_CG_AUDIO_DAC fail", __func__);
            }
            if (disable_clock(MT_CG_AUDIO_DAC_PREDIS, "AUDIO"))
            {
                PRINTK_AUD_CLK("%s MT_CG_AUDIO_DAC_PREDIS fail", __func__);
            }
            if (disable_clock(MT_CG_INFRA_AUDIO, "AUDIO"))
            {
                PRINTK_AUD_CLK("%s disable_clock MT_CG_INFRA_AUDIO fail", __func__);
            }
#else
            pr_err("-----------[CCF]AudDrv_Clk_Off, paudclk->aud_infra_clk_status:%d \n", paudclk->aud_infra_clk_status);

            if (paudclk->aud_afe_clk_status)
            {
                clk_disable_unprepare(paudclk->aud_afe_clk);
            }
            if (paudclk->aud_dac_clk_status)
            {
                clk_disable_unprepare(paudclk->aud_dac_clk);
            }
            if (paudclk->aud_dac_predis_clk_status)
            {
                clk_disable_unprepare(paudclk->aud_dac_predis_clk);
            }
            if (paudclk->aud_infra_clk_status)
            {
                clk_disable_unprepare(paudclk->aud_infra_clk);
            }
#endif

#else
            Afe_Set_Reg(AUDIO_TOP_CON0, 0x06000044, 0x06000044);
            SetInfraCfg(AUDIO_CG_SET, 0x2000000, 0x2000000); //bit25=1, with 133m mastesr and 66m slave bus clock cg gating
#endif
        }
    }
    else if (Aud_AFE_Clk_cntr < 0)
    {
        PRINTK_AUD_ERROR("!! AudDrv_Clk_Off, Aud_AFE_Clk_cntr<0 (%d) \n", Aud_AFE_Clk_cntr);
        AUDIO_ASSERT(true);
        Aud_AFE_Clk_cntr = 0;
    }
    PRINTK_AUD_CLK("-!! AudDrv_Clk_Off, Aud_AFE_Clk_cntr:%d \n",Aud_AFE_Clk_cntr);
    spin_unlock_irqrestore(&auddrv_Clk_lock, flags);
}
void AudDrv_Suspend_Clk_Off(void)
{
    unsigned long flags;
    spin_lock_irqsave(&auddrv_Clk_lock, flags);
    if (Aud_Core_Clk_cntr > 0)
    {
#ifdef PM_MANAGER_API
        if (Aud_AFE_Clk_cntr  > 0)
        {
#if defined(CONFIG_MTK_LEGACY)        
            if (disable_clock(MT_CG_AUDIO_AFE, "AUDIO"))
            {
                printk("Aud enable_clock MT_CG_AUDIO_AFE fail !!!\n");
            }
#else
            if (paudclk->aud_afe_clk_status)
            {
                clk_disable_unprepare(paudclk->aud_afe_clk);
            }
#endif
        }
        if (Aud_I2S_Clk_cntr > 0)
        {
#if defined(CONFIG_MTK_LEGACY)               
            if (disable_clock(MT_CG_AUDIO_I2S, "AUDIO"))
            {
                PRINTK_AUD_ERROR("disable_clock MT_CG_AUDIO_I2S fail");
            }
#else
            if (paudclk->aud_i2s_clk_status)
            {
                clk_disable_unprepare(paudclk->aud_i2s_clk);
            }
#endif
        }
        if (Aud_ADC_Clk_cntr > 0)
        {
            Afe_Set_Reg(AUDIO_TOP_CON0, 1 << 24 , 1 << 24);

        }
        if (Aud_ADC2_Clk_cntr > 0)
        {
        	#if 0 //K2 removed
            if (disable_clock(MT_CG_AUDIO_ADDA2, "AUDIO"))
            {
                PRINTK_AUD_CLK("%s fail", __func__);
            }
			#endif
        }
        if (Aud_ADC3_Clk_cntr > 0)
        {
            #if 0 //K2 removed
            if (disable_clock(MT_CG_AUDIO_ADDA3, "AUDIO"))
            {
                PRINTK_AUD_CLK("%s fail", __func__);
            }
			#endif
        }
        if (Aud_ANA_Clk_cntr > 0)
        {

        }
        if (Aud_HDMI_Clk_cntr > 0)
        {

        }
        if (Aud_APLL22M_Clk_cntr  > 0)
        {
#if defined(CONFIG_MTK_LEGACY)                      
            if (disable_clock(MT_CG_AUDIO_22M, "AUDIO"))
            {
                PRINTK_AUD_CLK("%s fail", __func__);
            }
            if (disable_clock(MT_CG_AUDIO_APLL_TUNER, "AUDIO"))
            {
                PRINTK_AUD_CLK("%s fail", __func__);
            }
#else
            if (paudclk->aud_apll22m_clk_status)
            {
                clk_disable_unprepare(paudclk->aud_apll22m_clk);
            }
            if (paudclk->aud_apll1_tuner_clk_status)
            {
                clk_disable_unprepare(paudclk->aud_apll1_tuner_clk);
            }  
#endif
            clkmux_sel(MT_MUX_AUD1, 0, "AUDIO"); //select 26M
            disable_mux(MT_MUX_AUD1, "AUDIO");
        }
        if (Aud_APLL24M_Clk_cntr > 0)
        {
#if defined(CONFIG_MTK_LEGACY)                              
            if (disable_clock(MT_CG_AUDIO_24M, "AUDIO"))
            {
                PRINTK_AUD_CLK("%s fail", __func__);
            }
            if (disable_clock(MT_CG_AUDIO_APLL2_TUNER, "AUDIO"))
            {
                PRINTK_AUD_CLK("%s fail", __func__);
            }
            clkmux_sel(MT_MUX_AUD2, 0, "AUDIO"); //select 26M
            disable_mux(MT_MUX_AUD2, "AUDIO");
#else
            if (paudclk->aud_apll24m_clk_status)
            {
                clk_disable_unprepare(paudclk->aud_apll24m_clk);
            }
            if (paudclk->aud_apll2_tuner_clk_status)
            {
                clk_disable_unprepare(paudclk->aud_apll2_tuner_clk);
            }  
#endif
            
        }
#endif
    }
    spin_unlock_irqrestore(&auddrv_Clk_lock, flags);
}
void AudDrv_APLL22M_Clk_On(void)
{
    pr_debug("+%s %d \n", __func__, Aud_APLL22M_Clk_cntr);
#if !defined(CONFIG_MTK_LEGACY)  
    int ret = 0;
#endif    
    mutex_lock(&auddrv_pmic_mutex);

    if (Aud_APLL22M_Clk_cntr == 0)
    {
        PRINTK_AUDDRV("+%s  enable_clock ADC clk(%x)\n", __func__, Aud_APLL22M_Clk_cntr);
#ifdef PM_MANAGER_API
        pr_debug("+%s  enable_mux ADC \n", __func__);
        enable_mux(MT_MUX_AUD1, "AUDIO");//MT_MUX_AUD1	CLK_CFG_6 => [7]: pdn_aud_1 [15]: ,MT_MUX_AUD2: pdn_aud_2

        clkmux_sel(MT_MUX_AUD1, 1 , "AUDIO"); //select APLL1 ,hf_faud_1_ck is mux of 26M and APLL1_CK

        pll_fsel(APLL1, 0xb7945ea6); //APLL1 90.3168M

        //pdn_aud_1 => power down hf_faud_1_ck, hf_faud_1_ck is mux of 26M and APLL1_CK
        //pdn_aud_2 => power down hf_faud_2_ck, hf_faud_2_ck is mux of 26M and APLL2_CK (D1 is WHPLL)
#if defined(CONFIG_MTK_LEGACY)
        if (enable_clock(MT_CG_AUDIO_22M, "AUDIO"))
        {
            PRINTK_AUD_CLK("%s fail", __func__);
        }
        if (enable_clock(MT_CG_AUDIO_APLL_TUNER, "AUDIO"))
        {
            PRINTK_AUD_CLK("%s fail", __func__);
        }
#else
        if (paudclk->aud_apll22m_clk_status)
        {
            ret = clk_prepare_enable(paudclk->aud_apll22m_clk);
            if (!ret)
            {
                pr_err("%s Aud enable_clock enable_clock aud_apll22m_clk fail", __func__);
                BUG();
                return;                
            }
        }
        else
        {
            pr_err("%s clk_status error Aud enable_clock aud_apll22m_clk fail", __func__);
            BUG();
            return;                                    
        }
        
        if (paudclk->aud_apll1_tuner_clk_status)
        {
            ret = clk_prepare_enable(paudclk->aud_apll1_tuner_clk);
            if (!ret)
            {
                pr_err("%s Aud enable_clock enable_clock aud_apll1_tuner_clk fail", __func__);
                BUG();
                return;                
            }
        }  
        else
        {
            pr_err("%s clk_status error Aud enable_clock aud_apll1_tuner_clk fail", __func__);
            BUG();
            return;                                    
        }           
#endif
        
        
#endif
    }
    Aud_APLL22M_Clk_cntr++;
    mutex_unlock(&auddrv_pmic_mutex);
}
/*****************************************************************************
 * FUNCTION
 *  AudDrv_Clk_On / AudDrv_Clk_Off
 *
 * DESCRIPTION
 *  Enable/Disable PLL(26M clock) \ AFE clock
 *
 *****************************************************************************
 */
void AudDrv_Clk_On(void)
{
    unsigned long flags;
#if !defined(CONFIG_MTK_LEGACY)  
    int ret = 0;
#endif
    PRINTK_AUD_CLK("+AudDrv_Clk_On, Aud_AFE_Clk_cntr:%d \n",Aud_AFE_Clk_cntr);
    spin_lock_irqsave(&auddrv_Clk_lock, flags);
    if (Aud_AFE_Clk_cntr == 0)
    {
        pr_err("-----------AudDrv_Clk_On, Aud_AFE_Clk_cntr:%d \n", Aud_AFE_Clk_cntr);
#ifdef PM_MANAGER_API
#if defined(CONFIG_MTK_LEGACY)
        if (enable_clock(MT_CG_INFRA_AUDIO, "AUDIO"))
        {
            PRINTK_AUD_CLK("%s Aud enable_clock MT_CG_INFRA_AUDIO fail", __func__);
        }
        if (enable_clock(MT_CG_AUDIO_AFE, "AUDIO"))
        {
            PRINTK_AUD_CLK("%s Aud enable_clock MT_CG_AUDIO_AFE fail", __func__);
        }
        if (enable_clock(MT_CG_AUDIO_DAC, "AUDIO"))
        {
            PRINTK_AUD_CLK("%s MT_CG_AUDIO_DAC fail", __func__);
        }
        if (enable_clock(MT_CG_AUDIO_DAC_PREDIS, "AUDIO"))
        {
            PRINTK_AUD_CLK("%s MT_CG_AUDIO_DAC_PREDIS fail", __func__);
        }
#else
        pr_err("-----------[CCF]AudDrv_Clk_On, paudclk->aud_infra_clk_status:%d \n", paudclk->aud_infra_clk_status);

        if (paudclk->aud_infra_clk_status)
        {
            ret = clk_prepare_enable(paudclk->aud_infra_clk);
            if (!ret)
            {
                pr_err("%s Aud enable_clock MT_CG_INFRA_AUDIO fail", __func__);
                BUG();
                return;                        
            }
        }
        else
        {
            pr_err("%s clk_status error Aud enable_clock MT_CG_INFRA_AUDIO fail", __func__);
            BUG();
            return;                                    
        }
        
        if (paudclk->aud_afe_clk_status)
        {
            ret = clk_prepare_enable(paudclk->aud_afe_clk);
            if (!ret)
            {
                pr_err("%s Aud enable_clock MT_CG_AUDIO_AFE fail", __func__);
                BUG();
                return;                  
            }
        }
        else
        {
            pr_err("%s clk_status error Aud enable_clock MT_CG_AUDIO_AFE fail", __func__);
            BUG();
            return;                                    
        }
    
        if (paudclk->aud_dac_clk_status)
        {
            ret = clk_prepare_enable(paudclk->aud_dac_clk);
            if (!ret)
            {
                pr_err("%s Aud enable_clock MT_CG_AUDIO_DAC fail", __func__);
                BUG();
                return;                  
            }
        }
        else
        {
            pr_err("%s clk_status error Aud enable_clock MT_CG_AUDIO_DAC fail", __func__);
            BUG();
            return;                                    
        }
        
        if (paudclk->aud_dac_predis_clk_status)
        {
            ret = clk_prepare_enable(paudclk->aud_dac_predis_clk);
            if (!ret)
            {
                pr_err("%s Aud enable_clock MT_CG_AUDIO_DAC_PREDIS fail", __func__);
                BUG();
                return;                  
            }
        }
        else
        {
            pr_err("%s clk_status error Aud enable_clock MT_CG_AUDIO_DAC_PREDIS fail", __func__);
            BUG();
            return;                                    
        }        

#endif
#else
        SetInfraCfg(AUDIO_CG_CLR, 0x2000000, 0x2000000); //bit 25=0, without 133m master and 66m slave bus clock cg gating
        Afe_Set_Reg(AUDIO_TOP_CON0, 0x4000, 0x06004044);
#endif
    }
    Aud_AFE_Clk_cntr++;
    spin_unlock_irqrestore(&auddrv_Clk_lock, flags);
    PRINTK_AUD_CLK("-AudDrv_Clk_On, Aud_AFE_Clk_cntr:%d \n",Aud_AFE_Clk_cntr);
}
void AudDrv_APLL24M_Clk_On(void)
{
    pr_debug("+%s %d \n", __func__, Aud_APLL24M_Clk_cntr);
#if !defined(CONFIG_MTK_LEGACY)  
    int ret = 0;
#endif     
    mutex_lock(&auddrv_pmic_mutex);
    if (Aud_APLL24M_Clk_cntr == 0)
    {
        PRINTK_AUDDRV("+%s  enable_clock ADC clk(%x)\n", __func__, Aud_APLL24M_Clk_cntr);
#ifdef PM_MANAGER_API
        enable_mux(MT_MUX_AUD1, "AUDIO");

        clkmux_sel(MT_MUX_AUD1, 1, "AUDIO"); //hf_faud_1_ck apll1_ck

        pll_fsel(APLL1, 0xbc7ea932); //ALPP1 98.304M
#if defined(CONFIG_MTK_LEGACY)
        if (enable_clock(MT_CG_AUDIO_24M, "AUDIO"))
        {
            PRINTK_AUD_CLK("%s fail", __func__);
        }
        if (enable_clock(MT_CG_AUDIO_APLL2_TUNER, "AUDIO"))
        {
            PRINTK_AUD_CLK("%s fail", __func__);
        }
#else
        if (paudclk->aud_apll24m_clk_status)
        {
            ret = clk_prepare_enable(paudclk->aud_apll24m_clk);
            if (!ret)
            {
                pr_err("%s Aud enable_clock enable_clock aud_apll24m_clk fail", __func__);
                BUG();
                return;                                
            }
        }
        else
        {
            pr_err("%s clk_status error Aud enable_clock aud_apll24m_clk fail", __func__);
            BUG();
            return;                                    
        } 
        
        if (paudclk->aud_apll2_tuner_clk_status)
        {
            ret = clk_prepare_enable(paudclk->aud_apll2_tuner_clk);
            if (!ret)
            {
                pr_err("%s Aud enable_clock enable_clock aud_apll2_tuner_clk fail", __func__);
                BUG();
                return;                                
            }
        } 
        else
        {
            pr_err("%s clk_status error Aud enable_clock aud_apll2_tuner_clk fail", __func__);
            BUG();
            return;                                    
        }         

#endif
#endif
    }
    Aud_APLL24M_Clk_cntr++;
    mutex_unlock(&auddrv_pmic_mutex);
}