|
|
|
@ -26,6 +26,7 @@ |
|
|
|
|
*/ |
|
|
|
|
|
|
|
|
|
#include <linux/acpi.h> |
|
|
|
|
#include <linux/dmi.h> |
|
|
|
|
#include <acpi/video.h> |
|
|
|
|
|
|
|
|
|
#include <drm/drmP.h> |
|
|
|
@ -904,6 +905,25 @@ static void swsci_setup(struct drm_device *dev) |
|
|
|
|
static inline void swsci_setup(struct drm_device *dev) {} |
|
|
|
|
#endif /* CONFIG_ACPI */ |
|
|
|
|
|
|
|
|
|
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"), |
|
|
|
|
}, |
|
|
|
|
}, |
|
|
|
|
{ } |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
int intel_opregion_setup(struct drm_device *dev) |
|
|
|
|
{ |
|
|
|
|
struct drm_i915_private *dev_priv = dev->dev_private; |
|
|
|
@ -942,8 +962,6 @@ int intel_opregion_setup(struct drm_device *dev) |
|
|
|
|
goto err_out; |
|
|
|
|
} |
|
|
|
|
opregion->header = base; |
|
|
|
|
opregion->vbt = base + OPREGION_VBT_OFFSET; |
|
|
|
|
|
|
|
|
|
opregion->lid_state = base + ACPI_CLID; |
|
|
|
|
|
|
|
|
|
mboxes = opregion->header->mboxes; |
|
|
|
@ -968,6 +986,9 @@ int intel_opregion_setup(struct drm_device *dev) |
|
|
|
|
if (mboxes & MBOX_ASLE_EXT) |
|
|
|
|
DRM_DEBUG_DRIVER("ASLE extension supported\n"); |
|
|
|
|
|
|
|
|
|
if (!dmi_check_system(intel_no_opregion_vbt)) |
|
|
|
|
opregion->vbt = base + OPREGION_VBT_OFFSET; |
|
|
|
|
|
|
|
|
|
return 0; |
|
|
|
|
|
|
|
|
|
err_out: |
|
|
|
|