zoukankan      html  css  js  c++  java
  • MTK6573的LDO控制

    MTK的很多模块供电都可以采用LDO供电,对于power management 来说需要添加对应的电源控制。

    下面举例说明如何控制相关的LDO


    MTK提供的函数如下应用如下:

    camera在关闭时要关闭3个LDO电压,DVDD 2.8V,AVDD 2.8V,和Vcore 1.8电压 三个电压。


            if(TRUE != hwPowerDown(CAMERA_POWER_VCAM_A2,mode_name))
            {
                PK_DBG("[CAMERA SENSOR] Fail to enable analog power\n");
                //return -EIO;
                goto _kdCISModulePowerOn_exit_; 
            }     	
            if(TRUE != hwPowerDown(CAMERA_POWER_VCAM_D, mode_name)) {
                PK_DBG("[CAMERA SENSOR] Fail to OFF digital power\n");
                //return -EIO;
                goto _kdCISModulePowerOn_exit_;
            }
            if(TRUE != hwPowerDown(CAMERA_POWER_VCAM_D2,mode_name))
            {
                PK_DBG("[CAMERA SENSOR] Fail to enable digital power\n");
                //return -EIO;
                goto _kdCISModulePowerOn_exit_;
            }  
    		 if(TRUE == hwPowerDown(CAMERA_POWER_VCAM_A2,mode_name))
            {
                PK_DBG("[CAMERA SENSOR] CAMERA_POWER_VCAM_A2  stop!!--------------yuanwei\n");
                //return -EIO;
                ///goto _kdCISModulePowerOn_exit_; 
            } 



    但是遇到个奇怪的问题是 style="background-color: rgb(255, 255, 255); ">CAMERA_POWER_VCAM_A2 这个电压无法关闭。跟踪了一下代码发现,这个LDO复用了。然后在看 hwPowerDown 这个函数
    bool hwPowerDown(MT65XX_POWER powerId, char *mode_name)
    {
        UINT32 i;
        BOOL bFind = FALSE;    
        if(powerId >= MT65XX_POWER_COUNT_END)
        {
            MSG(PMIC,"%s:%s:%d powerId:%d is wrong\r\n",__FILE__,__FUNCTION__, 
                __LINE__ , powerId);
            return FALSE;
        }    
        if(g_MT6573_BusHW.Power[powerId].dwPowerCount == 0)
        {
            MSG(PMIC,"%s:%s:%d powerId:%d (g_MT6573_BusHW.dwPowerCount[powerId] = 0)\r\n", 
                __FILE__,__FUNCTION__,__LINE__ ,powerId);
            return FALSE;
        }
        for (i = 0; i< MAX_DEVICE; i++)
        {
            if (!strcmp(g_MT6573_BusHW.Power[powerId].mod_name[i], mode_name))
            {
                MSG(PMIC,"[%s] powerId:%d index:%d mod_name: %s\r\n", 
                    __FUNCTION__,powerId, i, mode_name);            
                sprintf(g_MT6573_BusHW.Power[powerId].mod_name[i] , "%s", NON_OP);
                bFind = TRUE;
                break ;
            }
        }   
        if(!bFind)
        {
            MSG(PMIC,"[%s] Cannot find [%d] master is [%s]\r\n",__FUNCTION__,powerId, mode_name);        
            return TRUE;
        }        
        g_MT6573_BusHW.Power[powerId].dwPowerCount--;
        if(g_MT6573_BusHW.Power[powerId].dwPowerCount > 0)
        {
            return TRUE;
        }
        /* Turn off PMU LDO*/
        MSG(CG,"[%d] PMU LDO Disable\r\n",powerId );            
        upmu_ldo_enable(powerId, KAL_FALSE);
    
        return TRUE;    
    }
    

    
    

    
    style="background-color: rgb(255, 255, 255); ">这个函数中会对LDO的打开进行计数,如果有1个模块打开了,关闭的话就会真正关闭LDO的输出,但是如果2个打开了这个LOD。那对应的计数就是2,你关闭的时候只是减少了LDO的计数,而不是真正关闭。
     g_MT6573_BusHW.Power[powerId].dwPowerCount--;
        if(g_MT6573_BusHW.Power[powerId].dwPowerCount > 0)
        {
            return TRUE;
        }

    如果想一次性关闭就可以用这个函数
    upmu_ldo_enable(powerId, KAL_FALSE); 
    如果有其他模块在使用这个LDO。你关闭可能会引起问题的哦。
    这就是LDO控制的主要方法了。 
    
    

    
    
    
    
    
    
    
  • 相关阅读:
    taotao-manager/taotao-manager-interface/pom.xml
    taotao-manager/taotao-manager-pojo/pom.xml
    taotao-manager/pom.xml
    taotao-manager/taotao-manager-dao/pom.xml
    taotao-common/pom.xml
    taotao-parent/pom.xml(父工程的pom.xml文件配置)
    idea社区版使用maven运行web项目
    IntelliJ IDEA Community社区版集成Tomcat教程
    linux中没有tree命令,command not found,解决办法
    数据导入导出
  • 原文地址:https://www.cnblogs.com/yuzaipiaofei/p/4124216.html
Copyright © 2011-2022 走看看