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:
parent
3a2f3024f3
commit
650d61d699
3 changed files with 57 additions and 0 deletions
|
@ -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_ */
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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_ */
|
||||
|
|
Loading…
Add table
Reference in a new issue