From b91ce402c027ba54c2964bb158ad1ab8bfe25c5b Mon Sep 17 00:00:00 2001 From: Andrei-Liviu Simion Date: Wed, 5 Nov 2014 20:13:42 -0800 Subject: [PATCH] dptx: Added a function that retrieves the Tiled Display Topology of a sink. Given a sink, the function will attempt to retrieve the Tiled Display Topology section data block which is part of the DisplayID structure. Signed-off-by: Andrei-Liviu Simion --- XilinxProcessorIPLib/drivers/dptx/src/xdptx.h | 2 ++ .../drivers/dptx/src/xdptx_edid.c | 30 +++++++++++++++++++ 2 files changed, 32 insertions(+) diff --git a/XilinxProcessorIPLib/drivers/dptx/src/xdptx.h b/XilinxProcessorIPLib/drivers/dptx/src/xdptx.h index 4782f0ef..eb795460 100644 --- a/XilinxProcessorIPLib/drivers/dptx/src/xdptx.h +++ b/XilinxProcessorIPLib/drivers/dptx/src/xdptx.h @@ -886,5 +886,7 @@ u32 XDptx_GetRemoteEdidDispIdExt(XDptx *InstancePtr, u8 *Data, u8 LinkCountTotal, u8 *RelativeAddress); u32 XDptx_GetDispIdDataBlock(u8 *DisplayIdRaw, u8 SectionTag, u8 **DataBlockPtr); +u32 XDptx_GetRemoteTiledDisplayDb(XDptx *InstancePtr, u8 *EdidExt, + u8 LinkCountTotal, u8 *RelativeAddress, u8 **DataBlockPtr); #endif /* XDPTX_H_ */ diff --git a/XilinxProcessorIPLib/drivers/dptx/src/xdptx_edid.c b/XilinxProcessorIPLib/drivers/dptx/src/xdptx_edid.c index ad4ac39c..7babe7d5 100644 --- a/XilinxProcessorIPLib/drivers/dptx/src/xdptx_edid.c +++ b/XilinxProcessorIPLib/drivers/dptx/src/xdptx_edid.c @@ -227,3 +227,33 @@ u32 XDptx_GetDispIdDataBlock(u8 *DisplayIdRaw, u8 SectionTag, u8 **DataBlockPtr) * block with the specified tag was found. */ return XST_FAILURE; } + +u32 XDptx_GetRemoteTiledDisplayDb(XDptx *InstancePtr, u8 *EdidExt, + u8 LinkCountTotal, u8 *RelativeAddress, u8 **DataBlockPtr) +{ + u32 Status; + u8 *EdidExtDispId; + + /* Obtain a DisplayID EDID extension block. */ + Status = XDptx_GetRemoteEdidDispIdExt(InstancePtr, EdidExt, + LinkCountTotal, RelativeAddress); + if (Status != XST_SUCCESS) { + /* The sink does not possess a DisplayID EDID extension block. */ + return Status; + } + + /* The first byte of the extension block is the tag. */ + EdidExtDispId = &EdidExt[0x01]; + + /* Obtain the tiled display topology block data from the DisplayId EDID + * extension block. */ + Status = XDptx_GetDispIdDataBlock(EdidExtDispId, XDPTX_DISPID_TDT_TAG, + DataBlockPtr); + if (Status != XST_SUCCESS) { + /* The sink does not possess a DisplayID EDID data block with + * the specified tag. */ + return Status; + } + + return XST_SUCCESS; +}