Commit 86504672 authored by Luca Tettamanti's avatar Luca Tettamanti Committed by Alex Deucher
Browse files

drm/radeon: refactor radeon_atif_call



Don't hard-code function number, this will allow to reuse the function.
v2: add support for the 2nd parameter (from Lee, Chun-Yi
<jlee@suse.com>).

Signed-off-by: default avatarLuca Tettamanti <kronos.it@gmail.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent f3728734
Loading
Loading
Loading
Loading
+23 −15
Original line number Diff line number Diff line
@@ -37,10 +37,9 @@
#include <linux/vga_switcheroo.h>

/* Call the ATIF method
 *
 * Note: currently we discard the output
 */
static int radeon_atif_call(acpi_handle handle)
static union acpi_object *radeon_atif_call(acpi_handle handle, int function,
		struct acpi_buffer *params)
{
	acpi_status status;
	union acpi_object atif_arg_elements[2];
@@ -51,9 +50,17 @@ static int radeon_atif_call(acpi_handle handle)
	atif_arg.pointer = &atif_arg_elements[0];

	atif_arg_elements[0].type = ACPI_TYPE_INTEGER;
	atif_arg_elements[0].integer.value = ATIF_FUNCTION_VERIFY_INTERFACE;
	atif_arg_elements[0].integer.value = function;

	if (params) {
		atif_arg_elements[1].type = ACPI_TYPE_BUFFER;
		atif_arg_elements[1].buffer.length = params->length;
		atif_arg_elements[1].buffer.pointer = params->pointer;
	} else {
		/* We need a second fake parameter */
		atif_arg_elements[1].type = ACPI_TYPE_INTEGER;
		atif_arg_elements[1].integer.value = 0;
	}

	status = acpi_evaluate_object(handle, "ATIF", &atif_arg, &buffer);

@@ -62,18 +69,18 @@ static int radeon_atif_call(acpi_handle handle)
		DRM_DEBUG_DRIVER("failed to evaluate ATIF got %s\n",
				 acpi_format_exception(status));
		kfree(buffer.pointer);
		return 1;
		return NULL;
	}

	kfree(buffer.pointer);
	return 0;
	return buffer.pointer;
}

/* Call all ACPI methods here */
int radeon_acpi_init(struct radeon_device *rdev)
{
	acpi_handle handle;
	int ret;
	union acpi_object *info;
	int ret = 0;

	/* Get the device handle */
	handle = DEVICE_ACPI_HANDLE(&rdev->pdev->dev);
@@ -83,10 +90,11 @@ int radeon_acpi_init(struct radeon_device *rdev)
		return 0;

	/* Call the ATIF method */
	ret = radeon_atif_call(handle);
	if (ret)
		return ret;
	info = radeon_atif_call(handle, ATIF_FUNCTION_VERIFY_INTERFACE, NULL);
	if (!info)
		ret = -EIO;

	return 0;
	kfree(info);
	return ret;
}