[PATCH 3/6] drm: Read out DP dual mode adaptor descriptor
Imre Deak
imre.deak at intel.com
Wed Nov 16 20:44:07 UTC 2016
To apply workarounds on buggy adaptors and for better diagnostics read
out the OUI,device-id and SW/HW revision registers from the dual mode
DDC address space.
Cc: Ville Syrjälä <ville.syrjala at linux.intel.com>
Cc: dri-devel at lists.freedesktop.org
Signed-off-by: Imre Deak <imre.deak at intel.com>
---
drivers/gpu/drm/drm_dp_dual_mode_helper.c | 19 +++++++++++++++++--
include/drm/drm_dp_dual_mode_helper.h | 7 +++++++
2 files changed, 24 insertions(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/drm_dp_dual_mode_helper.c b/drivers/gpu/drm/drm_dp_dual_mode_helper.c
index 1cb6c15..4e4ba945 100644
--- a/drivers/gpu/drm/drm_dp_dual_mode_helper.c
+++ b/drivers/gpu/drm/drm_dp_dual_mode_helper.c
@@ -164,6 +164,7 @@ static bool is_lspcon_adaptor(const char hdmi_id[DP_DUAL_MODE_HDMI_ID_LEN],
static int drm_dp_dual_mode_read_regs(struct drm_dp_dual_mode_adaptor *adaptor)
{
struct drm_dp_dual_mode_regs *regs = &adaptor->regs;
+ int dev_id_len;
ssize_t ret;
ret = drm_dp_dual_mode_read(adaptor, DP_DUAL_MODE_HDMI_ID,
@@ -187,9 +188,23 @@ static int drm_dp_dual_mode_read_regs(struct drm_dp_dual_mode_adaptor *adaptor)
regs->adaptor_id = 0;
}
- DRM_DEBUG_KMS("DP dual-mode: HDMI-ID %*pE adaptor-ID %#02x\n",
+ ret = drm_dp_dual_mode_read(adaptor, DP_DUAL_MODE_IEEE_OUI,
+ ®s->desc, sizeof(regs->desc));
+ if (ret) {
+ DRM_DEBUG_KMS("Reading descriptor failed (%zd)\n", ret);
+ memset(®s->desc, 0, sizeof(regs->desc));
+ }
+
+ dev_id_len = strnlen(regs->desc.device_id,
+ sizeof(regs->desc.device_id));
+ DRM_DEBUG_KMS("DP dual-mode: HDMI-ID %*pE adaptor-ID %#02x\n"
+ "OUI %*phD dev-ID %*pE HW-rev %d.%d SW-rev %d.%d\n",
(int)sizeof(regs->hdmi_id), regs->hdmi_id,
- regs->adaptor_id);
+ regs->adaptor_id,
+ (int)sizeof(regs->desc.oui), regs->desc.oui,
+ dev_id_len, regs->desc.device_id,
+ regs->desc.hw_rev >> 4, regs->desc.hw_rev & 0xf,
+ regs->desc.sw_major_rev, regs->desc.sw_minor_rev);
return 0;
}
diff --git a/include/drm/drm_dp_dual_mode_helper.h b/include/drm/drm_dp_dual_mode_helper.h
index 1436067..cb65584 100644
--- a/include/drm/drm_dp_dual_mode_helper.h
+++ b/include/drm/drm_dp_dual_mode_helper.h
@@ -105,6 +105,13 @@ struct drm_dp_dual_mode_adaptor {
struct drm_dp_dual_mode_regs {
uint8_t hdmi_id[16];
uint8_t adaptor_id;
+ struct drm_dp_dual_mode_desc {
+ uint8_t oui[3];
+ uint8_t device_id[6];
+ uint8_t hw_rev;
+ uint8_t sw_major_rev;
+ uint8_t sw_minor_rev;
+ } __packed desc;
} regs;
};
--
2.5.0
More information about the Intel-gfx-trybot
mailing list