⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pmic_regulator.cpp

📁 i.mx27 soc for wince 6.0
💻 CPP
📖 第 1 页 / 共 5 页
字号:
}

//------------------------------------------------------------------------------
//
// Function: PmicVoltageRegulatorGetVoltageLevel
//
// This function is to get the current voltage settings of the regulator.
//
// Parameters:
//          regulator [in]           which voltage regulator to get from
//          voltage [out]           get voltage value 
// 
// Returns:
//          status 
//                  PMIC_SUCCESS for success and PMIC_ERROR for failure
//
//------------------------------------------------------------------------------
PMIC_STATUS PmicVoltageRegulatorGetVoltageLevel (
                                             PMIC_REGULATOR_VREG regulator, 
                                             PMIC_REGULATOR_VREG_VOLTAGE* voltage)
{
    UINT32 addr, temp = 0;
       
    DEBUGMSG(ZONE_FUNC, (TEXT("+%s()\r\n"), __WFUNCTION__));

    if (voltage == NULL)
    {
        DEBUGMSG(ZONE_ERROR, (_T("PmicVoltageRegulatorGetVoltageLevel:Invalid Parameter\r\n")));
        return PMIC_PARAMETER_ERROR;
    }

    if (regulator < V_VIB)
        addr = MC13783_REG_SET0_ADDR;
    else
        addr = MC13783_REG_SET1_ADDR;

    if(!DeviceIoControl(hPMI, PMIC_IOCTL_LLA_READ_REG, &addr, sizeof(addr),
              &temp, sizeof(temp), NULL, NULL))
        return PMIC_ERROR;
    
    switch (regulator) 
    {
        case VIOHI:
            // VIOHI is fixed to 2.775v output.
             voltage->viohi = VIOHI_2_775;
            break;

        case VIOLO:
             voltage->violo = (MC13783_REGULATOR_VREG_VOLTAGE_VIOLO)CSP_BITFEXT(temp, MC13783_REG_SET0_VIOLO);
            break;
             
        case VDIG:
             voltage->vdig = (MC13783_REGULATOR_VREG_VOLTAGE_VDIG)CSP_BITFEXT(temp, MC13783_REG_SET0_VDIG);
            break;
             
        case VGEN:
             voltage->vgen = (MC13783_REGULATOR_VREG_VOLTAGE_VGEN)CSP_BITFEXT(temp, MC13783_REG_SET0_VGEN);
            break;
             
        case VRFDIG:
             voltage->vrfdig = (MC13783_REGULATOR_VREG_VOLTAGE_VRFDIG)CSP_BITFEXT(temp, MC13783_REG_SET0_VRFDIG);
            break;
             
        case VRFREF:
             voltage->vrfref = (MC13783_REGULATOR_VREG_VOLTAGE_VRFREF)CSP_BITFEXT(temp, MC13783_REG_SET0_VRFREF);
            break;
             
        case VRFCP:
            voltage->vrfcp = (MC13783_REGULATOR_VREG_VOLTAGE_VRFCP)CSP_BITFEXT(temp, MC13783_REG_SET0_VRFCP);
            break;

        case VSIM:
            voltage->vsim = (MC13783_REGULATOR_VREG_VOLTAGE_SIM)CSP_BITFEXT(temp, MC13783_REG_SET0_VSIM);
            break;
             
        case VESIM:
            voltage->vesim = (MC13783_REGULATOR_VREG_VOLTAGE_ESIM)CSP_BITFEXT(temp, MC13783_REG_SET0_VESIM);
            break;
             
        case VCAM:
            voltage->vcam = (MC13783_REGULATOR_VREG_VOLTAGE_CAM)CSP_BITFEXT(temp, MC13783_REG_SET0_VCAM);
             break;

        case V_VIB:
            voltage->v_vib = (MC13783_REGULATOR_VREG_VOLTAGE_VIB)CSP_BITFEXT(temp, MC13783_REG_SET1_VVIB);
             break;

        case VRF1:
            voltage->vrf = (MC13783_REGULATOR_VREG_VOLTAGE_VRF)CSP_BITFEXT(temp, MC13783_REG_SET1_VRF1);
             break;
             
        case VRF2:
            voltage->vrf =(MC13783_REGULATOR_VREG_VOLTAGE_VRF)CSP_BITFEXT(temp, MC13783_REG_SET1_VRF2);
             break;
             
        case VMMC1:
            voltage->vmmc = (MC13783_REGULATOR_VREG_VOLTAGE_MMC)CSP_BITFEXT(temp, MC13783_REG_SET1_VMMC1);
             break;
             
        case VMMC2:
            voltage->vmmc = (MC13783_REGULATOR_VREG_VOLTAGE_MMC)CSP_BITFEXT(temp, MC13783_REG_SET1_VMMC2);
             break;

		default:
			return PMIC_PARAMETER_ERROR;
    }

    DEBUGMSG(ZONE_FUNC, (TEXT("-%s()\r\n"), __WFUNCTION__));

    return PMIC_SUCCESS;
}

//------------------------------------------------------------------------------
//
// Function: PmicVolatageRegulatorSetPowerMode
//
// This function is used to set low power mode for the regulator and whether to enter 
// low power mode during STANDBY assertion or not. 
//
// VxMODE=1, Set Low Power no matter of VxSTBY and STANDBY pin
// VxMODE=0, VxSTBY=1, Low Power Mode is contorled by STANDBY pin
// VxMODE=0, VxSTBY=0, Low Power Mode is disabled
//
// Parameters:
//          regulator [in]                which voltage regulator to be set
//          powerMode[in]              the power mode to be set
// 
// Returns:
//          status 
//                  PMIC_SUCCESS for success and PMIC_ERROR for failure
//
//------------------------------------------------------------------------------
PMIC_STATUS PmicVoltageRegulatorSetPowerMode ( 
                                                            PMIC_REGULATOR_VREG regulator, 
                                                            PMIC_REGULATOR_VREG_POWER_MODE powerMode) 
{
    PMIC_PARAM_LLA_WRITE_REG param;
    
    DEBUGMSG(ZONE_FUNC, (TEXT("+%s()\r\n"), __WFUNCTION__));

    switch (regulator)
    {
        case VIOHI:
            switch(powerMode) {
                case LOW_POWER_DISABLED:
                    param.addr = MC13783_REG_MOD0_ADDR;
                    param.data = CSP_BITFVAL(MC13783_REG_MODE0_VIOHIMODE, 0) |
                                         CSP_BITFVAL(MC13783_REG_MODE0_VIOHISTBY, 0);
                    param.mask = CSP_BITFMASK(MC13783_REG_MODE0_VIOHIMODE) |
                                           CSP_BITFMASK(MC13783_REG_MODE0_VIOHISTBY);
                    break;
                    
                case LOW_POWER_CTRL_BY_PIN:
                    param.addr = MC13783_REG_MOD0_ADDR;
                    param.data = CSP_BITFVAL(MC13783_REG_MODE0_VIOHIMODE, 0) |
                                         CSP_BITFVAL(MC13783_REG_MODE0_VIOHISTBY, 1);
                    param.mask = CSP_BITFMASK(MC13783_REG_MODE0_VIOHIMODE) |
                                           CSP_BITFMASK(MC13783_REG_MODE0_VIOHISTBY);
                    break;

                case LOW_POWER:
                    param.addr = MC13783_REG_MOD0_ADDR;
                    param.data = CSP_BITFVAL(MC13783_REG_MODE0_VIOHIMODE, 1);
                    param.mask = CSP_BITFMASK(MC13783_REG_MODE0_VIOHIMODE);
                    break;
            }
            break;
            
        case VIOLO:
            switch(powerMode) {
                case LOW_POWER_DISABLED:
                    param.addr = MC13783_REG_MOD0_ADDR;
                    param.data = CSP_BITFVAL(MC13783_REG_MODE0_VIOLOMODE, 0) |
                                         CSP_BITFVAL(MC13783_REG_MODE0_VIOLOSTBY, 0);
                    param.mask = CSP_BITFMASK(MC13783_REG_MODE0_VIOLOMODE) |
                                           CSP_BITFMASK(MC13783_REG_MODE0_VIOLOSTBY);
                    break;
                    
                case LOW_POWER_CTRL_BY_PIN:
                    param.addr = MC13783_REG_MOD0_ADDR;
                    param.data = CSP_BITFVAL(MC13783_REG_MODE0_VIOLOMODE, 0) |
                                         CSP_BITFVAL(MC13783_REG_MODE0_VIOLOSTBY, 1);
                    param.mask = CSP_BITFMASK(MC13783_REG_MODE0_VIOLOMODE) |
                                           CSP_BITFMASK(MC13783_REG_MODE0_VIOLOSTBY);
                    break;

                case LOW_POWER:
                    param.addr = MC13783_REG_MOD0_ADDR;
                    param.data = CSP_BITFVAL(MC13783_REG_MODE0_VIOLOMODE, 1);
                    param.mask = CSP_BITFMASK(MC13783_REG_MODE0_VIOLOMODE);
                    break;
            }
            break;

        case VDIG:
            switch(powerMode) {
                case LOW_POWER_DISABLED:
                    param.addr = MC13783_REG_MOD0_ADDR;
                    param.data = CSP_BITFVAL(MC13783_REG_MODE0_VDIGMODE, 0) |
                                         CSP_BITFVAL(MC13783_REG_MODE0_VDIGSTBY, 0);
                    param.mask = CSP_BITFMASK(MC13783_REG_MODE0_VDIGMODE) |
                                           CSP_BITFMASK(MC13783_REG_MODE0_VDIGSTBY);
                    break;
                    
                case LOW_POWER_CTRL_BY_PIN:
                    param.addr = MC13783_REG_MOD0_ADDR;
                    param.data = CSP_BITFVAL(MC13783_REG_MODE0_VDIGMODE, 0) |
                                         CSP_BITFVAL(MC13783_REG_MODE0_VDIGSTBY, 1);
                    param.mask = CSP_BITFMASK(MC13783_REG_MODE0_VDIGMODE) |
                                           CSP_BITFMASK(MC13783_REG_MODE0_VDIGSTBY);
                    break;

                case LOW_POWER:
                    param.addr = MC13783_REG_MOD0_ADDR;
                    param.data = CSP_BITFVAL(MC13783_REG_MODE0_VDIGMODE, 1);
                    param.mask = CSP_BITFMASK(MC13783_REG_MODE0_VDIGMODE);
                    break;
            }
            break;   

        case VGEN:
            switch(powerMode) {
                case LOW_POWER_DISABLED:
                    param.addr = MC13783_REG_MOD0_ADDR;
                    param.data = CSP_BITFVAL(MC13783_REG_MODE0_VGENMODE, 0) |
                                         CSP_BITFVAL(MC13783_REG_MODE0_VGENSTBY, 0);
                    param.mask = CSP_BITFMASK(MC13783_REG_MODE0_VGENMODE) |
                                           CSP_BITFMASK(MC13783_REG_MODE0_VGENSTBY);
                    break;
                    
                case LOW_POWER_CTRL_BY_PIN:
                    param.addr = MC13783_REG_MOD0_ADDR;
                    param.data = CSP_BITFVAL(MC13783_REG_MODE0_VGENMODE, 0) |
                                         CSP_BITFVAL(MC13783_REG_MODE0_VGENSTBY, 1);
                    param.mask = CSP_BITFMASK(MC13783_REG_MODE0_VGENMODE) |
                                           CSP_BITFMASK(MC13783_REG_MODE0_VGENSTBY);
                    break;

                case LOW_POWER:
                    param.addr = MC13783_REG_MOD0_ADDR;
                    param.data = CSP_BITFVAL(MC13783_REG_MODE0_VGENMODE, 1);
                    param.mask = CSP_BITFMASK(MC13783_REG_MODE0_VGENMODE);
                    break;
            }
            break;   
             
        case VRFDIG:
            switch(powerMode) {
                case LOW_POWER_DISABLED:
                    param.addr = MC13783_REG_MOD0_ADDR;
                    param.data = CSP_BITFVAL(MC13783_REG_MODE0_VRFDIGMODE, 0) |
                                         CSP_BITFVAL(MC13783_REG_MODE0_VRFDIGSTBY, 0);
                    param.mask = CSP_BITFMASK(MC13783_REG_MODE0_VRFDIGMODE) |
                                           CSP_BITFMASK(MC13783_REG_MODE0_VRFDIGSTBY);
                    break;
                    
                case LOW_POWER_CTRL_BY_PIN:
                    param.addr = MC13783_REG_MOD0_ADDR;
                    param.data = CSP_BITFVAL(MC13783_REG_MODE0_VRFDIGMODE, 0) |
                                         CSP_BITFVAL(MC13783_REG_MODE0_VRFDIGSTBY, 1);
                    param.mask = CSP_BITFMASK(MC13783_REG_MODE0_VRFDIGMODE) |
                                           CSP_BITFMASK(MC13783_REG_MODE0_VRFDIGSTBY);
                    break;

                case LOW_POWER:
                    param.addr = MC13783_REG_MOD0_ADDR;
                    param.data = CSP_BITFVAL(MC13783_REG_MODE0_VRFDIGMODE, 1);
                    param.mask = CSP_BITFMASK(MC13783_REG_MODE0_VRFDIGMODE);
                    break;
            }
            break;   
         
        case VRFREF:
            switch(powerMode) {
                case LOW_POWER_DISABLED:
                    param.addr = MC13783_REG_MOD0_ADDR;
                    param.data = CSP_BITFVAL(MC13783_REG_MODE0_VRFREFMODE, 0) |
                                         CSP_BITFVAL(MC13783_REG_MODE0_VRFREFSTBY, 0);
                    param.mask = CSP_BITFMASK(MC13783_REG_MODE0_VRFREFMODE) |
                                           CSP_BITFMASK(MC13783_REG_MODE0_VRFREFSTBY);
                    break;
                    
                case LOW_POWER_CTRL_BY_PIN:
                    param.addr = MC13783_REG_MOD0_ADDR;
                    param.data = CSP_BITFVAL(MC13783_REG_MODE0_VRFREFMODE, 0) |
                                         CSP_BITFVAL(MC13783_REG_MODE0_VRFREFSTBY, 1);
                    param.mask = CSP_BITFMASK(MC13783_REG_MODE0_VRFREFMODE) |
                                           CSP_BITFMASK(MC13783_REG_MODE0_VRFREFSTBY);
                    break;

                case LOW_POWER:
                    param.addr = MC13783_REG_MOD0_ADDR;
                    param.data = CSP_BITFVAL(MC13783_REG_MODE0_VRFREFMODE, 1);
                    param.mask = CSP_BITFMASK(MC13783_REG_MODE0_VRFREFMODE);
                    break;
            }
            break;   
             
        case VRFCP:
            switch(powerMode) {
                case LOW_POWER_DISABLED:
                    param.addr = MC13783_REG_MOD0_ADDR;
                    param.data = CSP_BITFVAL(MC13783_REG_MODE0_VRFCPMODE, 0) |
                                         CSP_BITFVAL(MC13783_REG_MODE0_VRFCPSTBY, 0);
                    param.mask = CSP_BITFMASK(MC13783_REG_MODE0_VRFCPMODE) |
                                           CSP_BITFMASK(MC13783_REG_MODE0_VRFCPSTBY);
                    break;
                    
                case LOW_POWER_CTRL_BY_PIN:
                    param.addr = MC13783_REG_MOD0_ADDR;
                    param.data = CSP_BITFVAL(MC13783_REG_MODE0_VRFCPMODE, 0) |
                                         CSP_BITFVAL(MC13783_REG_MODE0_VRFCPSTBY, 1);
                    param.mask = CSP_BITFMASK(MC13783_REG_MODE0_VRFCPMODE) |
                                           CSP_BITFMASK(MC13783_REG_MODE0_VRFCPSTBY);
                    break;

                case LOW_POWER:
                    param.addr = MC13783_REG_MOD0_ADDR;
                    param.data = CSP_BITFVAL(MC13783_REG_MODE0_VRFCPMODE, 1);
                    param.mask = CSP_BITFMASK(MC13783_REG_MODE0_VRFCPMODE);
                    break;
            }
            break;   

        case VSIM:
            switch(powerMode) {
                case LOW_POWER_DISABLED:
                    param.addr = MC13783_REG_MOD1_ADDR;
                    param.data = CSP_BITFVAL(MC13783_REG_MODE1_VSIMMODE, 0) |
                                         CSP_BITFVAL(MC13783_REG_MODE1_VSIMSTBY, 0);
                    param.mask = CSP_BITFMASK(MC13783_REG_MODE1_VSIMMODE) |
                                           CSP_BITFMASK(MC13783_REG_MODE1_VSIMSTBY);
                    break;
                    
                case LOW_POWER_CTRL_BY_PIN:
                    param.addr = MC13783_REG_MOD1_ADDR;
                    param.data = CSP_BITFVAL(MC13783_REG_MODE1_VSIMMODE, 0) |
                                         CSP_BITFVAL(MC13783_REG_MODE1_VSIMSTBY, 1);
                    param.mask = CSP_BITFMASK(MC13783_REG_MODE1_VSIMMODE) |
                                           CSP_BITFMASK(MC13783_REG_MODE1_VSIMSTBY);
                    break;

                case LOW_POWER:
                    param.addr = MC13783_REG_MOD1_ADDR;
 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -