diff options
| -rw-r--r-- | drivers/gpu/drm/i915/intel_lvds.c | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/drivers/gpu/drm/i915/intel_lvds.c b/drivers/gpu/drm/i915/intel_lvds.c index 31df55f0a0a7..0eab8df5bf7e 100644 --- a/drivers/gpu/drm/i915/intel_lvds.c +++ b/drivers/gpu/drm/i915/intel_lvds.c | |||
| @@ -599,6 +599,26 @@ static int intel_lvds_get_modes(struct drm_connector *connector) | |||
| 599 | return 0; | 599 | return 0; |
| 600 | } | 600 | } |
| 601 | 601 | ||
| 602 | static int intel_no_modeset_on_lid_dmi_callback(const struct dmi_system_id *id) | ||
| 603 | { | ||
| 604 | DRM_DEBUG_KMS("Skipping forced modeset for %s\n", id->ident); | ||
| 605 | return 1; | ||
| 606 | } | ||
| 607 | |||
| 608 | /* The GPU hangs up on these systems if modeset is performed on LID open */ | ||
| 609 | static const struct dmi_system_id intel_no_modeset_on_lid[] = { | ||
| 610 | { | ||
| 611 | .callback = intel_no_modeset_on_lid_dmi_callback, | ||
| 612 | .ident = "Toshiba Tecra A11", | ||
| 613 | .matches = { | ||
| 614 | DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"), | ||
| 615 | DMI_MATCH(DMI_PRODUCT_NAME, "TECRA A11"), | ||
| 616 | }, | ||
| 617 | }, | ||
| 618 | |||
| 619 | { } /* terminating entry */ | ||
| 620 | }; | ||
| 621 | |||
| 602 | /* | 622 | /* |
| 603 | * Lid events. Note the use of 'modeset_on_lid': | 623 | * Lid events. Note the use of 'modeset_on_lid': |
| 604 | * - we set it on lid close, and reset it on open | 624 | * - we set it on lid close, and reset it on open |
| @@ -622,6 +642,9 @@ static int intel_lid_notify(struct notifier_block *nb, unsigned long val, | |||
| 622 | */ | 642 | */ |
| 623 | if (connector) | 643 | if (connector) |
| 624 | connector->status = connector->funcs->detect(connector); | 644 | connector->status = connector->funcs->detect(connector); |
| 645 | /* Don't force modeset on machines where it causes a GPU lockup */ | ||
| 646 | if (dmi_check_system(intel_no_modeset_on_lid)) | ||
| 647 | return NOTIFY_OK; | ||
| 625 | if (!acpi_lid_open()) { | 648 | if (!acpi_lid_open()) { |
| 626 | dev_priv->modeset_on_lid = 1; | 649 | dev_priv->modeset_on_lid = 1; |
| 627 | return NOTIFY_OK; | 650 | return NOTIFY_OK; |
