diff options
Diffstat (limited to 'drivers/gpu/drm/i915/intel_bios.c')
| -rw-r--r-- | drivers/gpu/drm/i915/intel_bios.c | 23 | 
1 files changed, 22 insertions, 1 deletions
diff --git a/drivers/gpu/drm/i915/intel_bios.c b/drivers/gpu/drm/i915/intel_bios.c index 8168d8f8a63..b48fc2a8410 100644 --- a/drivers/gpu/drm/i915/intel_bios.c +++ b/drivers/gpu/drm/i915/intel_bios.c @@ -24,6 +24,7 @@   *    Eric Anholt <eric@anholt.net>   *   */ +#include <linux/dmi.h>  #include <drm/drm_dp_helper.h>  #include "drmP.h"  #include "drm.h" @@ -621,6 +622,26 @@ init_vbt_defaults(struct drm_i915_private *dev_priv)  	dev_priv->edp.bpp = 18;  } +static int __init intel_no_opregion_vbt_callback(const struct dmi_system_id *id) +{ +	DRM_DEBUG_KMS("Falling back to manually reading VBT from " +		      "VBIOS ROM for %s\n", +		      id->ident); +	return 1; +} + +static const struct dmi_system_id intel_no_opregion_vbt[] = { +	{ +		.callback = intel_no_opregion_vbt_callback, +		.ident = "ThinkCentre A57", +		.matches = { +			DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"), +			DMI_MATCH(DMI_PRODUCT_NAME, "97027RG"), +		}, +	}, +	{ } +}; +  /**   * intel_parse_bios - find VBT and initialize settings from the BIOS   * @dev: DRM device @@ -641,7 +662,7 @@ intel_parse_bios(struct drm_device *dev)  	init_vbt_defaults(dev_priv);  	/* XXX Should this validation be moved to intel_opregion.c? */ -	if (dev_priv->opregion.vbt) { +	if (!dmi_check_system(intel_no_opregion_vbt) && dev_priv->opregion.vbt) {  		struct vbt_header *vbt = dev_priv->opregion.vbt;  		if (memcmp(vbt->signature, "$VBT", 4) == 0) {  			DRM_DEBUG_KMS("Using VBT from OpRegion: %20s\n",  |