#include "display/intel_gmbus.h"
#include "i915_drv.h"
+#include <linux/dmi.h>
#define _INTEL_BIOS_PRIVATE
#include "intel_vbt_defs.h"
return NULL;
}
+#define DRM_DMI_PRODUCT_VERSION 0x6
+
+static void parse_product_info(struct drm_i915_private *dev_priv)
+{
+ const char *product_ver = dmi_get_system_info(DRM_DMI_PRODUCT_VERSION);
+ if (!product_ver)
+ return;
+
+ if (!strncmp(product_ver, "ThinkPad X1", 11)) {
+ DRM_DEBUG_KMS("dmi: %s, Bypassing TMDS_OE write\n", product_ver);
+ dev_priv->bypass_tmds_oe = true;
+ }
+
+ return;
+}
+
/**
* intel_bios_init - find VBT and initialize settings from the BIOS
* @dev_priv: i915 device instance
parse_sdvo_device_mapping(dev_priv, bdb->version);
parse_ddi_ports(dev_priv, bdb->version);
+ parse_product_info(dev_priv);
+
out:
if (!vbt) {
DRM_INFO("Failed to find VBIOS tables (VBT)\n");
if (hdmi->dp_dual_mode.type < DRM_DP_DUAL_MODE_TYPE2_DVI)
return;
+ if (dev_priv->bypass_tmds_oe) {
+ DRM_DEBUG_KMS("Bypassing TMDS_OE setting\n");
+ return;
+ }
+
DRM_DEBUG_KMS("%s DP dual mode adaptor TMDS output\n",
enable ? "Enabling" : "Disabling");