|
@@ -674,6 +674,36 @@ static void set_did(struct intel_opregion *opregion, int i, u32 val)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+static u32 acpi_display_type(struct drm_connector *connector)
|
|
|
|
+{
|
|
|
|
+ u32 display_type = ACPI_DISPLAY_TYPE_OTHER;
|
|
|
|
+
|
|
|
|
+ switch (connector->connector_type) {
|
|
|
|
+ case DRM_MODE_CONNECTOR_VGA:
|
|
|
|
+ case DRM_MODE_CONNECTOR_DVIA:
|
|
|
|
+ display_type = ACPI_DISPLAY_TYPE_VGA;
|
|
|
|
+ break;
|
|
|
|
+ case DRM_MODE_CONNECTOR_Composite:
|
|
|
|
+ case DRM_MODE_CONNECTOR_SVIDEO:
|
|
|
|
+ case DRM_MODE_CONNECTOR_Component:
|
|
|
|
+ case DRM_MODE_CONNECTOR_9PinDIN:
|
|
|
|
+ display_type = ACPI_DISPLAY_TYPE_TV;
|
|
|
|
+ break;
|
|
|
|
+ case DRM_MODE_CONNECTOR_DVII:
|
|
|
|
+ case DRM_MODE_CONNECTOR_DVID:
|
|
|
|
+ case DRM_MODE_CONNECTOR_DisplayPort:
|
|
|
|
+ case DRM_MODE_CONNECTOR_HDMIA:
|
|
|
|
+ case DRM_MODE_CONNECTOR_HDMIB:
|
|
|
|
+ display_type = ACPI_DISPLAY_TYPE_EXTERNAL_DIGITAL;
|
|
|
|
+ break;
|
|
|
|
+ case DRM_MODE_CONNECTOR_LVDS:
|
|
|
|
+ display_type = ACPI_DISPLAY_TYPE_INTERNAL_DIGITAL;
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return display_type;
|
|
|
|
+}
|
|
|
|
+
|
|
static void intel_didl_outputs(struct drm_i915_private *dev_priv)
|
|
static void intel_didl_outputs(struct drm_i915_private *dev_priv)
|
|
{
|
|
{
|
|
struct intel_opregion *opregion = &dev_priv->opregion;
|
|
struct intel_opregion *opregion = &dev_priv->opregion;
|
|
@@ -742,36 +772,16 @@ end:
|
|
blind_set:
|
|
blind_set:
|
|
i = 0;
|
|
i = 0;
|
|
list_for_each_entry(connector, &dev_priv->dev->mode_config.connector_list, head) {
|
|
list_for_each_entry(connector, &dev_priv->dev->mode_config.connector_list, head) {
|
|
- int output_type = ACPI_DISPLAY_TYPE_OTHER;
|
|
|
|
|
|
+ int display_type = acpi_display_type(connector);
|
|
|
|
+
|
|
if (i >= max_outputs) {
|
|
if (i >= max_outputs) {
|
|
DRM_DEBUG_KMS("More than %u outputs in connector list\n",
|
|
DRM_DEBUG_KMS("More than %u outputs in connector list\n",
|
|
max_outputs);
|
|
max_outputs);
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
- switch (connector->connector_type) {
|
|
|
|
- case DRM_MODE_CONNECTOR_VGA:
|
|
|
|
- case DRM_MODE_CONNECTOR_DVIA:
|
|
|
|
- output_type = ACPI_DISPLAY_TYPE_VGA;
|
|
|
|
- break;
|
|
|
|
- case DRM_MODE_CONNECTOR_Composite:
|
|
|
|
- case DRM_MODE_CONNECTOR_SVIDEO:
|
|
|
|
- case DRM_MODE_CONNECTOR_Component:
|
|
|
|
- case DRM_MODE_CONNECTOR_9PinDIN:
|
|
|
|
- output_type = ACPI_DISPLAY_TYPE_TV;
|
|
|
|
- break;
|
|
|
|
- case DRM_MODE_CONNECTOR_DVII:
|
|
|
|
- case DRM_MODE_CONNECTOR_DVID:
|
|
|
|
- case DRM_MODE_CONNECTOR_DisplayPort:
|
|
|
|
- case DRM_MODE_CONNECTOR_HDMIA:
|
|
|
|
- case DRM_MODE_CONNECTOR_HDMIB:
|
|
|
|
- output_type = ACPI_DISPLAY_TYPE_EXTERNAL_DIGITAL;
|
|
|
|
- break;
|
|
|
|
- case DRM_MODE_CONNECTOR_LVDS:
|
|
|
|
- output_type = ACPI_DISPLAY_TYPE_INTERNAL_DIGITAL;
|
|
|
|
- break;
|
|
|
|
- }
|
|
|
|
|
|
+
|
|
temp = get_did(opregion, i);
|
|
temp = get_did(opregion, i);
|
|
- set_did(opregion, i, temp | (1 << 31) | output_type | i);
|
|
|
|
|
|
+ set_did(opregion, i, temp | (1 << 31) | display_type | i);
|
|
i++;
|
|
i++;
|
|
}
|
|
}
|
|
goto end;
|
|
goto end;
|