24,8 → 24,9 |
* Eric Anholt <eric@anholt.net> |
* |
*/ |
#include <linux/dmi.h> |
#include <drm/drm_dp_helper.h> |
#include <drm/drmP.h> |
#include <drm/drm_dp_helper.h> |
#include <drm/i915_drm.h> |
#include "i915_drv.h" |
#include "intel_bios.h" |
1122,6 → 1123,26 |
} |
} |
|
static int 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"), |
}, |
}, |
{ } |
}; |
|
static struct bdb_header *validate_vbt(char *base, size_t size, |
struct vbt_header *vbt, |
const char *source) |
1185,7 → 1206,7 |
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) |
bdb = validate_vbt((char *)dev_priv->opregion.header, OPREGION_SIZE, |
(struct vbt_header *)dev_priv->opregion.vbt, |
"OpRegion"); |