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

📄 pmicpdk.cpp

📁 i.mx27 soc for wince 6.0
💻 CPP
📖 第 1 页 / 共 5 页
字号:
    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 + -