/** * * This function resets the DisplayPort Transmitter Subsystem including all * sub-cores. * * @param InstancePtr is a pointer to the XDpTxSs core instance. * * @return None. * * @note None. * ******************************************************************************/ void XDpTxSs_Reset(XDpTxSs *InstancePtr) { u32 Index; /* Verify argument. */ Xil_AssertVoid(InstancePtr != NULL); /* Reset the DisplayPort. */ XDpTxSs_WriteReg(InstancePtr->Config.DpSubCore.DpConfig.BaseAddr, XDP_TX_SOFT_RESET, XDP_TX_SOFT_RESET_VIDEO_STREAM_ALL_MASK); XDpTxSs_WriteReg(InstancePtr->Config.DpSubCore.DpConfig.BaseAddr, XDP_TX_SOFT_RESET, 0x0); #if (XPAR_XDUALSPLITTER_NUM_INSTANCES > 0) /* Reset Dual Splitter */ if (InstancePtr->DsPtr) { XDualSplitter_Reset(InstancePtr->DsPtr); } #endif for (Index = 0; Index < InstancePtr->Config.NumMstStreams; Index++) { /* Reset VTC's */ if (InstancePtr->VtcPtr[Index]) { XVtc_Reset(InstancePtr->VtcPtr[Index]); } } }
/** * * This function is called when a Hot-Plug-Detect (HPD) event is received by * the DisplayPort TX Subsystem core. * * @param InstancePtr is a pointer to the XDpTxSs instance. * * @return None. * * @note Use the XDpTxSs_SetCallback driver function to set this * function as the handler for HPD event. * ******************************************************************************/ void DpTxSs_HpdEventHandler(void *InstancePtr) { XDpTxSs *DpTxSsInstance = (XDpTxSs *)InstancePtr; u32 IntrMask; u32 Status; /* Read interrupt */ IntrMask = XDpTxSs_ReadReg(DpTxSsInstance->DpPtr->Config.BaseAddr, (XDPTXSS_INTERRUPT_MASK)); /* Disable HPD interrupts. */ XDpTxSs_WriteReg(DpTxSsInstance->DpPtr->Config.BaseAddr, (XDPTXSS_INTERRUPT_MASK), IntrMask | (XDPTXSS_INTERRUPT_MASK_HPD_PULSE_DETECTED_MASK) | (XDPTXSS_INTERRUPT_MASK_HPD_EVENT_MASK)); xil_printf("+===> HPD connection event detected.\n\r"); if (XDpTxSs_IsConnected(DpTxSsInstance)) { Status = XDpTxSs_IsMstCapable(DpTxSsInstance); if ((Status == XST_SUCCESS) && DpTxSsInstance->Config.MstSupport) { DpTxSs_HpdEventCommon(DpTxSsInstance, 1); } else if (Status == XST_NO_FEATURE) { DpTxSs_HpdEventCommon(DpTxSsInstance, 0); } else { xil_printf("ERR:AUX read transaction failed /timed " "out.\n\r"); } xil_printf("+===> HPD Connection event ISR is executed.\n\r"); } else { xil_printf("+===> HPD disconnection event detected.\n\r"); } XDpTxSs_WriteReg(DpTxSsInstance->DpPtr->Config.BaseAddr, (XDPTXSS_INTERRUPT_MASK), IntrMask); }