📄 pmic_regulator.cpp
字号:
}
//------------------------------------------------------------------------------
//
// 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 + -