📄 pmicpdk.cpp
字号:
data1 = CSP_BITFVAL(MC13783_CHG_USB1_VUSBEN, MC13783_CHG_USB1_OP_ENABLE) |
CSP_BITFVAL(MC13783_CHG_USB1_VUSB, inParam->PARAMS.USB_PWR.pwrout) |
CSP_BITFVAL(MC13783_CHG_USB1_VUSBIN, inParam->PARAMS.USB_PWR.pwrin);
SetRegister(addr1, data1, mask1);
*result = PMIC_SUCCESS;
rc = TRUE;
return rc;
}
//------------------------------------------------------------------------------
//
// Function: PmicIoctlConvityUsbSetXcvrHandler
//
// This function does the Transceiver specific setting in USB mode for
// connectivity interface.
//
// Parameters:
// inParam
// [in] PMIC_PARAM_CONVITY_OP contains op code and specific information
//
// result
// [out] PMIC_STATUS
//
// Returns:
// TRUE if the successful, FALSE otherwise.
//
//------------------------------------------------------------------------------
static BOOL PmicIoctlConvityUsbSetXcvrHandler(PMIC_PARAM_CONVITY_OP *inParam,
PMIC_STATUS *result)
{
UINT32 addr0 = MC13783_USB0_ADDR, data0 = 0, mask0 = 0;
UINT32 addr1 = MC13783_CHG_USB1_ADDR, data1 = 0, mask1 = 0;
BOOL rc = FALSE;
*result = PMIC_ERROR;
switch (inParam->PARAMS.usbXcvrMode)
{
case USB_TRANSCEIVER_OFF:
mask0 |= CSP_BITFMASK(MC13783_USB0_USBXCVREN);
data0 |= CSP_BITFVAL(MC13783_USB0_USBXCVREN,
MC13783_USB0_USBXCVREN_DISABLE);
// switching off VBUS charging, in case it was happening
mask1 = CSP_BITFMASK(MC13783_CHG_USB1_VBUSEN);
data1 = 0;
SetRegister(addr1, data1, mask1);
break;
case USB_SUSPEND_ON:
mask0 |= CSP_BITFMASK(MC13783_USB0_USBSUSPEND);
data0 |= CSP_BITFVAL(MC13783_USB0_USBSUSPEND,
MC13783_USB0_USBSUSPEND_ON);
break;
case USB_SUSPEND_OFF:
mask0 |= CSP_BITFMASK(MC13783_USB0_USBSUSPEND);
data0 |= CSP_BITFVAL(MC13783_USB0_USBSUSPEND,
MC13783_USB0_USBSUSPEND_OFF);
break;
case USB_OTG_SRP_DLP_START:
// note: this is "manual" DLP
mask0 |= CSP_BITFMASK(MC13783_USB0_USBPU);
data0 |= CSP_BITFVAL(MC13783_USB0_USBPU, MC13783_USB_PDPU_SWITCHED_IN);
break;
case USB_OTG_SRP_DLP_STOP:
mask0 |= CSP_BITFMASK(MC13783_USB0_USBPU);
data0 |= CSP_BITFVAL(MC13783_USB0_USBPU, MC13783_USB_PDPU_SWITCHED_OUT);
break;
case USB_SINGLE_ENDED_UNIDIR_TX:
case USB_SINGLE_ENDED_UNIDIR_RX:
mask0 |= CSP_BITFMASK(MC13783_USB0_DATSE0) |
CSP_BITFMASK(MC13783_USB0_BIDIR);
data0 |= CSP_BITFVAL(MC13783_USB0_DATSE0, MC13783_USB0_DATSE0_SE) |
CSP_BITFVAL(MC13783_USB0_BIDIR, MC13783_USB0_BIDIR_UNIDIR);
break;
case USB_SINGLE_ENDED_BIDIR_TX:
case USB_SINGLE_ENDED_BIDIR_RX:
mask0 |= CSP_BITFMASK(MC13783_USB0_DATSE0) |
CSP_BITFMASK(MC13783_USB0_BIDIR);
data0 |= CSP_BITFVAL(MC13783_USB0_DATSE0, MC13783_USB0_DATSE0_SE) |
CSP_BITFVAL(MC13783_USB0_BIDIR, MC13783_USB0_BIDIR_BIDIR);
break;
case USB_DIFFERENTIAL_UNIDIR_TX:
case USB_DIFFERENTIAL_UNIDIR_RX:
mask0 |= CSP_BITFMASK(MC13783_USB0_DATSE0) |
CSP_BITFMASK(MC13783_USB0_BIDIR);
data0 |= CSP_BITFVAL(MC13783_USB0_DATSE0, MC13783_USB0_DATSE0_DIFF) |
CSP_BITFVAL(MC13783_USB0_BIDIR, MC13783_USB0_BIDIR_UNIDIR);
break;
case USB_DIFFERENTIAL_BIDIR_TX:
case USB_DIFFERENTIAL_BIDIR_RX:
mask0 |= CSP_BITFMASK(MC13783_USB0_DATSE0) |
CSP_BITFMASK(MC13783_USB0_BIDIR);
data0 |= CSP_BITFVAL(MC13783_USB0_DATSE0, MC13783_USB0_DATSE0_DIFF) |
CSP_BITFVAL(MC13783_USB0_BIDIR, MC13783_USB0_BIDIR_BIDIR);
break;
case USB_SINGLE_ENDED_LOW:
// With MC13783, the se0 can be controlled by the processor, not
// by the PMIC. Hence NO-OP.
break;
default:
*result = PMIC_ERROR;
rc = FALSE;
return rc;
}
SetRegister(addr0, data0, mask0);
*result = PMIC_SUCCESS;
rc = TRUE;
return rc;
}
//------------------------------------------------------------------------------
//
// Function: PmicIoctlConvityUsbOtgBeginHnpHandler
//
// This function does the settings for beginning the HNP protocol in USB mode
// for connectivity interface.
//
// Parameters:
// inParam
// [in] PMIC_PARAM_CONVITY_OP contains op code and specific information
//
// result
// [out] PMIC_STATUS
//
// Returns:
// TRUE if the successful, FALSE otherwise.
//
//------------------------------------------------------------------------------
static BOOL PmicIoctlConvityUsbOtgBeginHnpHandler(PMIC_PARAM_CONVITY_OP *inParam,
PMIC_STATUS *result)
{
UINT32 addr0 = MC13783_USB0_ADDR, data0 = 0, mask0 = 0;
UINT32 addr1 = MC13783_CHG_USB1_ADDR, data1 = 0, mask1 = 0;
BOOL rc = FALSE;
*result = PMIC_ERROR;
mask0 = CSP_BITFMASK(MC13783_USB0_USBPU) |
CSP_BITFMASK(MC13783_USB0_UDPPD) |
CSP_BITFMASK(MC13783_USB0_UDMPD);
if (inParam->PARAMS.usbOtgType == USB_A_DEVICE)
{
// enable pull up on D+ (ensure it is D+, not D-)
mask0 |= CSP_BITFMASK(MC13783_USB0_FSENB);
data0 = CSP_BITFVAL(MC13783_USB0_USBPU, MC13783_USB_PDPU_SWITCHED_IN);
}
else if (inParam->PARAMS.usbOtgType == USB_B_DEVICE)
{
data0 = 0;
}
SetRegister(addr0, data0, mask0);
*result = PMIC_SUCCESS;
rc = TRUE;
return rc;
}
//------------------------------------------------------------------------------
//
// Function: PmicIoctlConvityUsbOtgEndHnpHandler
//
// This function does the settings for ending the HNP protocol in USB mode
// for connectivity interface.
//
// Parameters:
// inParam
// [in] PMIC_PARAM_CONVITY_OP contains op code and specific information
//
// result
// [out] PMIC_STATUS
//
// Returns:
// TRUE if the successful, FALSE otherwise.
//
//------------------------------------------------------------------------------
static BOOL PmicIoctlConvityUsbOtgEndHnpHandler(PMIC_PARAM_CONVITY_OP *inParam,
PMIC_STATUS *result)
{
UINT32 addr0 = MC13783_USB0_ADDR, data0 = 0, mask0 = 0;
UINT32 addr1 = MC13783_CHG_USB1_ADDR, data1 = 0, mask1 = 0;
BOOL rc = FALSE;
*result = PMIC_ERROR;
mask0 = CSP_BITFMASK(MC13783_USB0_USBPU);
if (inParam->PARAMS.usbOtgType == USB_A_DEVICE)
data0 = 0;
else if (inParam->PARAMS.usbOtgType == USB_B_DEVICE)
{
// enable pull up on D+ (ensure it is D+, not D-)
mask0 |= CSP_BITFMASK(MC13783_USB0_FSENB);
data0 = CSP_BITFVAL(MC13783_USB0_USBPU, MC13783_USB_PDPU_SWITCHED_IN);
}
SetRegister(addr0, data0, mask0);
*result = PMIC_SUCCESS;
rc = TRUE;
return rc;
}
//------------------------------------------------------------------------------
//
// Function: PmicIoctlConvityUsbOtgSetConfigHandler
//
// This function does the settings for USB OTG in USB mode
// for connectivity interface.
//
// Parameters:
// inParam
// [in] PMIC_PARAM_CONVITY_OP contains op code and specific information
//
// result
// [out] PMIC_STATUS
//
// Returns:
// TRUE if the successful, FALSE otherwise.
//
//------------------------------------------------------------------------------
static BOOL PmicIoctlConvityUsbOtgSetConfigHandler(PMIC_PARAM_CONVITY_OP *inParam,
PMIC_STATUS *result)
{
UINT32 addr0 = MC13783_USB0_ADDR, data0 = 0, mask0 = 0;
UINT32 addr1 = MC13783_CHG_USB1_ADDR, data1 = 0, mask1 = 0;
BOOL rc = FALSE;
*result = PMIC_ERROR;
if (inParam->PARAMS.usbOtgCfg & USB_OTG_SE0CONN)
{
data0 |= CSP_BITFMASK(MC13783_USB0_SE0CONN);
mask0 |= CSP_BITFVAL(MC13783_USB0_SE0CONN,
MC13783_USB0_SE0CONN_AUTOCON_ENABLE);
}
if (inParam->PARAMS.usbOtgCfg & USB_OTG_DLP_SRP)
{
data0 |= CSP_BITFMASK(MC13783_USB0_DLPSRP);
mask0 |= CSP_BITFVAL(MC13783_USB0_DLPSRP, MC13783_USB0_DLPSRP_TRIGGER);
}
if (inParam->PARAMS.usbOtgCfg & USB_PULL_OVERRIDE)
{
data0 |= CSP_BITFMASK(MC13783_USB0_PULLOVR);
mask0 |= CSP_BITFVAL(MC13783_USB0_PULLOVR, MC13783_USB0_PULLOVR_ENABLE);
}
if (inParam->PARAMS.usbOtgCfg & USB_VBUS_CURRENT_LIMIT_HIGH)
{
data0 |= CSP_BITFMASK(MC13783_USB0_VBUSPULSETMR);
mask0 |= CSP_BITFVAL(MC13783_USB0_VBUSPULSETMR,
MC13783_USB0_VBUSPULSETMR_200MA);
}
else if (inParam->PARAMS.usbOtgCfg & USB_VBUS_CURRENT_LIMIT_LOW)
{
data0 |= CSP_BITFMASK(MC13783_USB0_VBUSPULSETMR);
mask0 |= CSP_BITFVAL(MC13783_USB0_VBUSPULSETMR,
MC13783_USB0_VBUSPULSETMR_910UA);
}
else if (inParam->PARAMS.usbOtgCfg & USB_VBUS_CURRENT_LIMIT_LOW_10MS)
{
data0 |= CSP_BITFMASK(MC13783_USB0_VBUSPULSETMR);
mask0 |= CSP_BITFVAL(MC13783_USB0_VBUSPULSETMR,
MC13783_USB0_VBUSPULSETMR_910UA_10MS);
}
else if (inParam->PARAMS.usbOtgCfg & USB_VBUS_CURRENT_LIMIT_LOW_20MS)
{
data0 |= CSP_BITFMASK(MC13783_USB0_VBUSPULSETMR);
mask0 |= CSP_BITFVAL(MC13783_USB0_VBUSPULSETMR,
MC13783_USB0_VBUSPULSETMR_910UA_20MS);
}
else if (inParam->PARAMS.usbOtgCfg & USB_VBUS_CURRENT_LIMIT_LOW_30MS)
{
data0 |= CSP_BITFMASK(MC13783_USB0_VBUSPULSETMR);
mask0 |= CSP_BITFVAL(MC13783_USB0_VBUSPULSETMR,
MC13783_USB0_VBUSPULSETMR_910UA_30MS);
}
else if (inParam->PARAMS.usbOtgCfg & USB_VBUS_CURRENT_LIMIT_LOW_40MS)
{
data0 |= CSP_BITFMASK(MC13783_USB0_VBUSPULSETMR);
mask0 |= CSP_BITFVAL(MC13783_USB0_VBUSPULSETMR,
MC13783_USB0_VBUSPULSETMR_910UA_40MS);
}
else if (inParam->PARAMS.usbOtgCfg & USB_VBUS_CURRENT_LIMIT_LOW_50MS)
{
data0 |= CSP_BITFMASK(MC13783_USB0_VBUSPULSETMR);
mask0 |= CSP_BITFVAL(MC13783_USB0_VBUSPULSETMR,
MC13783_USB0_VBUSPULSETMR_910UA_50MS);
}
else if (inParam->PARAMS.usbOtgCfg & USB_VBUS_CURRENT_LIMIT_LOW_60MS)
{
data0 |= CSP_BITFMASK(MC13783_USB0_VBUSPULSETMR);
mask0 |= CSP_BITFVAL(MC13783_USB0_VBUSPULSETMR,
MC13783_USB0_VBUSPULSETMR_910UA_60MS);
}
if (inParam->PARAMS.usbOtgCfg & USB_VBUS_PULLDOWN)
{
data0 |= CSP_BITFMASK(MC13783_USB0_VBUS70KPDENB);
mask0 |= CSP_BITFVAL(MC13783_USB0_VBUS70KPDENB,
MC13783_USB0_VBUS70KPDENB_ENABLE);
}
SetRegister(addr0, data0, mask0);
*result = PMIC_SUCCESS;
rc = TRUE;
return rc;
}
//------------------------------------------------------------------------------
//
// Function: PmicIoctlConvityUsbOtgClearConfigHandler
//
// This function clears the settings for USB OTG in USB mode
// for connectivity interface.
//
// Parameters:
// inParam
// [in] PMIC_PARAM_CONVITY_OP contains op code and specific information
//
// result
// [out] PMIC_STATUS
//
// Returns:
// TRUE if the successful, FALSE otherwise.
//
//------------------------------------------------------------------------------
static BOOL PmicIoctlConvityUsbOtgClearConfigHandler(PMIC_PARAM_CONVITY_OP *inParam,
PMIC_STATUS *result)
{
UINT32 addr0 = MC13783_USB0_ADDR, data0 = 0, mask0 = 0;
UINT32 addr1 = MC13783_CHG_USB1_ADDR, data1 = 0, mask1 = 0;
BOOL rc = FALSE;
*result = PMIC_ERROR;
if (inParam->PARAMS.usbOtgCfg & USB_OTG_SE0CONN)
{
data0 |= CSP_BITFMASK(MC13783_USB0_SE0CONN);
mask0 |= CSP_BITFVAL(MC13783_USB0_SE0CONN,
MC13783_USB0_SE0CONN_AUTOCON_DISABLE);
}
if (inParam->PARAMS.usbOtgCfg & USB_PULL_OVERRIDE)
{
data0 |= CSP_BITFMASK(MC13783_USB0_PULLOVR);
mask0 |= CSP_BITFVAL(MC13783_USB0_PULLOVR,
MC13783_USB0_PULLOVR_DISABLE);
}
if (inParam->PARAMS.usbOtgCfg & USB_VBUS_PULLDOWN)
{
data0 |= CSP_BITFMASK(MC13783_USB0_VBUS70KPDENB);
mask0 |= CSP_BITFVAL(MC13783_USB0_VBUS70KPDENB,
MC13783_USB0_VBUS70KPDENB_DISABLE);
}
SetRegister(addr0, data0, mask0);
*result = PMIC_SUCCESS;
rc = TRUE;
return rc;
}
//------------------------------------------------------------------------------
//
// Function: PmicADCGetSettings
//
// This function gets the adc configuration information.
//
// Parameters:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -