From d2049202567dcb83ef9b8bbf34a3bccc10d90477 Mon Sep 17 00:00:00 2001 From: Dave Airlie Date: Tue, 20 Jul 2010 09:06:09 +1000 Subject: [PATCH] nouveau: mux-switching test patch 1 --- drivers/gpu/drm/nouveau/nouveau_acpi.c | 20 +++++++++++++++++++- 1 files changed, 19 insertions(+), 1 deletions(-) diff --git a/drivers/gpu/drm/nouveau/nouveau_acpi.c b/drivers/gpu/drm/nouveau/nouveau_acpi.c index d4bcca8..dfb3b5b 100644 --- a/drivers/gpu/drm/nouveau/nouveau_acpi.c +++ b/drivers/gpu/drm/nouveau/nouveau_acpi.c @@ -31,6 +31,8 @@ #define NOUVEAU_DSM_POWER_SPEED 0x01 #define NOUVEAU_DSM_POWER_STAMINA 0x02 +#define NOUVEAU_DSM_TOGGLE 0x05 + static struct nouveau_dsm_priv { bool dsm_detected; acpi_handle dhandle; @@ -90,7 +92,12 @@ static int nouveau_dsm(acpi_handle handle, int func, int arg, int *result) static int nouveau_dsm_switch_mux(acpi_handle handle, int mux_id) { - return nouveau_dsm(handle, NOUVEAU_DSM_LED, mux_id, NULL); + int result, ret; + ret = nouveau_dsm(handle, NOUVEAU_DSM_LED, mux_id, NULL); + + ret = nouveau_dsm(handle, NOUVEAU_DSM_TOGGLE, (mux_id | (1<<31)), &result); + printk("mux switch toggle returned %d\n", result); + return ret; } static int nouveau_dsm_set_discrete_state(acpi_handle handle, enum vga_switcheroo_state state) @@ -181,10 +188,21 @@ static bool nouveau_dsm_detect(void) } if (vga_count == 2 && has_dsm) { + u32 result; + int ret; acpi_get_name(nouveau_dsm_priv.dhandle, ACPI_FULL_PATHNAME, &buffer); printk(KERN_INFO "VGA switcheroo: detected DSM switching method %s handle\n", acpi_method_name); nouveau_dsm_priv.dsm_detected = true; + /* get current power state */ + ret = nouveau_dsm(nouveau_dsm_priv.dhandle, NOUVEAU_DSM_POWER, NOUVEAU_DSM_POWER_STATE, &result); + if (ret == 0) { + printk("VGA switchreoo: current power state is %d\n", result); + } + ret = nouveau_dsm(nouveau_dsm_priv.dhandle, NOUVEAU_DSM_TOGGLE, 0, &result); + if (ret == 0) { + printk("VGA switchreoo: current toggle state is %d\n", result); + } return true; } return false; -- 1.7.1