예제 #1
0
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);
}
예제 #2
0
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);
}