|
@@ -1047,6 +1047,23 @@ err_out:
|
|
return err;
|
|
return err;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+static int intel_use_opregion_panel_type_callback(const struct dmi_system_id *id)
|
|
|
|
+{
|
|
|
|
+ DRM_INFO("Using panel type from OpRegion on %s\n", id->ident);
|
|
|
|
+ return 1;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static const struct dmi_system_id intel_use_opregion_panel_type[] = {
|
|
|
|
+ {
|
|
|
|
+ .callback = intel_use_opregion_panel_type_callback,
|
|
|
|
+ .ident = "Conrac GmbH IX45GM2",
|
|
|
|
+ .matches = {DMI_MATCH(DMI_SYS_VENDOR, "Conrac GmbH"),
|
|
|
|
+ DMI_MATCH(DMI_PRODUCT_NAME, "IX45GM2"),
|
|
|
|
+ },
|
|
|
|
+ },
|
|
|
|
+ { }
|
|
|
|
+};
|
|
|
|
+
|
|
int
|
|
int
|
|
intel_opregion_get_panel_type(struct drm_i915_private *dev_priv)
|
|
intel_opregion_get_panel_type(struct drm_i915_private *dev_priv)
|
|
{
|
|
{
|
|
@@ -1072,6 +1089,16 @@ intel_opregion_get_panel_type(struct drm_i915_private *dev_priv)
|
|
return -ENODEV;
|
|
return -ENODEV;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ /*
|
|
|
|
+ * So far we know that some machined must use it, others must not use it.
|
|
|
|
+ * There doesn't seem to be any way to determine which way to go, except
|
|
|
|
+ * via a quirk list :(
|
|
|
|
+ */
|
|
|
|
+ if (!dmi_check_system(intel_use_opregion_panel_type)) {
|
|
|
|
+ DRM_DEBUG_KMS("Ignoring OpRegion panel type (%d)\n", ret - 1);
|
|
|
|
+ return -ENODEV;
|
|
|
|
+ }
|
|
|
|
+
|
|
/*
|
|
/*
|
|
* FIXME On Dell XPS 13 9350 the OpRegion panel type (0) gives us
|
|
* FIXME On Dell XPS 13 9350 the OpRegion panel type (0) gives us
|
|
* low vswing for eDP, whereas the VBT panel type (2) gives us normal
|
|
* low vswing for eDP, whereas the VBT panel type (2) gives us normal
|