Beispiel #1
0
/**
*
* 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);
}