static void intel_dsm_platform_mux_info(void) { int i; union acpi_object *pkg, *connector_count; pkg = acpi_evaluate_dsm_typed(intel_dsm_priv.dhandle, intel_dsm_guid, INTEL_DSM_REVISION_ID, INTEL_DSM_FN_PLATFORM_MUX_INFO, NULL, ACPI_TYPE_PACKAGE); if (!pkg) { DRM_DEBUG_DRIVER("failed to evaluate _DSM\n"); return; } connector_count = &pkg->package.elements[0]; DRM_DEBUG_DRIVER("MUX info connectors: %lld\n", (unsigned long long)connector_count->integer.value); for (i = 1; i < pkg->package.count; i++) { union acpi_object *obj = &pkg->package.elements[i]; union acpi_object *connector_id = &obj->package.elements[0]; union acpi_object *info = &obj->package.elements[1]; DRM_DEBUG_DRIVER("Connector id: 0x%016llx\n", (unsigned long long)connector_id->integer.value); DRM_DEBUG_DRIVER(" port id: %s\n", intel_dsm_port_name(info->buffer.pointer[0])); DRM_DEBUG_DRIVER(" display mux info: %s\n", intel_dsm_mux_type(info->buffer.pointer[1])); DRM_DEBUG_DRIVER(" aux/dc mux info: %s\n", intel_dsm_mux_type(info->buffer.pointer[2])); DRM_DEBUG_DRIVER(" hpd mux info: %s\n", intel_dsm_mux_type(info->buffer.pointer[3])); } ACPI_FREE(pkg); }
static void intel_dsm_platform_mux_info(void) { struct acpi_buffer output = { ACPI_ALLOCATE_BUFFER, NULL }; struct acpi_object_list input; union acpi_object params[4]; union acpi_object *pkg; int i, ret; input.count = 4; input.pointer = params; params[0].type = ACPI_TYPE_BUFFER; params[0].buffer.length = sizeof(intel_dsm_guid); params[0].buffer.pointer = (char *)intel_dsm_guid; params[1].type = ACPI_TYPE_INTEGER; params[1].integer.value = INTEL_DSM_REVISION_ID; params[2].type = ACPI_TYPE_INTEGER; params[2].integer.value = INTEL_DSM_FN_PLATFORM_MUX_INFO; params[3].type = ACPI_TYPE_INTEGER; params[3].integer.value = 0; ret = acpi_evaluate_object(intel_dsm_priv.dhandle, "_DSM", &input, &output); if (ret) { DRM_DEBUG_DRIVER("failed to evaluate _DSM: %d\n", ret); goto out; } pkg = (union acpi_object *)output.pointer; if (pkg->type == ACPI_TYPE_PACKAGE) { union acpi_object *connector_count = &pkg->package.elements[0]; DRM_DEBUG_DRIVER("MUX info connectors: %lld\n", (unsigned long long)connector_count->integer.value); for (i = 1; i < pkg->package.count; i++) { union acpi_object *obj = &pkg->package.elements[i]; union acpi_object *connector_id = &obj->package.elements[0]; union acpi_object *info = &obj->package.elements[1]; DRM_DEBUG_DRIVER("Connector id: 0x%016llx\n", (unsigned long long)connector_id->integer.value); DRM_DEBUG_DRIVER(" port id: %s\n", intel_dsm_port_name(info->buffer.pointer[0])); DRM_DEBUG_DRIVER(" display mux info: %s\n", intel_dsm_mux_type(info->buffer.pointer[1])); DRM_DEBUG_DRIVER(" aux/dc mux info: %s\n", intel_dsm_mux_type(info->buffer.pointer[2])); DRM_DEBUG_DRIVER(" hpd mux info: %s\n", intel_dsm_mux_type(info->buffer.pointer[3])); } } else { DRM_ERROR("MUX INFO call failed\n"); } out: kfree(output.pointer); }