dptx: Added a function that fetches a DisplayID EDID extension block.

Given a sink, the function will attempt to retrieve an EDID extension block of
type DisplayID.

Signed-off-by: Andrei-Liviu Simion <andrei.simion@xilinx.com>
This commit is contained in:
Andrei-Liviu Simion 2014-11-05 19:06:00 -08:00 committed by Suneel Garapati
parent 3a2f3024f3
commit 650d61d699
3 changed files with 57 additions and 0 deletions

View file

@ -882,5 +882,7 @@ u32 XDptx_GetRemoteEdid(XDptx *InstancePtr, u8 LinkCountTotal,
u32 XDptx_GetEdidBlock(XDptx *InstancePtr, u8 *Data, u8 BlockNum);
u32 XDptx_GetRemoteEdidBlock(XDptx *InstancePtr, u8 *Data, u8 BlockNum,
u8 LinkCountTotal, u8 *RelativeAddress);
u32 XDptx_GetRemoteEdidDispIdExt(XDptx *InstancePtr, u8 *Data,
u8 LinkCountTotal, u8 *RelativeAddress);
#endif /* XDPTX_H_ */

View file

@ -160,3 +160,36 @@ u32 XDptx_GetRemoteEdidBlock(XDptx *InstancePtr, u8 *Data, u8 BlockNum,
return Status;
}
u32 XDptx_GetRemoteEdidDispIdExt(XDptx *InstancePtr, u8 *Data,
u8 LinkCountTotal, u8 *RelativeAddress)
{
u32 Status;
u8 NumExt;
u8 ExtIndex;
/* Get the base EDID block. */
Status = XDptx_GetRemoteEdid(InstancePtr, LinkCountTotal, RelativeAddress, Data);
if (Status != XST_SUCCESS) {
return Status;
}
NumExt = XDptx_GetExtBlockCount(Data);
for (ExtIndex = 0; ExtIndex < NumExt; ExtIndex++) {
/* Get an EDID extension block. */
Status = XDptx_GetRemoteEdidBlock(InstancePtr, Data,
ExtIndex + 1, LinkCountTotal, RelativeAddress);
if (Status != XST_SUCCESS) {
return Status;
}
if (XDptx_IsEdidExtBlockDispId(Data)) {
/* The current extension block is of type DisplayID. */
return XST_SUCCESS;
}
}
/* All extension blocks have been searched; no DisplayID extension block
* exists in sink's EDID structure. */
return XST_FAILURE;
}

View file

@ -1107,6 +1107,7 @@
#define XDPTX_EDID_BLOCK_SIZE 128
#define XDPTX_EDID_DTD_DD(Num) (0x36 + (18 * Num))
#define XDPTX_EDID_PTM XDPTX_EDID_DTD_DD(0)
#define XDPTX_EDID_EXT_BLOCK_COUNT 0x7E
/* @} */
/** @name Extended Display Identification Data: Register offsets for the
@ -1158,6 +1159,20 @@
#define XDPTX_EDID_DTD_SIGNAL_VPOLARITY_SHIFT 2
/* @} */
/** @name Extended Display Identification Data: Register offsets for the
* DisplayID extension block.
* @{
*/
#define XDPTX_EDID_EXT_BLOCK_TAG 0x00
/* @} */
/** @name Extended Display Identification Data: Masks, shifts, and register
* values for the DisplayID extension block.
* @{
*/
#define XDPTX_EDID_EXT_BLOCK_TAG_DISPID 0x70
/* @} */
/******************************************************************************/
/**
* Multi-stream transport (MST) definitions.
@ -1227,4 +1242,11 @@
#define XDptx_WriteReg(BaseAddress, RegOffset, Data) \
XDptx_Out32((BaseAddress) + (RegOffset), (Data))
#define XDptx_GetExtBlockCount(E) (E[XDPTX_EDID_EXT_BLOCK_COUNT])
#define XDptx_IsEdidExtBlockDispId(B) \
(B[XDPTX_EDID_EXT_BLOCK_TAG] == XDPTX_EDID_EXT_BLOCK_TAG_DISPID)
#endif /* XDPTX_HW_H_ */