@@ -23,6 +23,14 @@
0x0f, 0x13, 0x17, 0xb0, 0x1c, 0x2c
};
+static const u8 intel_dsm_guid_bxt[] = {
+ 0xc6, 0x41, 0x5b, 0x3e,
+ 0x1d, 0xeb,
+ 0x60, 0x42,
+ 0x9d, 0x15,
+ 0xc7, 0x1f, 0xba, 0xda, 0xe4, 0x14
+};
+
static char *intel_dsm_port_name(u8 id)
{
switch (id) {
@@ -113,20 +121,30 @@ static void intel_dsm_platform_mux_info(void)
static bool intel_dsm_pci_probe(struct pci_dev *pdev)
{
acpi_handle dhandle;
+ struct drm_device *dev = pci_get_drvdata(pdev);
+ struct drm_i915_private *dev_priv = to_i915(dev);
dhandle = ACPI_HANDLE(&pdev->dev);
if (!dhandle)
return false;
- if (!acpi_check_dsm(dhandle, intel_dsm_guid, INTEL_DSM_REVISION_ID,
- 1 << INTEL_DSM_FN_PLATFORM_MUX_INFO)) {
- DRM_DEBUG_KMS("no _DSM method for intel device\n");
- return false;
- }
-
intel_dsm_priv.dhandle = dhandle;
- intel_dsm_platform_mux_info();
+ if (IS_BROXTON(dev_priv)) {
+ union acpi_object *obj;
+
+ obj = acpi_evaluate_dsm(dhandle, intel_dsm_guid_bxt,
+ INTEL_DSM_REVISION_ID, 0, NULL);
+ if (!obj)
+ return false;
+ } else {
+ if (acpi_check_dsm(dhandle, intel_dsm_guid,
+ INTEL_DSM_REVISION_ID,
+ 1 << INTEL_DSM_FN_PLATFORM_MUX_INFO))
+ intel_dsm_platform_mux_info();
+ else
+ return false;
+ }
return true;
}