📄 emu_utilities.c
字号:
/*================================================================================================== Module Name: emu_utilities.c General Description: This file provides utility function needed by the EMU common algorithm.==================================================================================================== Motorola Confidential Proprietary Template ID and version: IL93-TMP-01-0106 Version 1.20 (c) Copyright Motorola 2006, All Rights Reserved Revision History: Modification TrackingAuthor (core ID) Date Number Description of Changes------------------------- ------------ ---------- -------------------------------------------Jason Knopsnyder - w19069 05-Sep-2006 LIBjj66952 Use BOOST instead of BPLUS to power VUSBJason Knopsnyder - w19069 05-Apr-2006 LIBii35566 -Fix PPD audio xcvr state -Set 1.5K pullup when FSENB is set -Fix compiler warningsJason Knopsnyder - w19069 15-Feb-2006 LIBhh92145 Initial creationPortability: This module should is and shall be kept portable across all Motorola compilers and platforms.==================================================================================================== INCLUDE FILES==================================================================================================*/ #include "../../ghdr/emu_glue_api.h"#include "../hdr/emu_algorithm.h"/*================================================================================================== LOCAL TYPEDEFS (STRUCTURES, UNIONS, ENUMS)==================================================================================================*//*================================================================================================== LOCAL FUNCTION PROTOTYPES==================================================================================================*//*================================================================================================== LOCAL CONSTANTS==================================================================================================*//* Voltage supplied to the USB transceiver in mV */#define EMU_VUSB_OUT_3_3V 3300 #define EMU_VUSB_OUT_2_775V 2775/*================================================================================================== LOCAL MACROS==================================================================================================*//*================================================================================================== LOCAL VARIABLES==================================================================================================*//*================================================================================================== GLOBAL VARIABLES==================================================================================================*//*================================================================================================== LOCAL FUNCTIONS==================================================================================================*//*================================================================================================== GLOBAL FUNCTIONS==================================================================================================*//*==================================================================================================FUNCTION: emu_set_transceiver_state DESCRIPTION: Title This function is used to configure the transceiver, which includes setting the state of USB suspend bit, enabling/disabling the transceiver, setting the VUSB input source, setting the VUSB output voltage and setting the state of the VUSB regulatorARGUMENTS PASSED: state - The desired transceiver state RETURN VALUE: NonePRE-CONDITIONS: NonePOST-CONDITIONS: NoneIMPORTANT NOTES: NOTE: BPLUS is not guaranteed to be available on all platforms so VINBUS must be used instead. ==================================================================================================*/voidemu_set_transceiver_state(EMU_XCVR_STATE_T state){ static const struct { unsigned long usb_suspend : 1; unsigned long xcvr_enable : 1; unsigned long vusb_enable : 1; unsigned long vusb_input_source : 2; unsigned long vusb_voltage : 12; } transceiver_config_table[EMU_XCVR_STATE__NUM] = { /*Transeiver State USBS XEN VUEN VUSB INPUT SOURCE VUSB VOLTAGE */ /*EMU_XCVR_STATE_OFF */ {1, 0, 1, EMU_VUSB_IN_VINBUS, EMU_VUSB_OUT_3_3V}, /*EMU_XCVR_STATE_PPD_IDENTIFY*/ {1, 0, 1, EMU_VUSB_IN_VINBUS, EMU_VUSB_OUT_3_3V}, /*EMU_XCVR_STATE_SPD_IDENTIFY*/ {1, 0, 1, EMU_VUSB_IN_VBUS, EMU_VUSB_OUT_3_3V}, /*EMU_XCVR_STATE_PPD */ {1, 0, 1, EMU_VUSB_IN_VINBUS, EMU_VUSB_OUT_3_3V}, /*EMU_XCVR_STATE_PPD_AUDIO */ {1, 1, 1, EMU_VUSB_IN_VINBUS, EMU_VUSB_OUT_3_3V}, /*EMU_XCVR_STATE_SPD */ {1, 0, 1, EMU_VUSB_IN_VBUS, EMU_VUSB_OUT_3_3V}, /*EMU_XCVR_STATE_SPD_AUDIO */ {1, 0, 1, EMU_VUSB_IN_VBUS, EMU_VUSB_OUT_3_3V}, /*EMU_XCVR_STATE_USB_HOST */ {0, 1, 1, EMU_VUSB_IN_VINBUS, EMU_VUSB_OUT_3_3V}, /*EMU_XCVR_STATE_FACTORY_MODE*/ {0, 1, 1, EMU_VUSB_IN_VINBUS, EMU_VUSB_OUT_3_3V}, }; if (state >= EMU_XCVR_STATE__NUM) { state = EMU_XCVR_STATE_OFF; } /* Set the USB suspend bit */ EMU_GLUE_set_usb_suspend(transceiver_config_table[state].usb_suspend); EMU_GLUE_set_transceiver_params(transceiver_config_table[state].xcvr_enable, transceiver_config_table[state].vusb_enable, (EMU_VUSB_IN_T)transceiver_config_table[state].vusb_input_source, (unsigned short)transceiver_config_table[state].vusb_voltage);}/*==================================================================================================FUNCTION: emu_configure_accessory DESCRIPTION: Configures the EMU related registers in the power IC for currently connected accessory. ARGUMENTS PASSED: accessory - the currently connected accessory. RETURN VALUE: NonePRE-CONDITIONS: NonePOST-CONDITIONS: NoneIMPORTANT NOTES: None==================================================================================================*/voidemu_configure_accessory(EMU_ACCY_T accessory){ static const struct { unsigned short dplus_150k_pull_up : 1; unsigned short vbus_5k_pull_down : 1; unsigned short fsenb : 1; unsigned short transceiver_state : 4; unsigned short conn_mode : 3; } accessory_config_table[EMU_ACCY_TYPE__NUM_DEVICES] = { /*Accessory DPPU VBPD FS TRANSCEIVER STATE CONN MODE */ /*EMU_ACCY_TYPE_NONE */ {1, 1, 0, EMU_XCVR_STATE_OFF, EMU_CONN_MODE_USB }, /*EMU_ACCY_TYPE_INVALID */ {0, 1, 0, EMU_XCVR_STATE_OFF, EMU_CONN_MODE_USB }, /*EMU_ACCY_TYPE_NOT_SUPPORTED */ {0, 1, 0, EMU_XCVR_STATE_OFF, EMU_CONN_MODE_USB }, /*EMU_ACCY_TYPE_CHARGER_MID */ {0, 1, 0, EMU_XCVR_STATE_OFF, EMU_CONN_MODE_USB }, /*EMU_ACCY_TYPE_CHARGER_MID_MPX */ {0, 1, 0, EMU_XCVR_STATE_OFF, EMU_CONN_MODE_USB }, /*EMU_ACCY_TYPE_CHARGER_FAST */ {0, 1, 0, EMU_XCVR_STATE_OFF, EMU_CONN_MODE_USB }, /*EMU_ACCY_TYPE_CHARGER_FAST_MPX */ {0, 1, 0, EMU_XCVR_STATE_OFF, EMU_CONN_MODE_USB }, /*EMU_ACCY_TYPE_CARKIT_MID */ {0, 1, 0, EMU_XCVR_STATE_SPD_AUDIO, EMU_CONN_MODE_MONO_AUDIO}, /*EMU_ACCY_TYPE_CARKIT_FAST */ {0, 1, 0, EMU_XCVR_STATE_SPD_AUDIO, EMU_CONN_MODE_MONO_AUDIO}, /*EMU_ACCY_TYPE_CABLE_USB */ {0, 0, 0, EMU_XCVR_STATE_USB_HOST, EMU_CONN_MODE_USB }, /*EMU_ACCY_TYPE_CABLE_REGRESSION */ {0, 0, 0, EMU_XCVR_STATE_USB_HOST, EMU_CONN_MODE_USB }, /*EMU_ACCY_TYPE_CABLE_FACTORY */ {0, 0, 0, EMU_XCVR_STATE_FACTORY_MODE, EMU_CONN_MODE_USB }, /*EMU_ACCY_TYPE_CABLE_USB_OTG */ {0, 0, 0, EMU_XCVR_STATE_USB_HOST, EMU_CONN_MODE_USB }, /*EMU_ACCY_TYPE_HEADSET_EMU_MONO */ {0, 1, 1, EMU_XCVR_STATE_PPD_AUDIO, EMU_CONN_MODE_USB }, /*EMU_ACCY_TYPE_HEADSET_EMU_STEREO*/ {0, 1, 1, EMU_XCVR_STATE_PPD_AUDIO, EMU_CONN_MODE_USB } }; if (accessory >= EMU_ACCY_TYPE__NUM_DEVICES) { accessory = EMU_ACCY_TYPE_INVALID; } /* Set the D+ 150K pull up */ EMU_GLUE_set_dplus_150k_pull_up((unsigned long)accessory_config_table[accessory].dplus_150k_pull_up); /* Set the VBUS 5K pull down */ EMU_GLUE_set_vbus_5k_pull_down((unsigned long)accessory_config_table[accessory].vbus_5k_pull_down); /* Set the USB full speed bit so that the 1.5K pullup pulls up on the D- line */ EMU_GLUE_set_low_speed_mode((unsigned long)accessory_config_table[accessory].fsenb); /* Enable the 1.5K pullup on the D- line if FSENB has been set to 1 */ EMU_GLUE_set_dplus_1_5k_pull_up((unsigned long)accessory_config_table[accessory].fsenb);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -