[PATCH] drm/radeon: Fix manufacturer/product ID and monitor name in ELD data

Stefan Brüns stefan.bruens at rwth-aachen.de
Sat Jul 12 16:47:16 PDT 2014


Low/high bytes were for manufacturer and product ID were swapped.
Monitor name in ELD data is not zero terminated, use length field from
ELD data and initialize remaining bytes to 0.

Signed-off-by: Stefan Brüns <stefan.bruens at rwth-aachen.de>
---
 drivers/gpu/drm/radeon/dce6_afmt.c | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/drivers/gpu/drm/radeon/dce6_afmt.c b/drivers/gpu/drm/radeon/dce6_afmt.c
index 8a76180..f07b360 100644
--- a/drivers/gpu/drm/radeon/dce6_afmt.c
+++ b/drivers/gpu/drm/radeon/dce6_afmt.c
@@ -309,18 +309,20 @@ void dce6_afmt_write_sinkinfo(struct drm_encoder *encoder)
 
 	eld = connector->eld;
 
-	tmp = MANUFACTURER_ID(eld[16]<<8 | eld[17]) | PRODUCT_ID(eld[18]<<8 | eld[19]);
+	tmp = MANUFACTURER_ID(eld[17]<<8 | eld[16]) | PRODUCT_ID(eld[19]<<8 | eld[18]);
 	WREG32_ENDPOINT(offset, AZ_F0_CODEC_PIN_CONTROL_SINK_INFO0, tmp);
 
-	tmp = SINK_DESCRIPTION_LEN(strlen(&eld[20])) + 1;
-	tmp = (tmp > 19) ? 19 : tmp;
+	tmp = SINK_DESCRIPTION_LEN((eld[4] & 0xf) + 1);
 	WREG32_ENDPOINT(offset, AZ_F0_CODEC_PIN_CONTROL_SINK_INFO1, tmp);
 
-	strncpy(description, &eld[20], 18);
+	memset(description, 0, sizeof(description));
+	strncpy(description, &eld[20], tmp);
 
+	/* fglrx uses crt# here */
 	tmp = PORT_ID0(0x1);
 	/*WREG32_ENDPOINT(offset, AZ_F0_CODEC_PIN_CONTROL_SINK_INFO2, tmp);*/
 
+	/* PCI:1:0:0 ? */
 	tmp = PORT_ID1(0x100);
 	/*WREG32_ENDPOINT(offset, AZ_F0_CODEC_PIN_CONTROL_SINK_INFO3, tmp);*/
 
-- 
1.8.4.5



More information about the dri-devel mailing list