For more information, join the team subscribe to the mailing list 
at the bottom of the Launchpad page 

Please join this team if you are new by clicking on the "Join 
Team" link at the right of the Launchpad page. It's important to 
have as many users in the community as possible to request for 
appropriate support.

Monday, 26 July 2010

More interesting news from the vga_switcheroo/acpi_call front

Here a website with useful ACPI information for Linux laptops:

And here some developments for the Asus Optimus laptops and vga_switcheroo:

Friday, 23 July 2010

How to test nouveau nvidia hybrid graphics switch on/off

One of the hybrid-graphics-linux launchpad team member kindly provided an Ubuntu
package for the patched kernel that reports "_DSM" vga_switcheroo switches for nvidia hybrid graphics laptops

(sub-arch is Core-Duo/Xeon, all other config options are based of
a stock Ubuntu kernel)
. You can download it at:


Please run this command post installing or
this kernel will fail to boot:

# mkinitramfs -k 2.6.35-rc5 -o /boot/initrd.img-2.6.35-rc5

So if you have a nvidia hybrid graphics laptop and want to test its nouveau drivers compatibility, now it's easier than ever...

Tuesday, 20 July 2010

nvidia-pre-optimus: David Airlie's 0001-nouveau-mux-switching-test-patch-1.patch

[Hybrid-graphics-linux] finishing intel/nvidia support (with open drivers)
This is a patch to apply on top of current Linux tree, with a dmesg from a pre-optimus nvidia hybrid machine should bring up some info on the current state of the switchable toggle.
Testers welcomed, please report back at mailing list, this email is repeated there:
Also, if you have time to package the patched kernel for your favourite distro, please post it somewhere so that other people can install it and try it.

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_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",
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;

Saturday, 17 July 2010

David Airlie on Intel/Nvidia open-source hybrid graphics support

[Hybrid-graphics-linux] finishing intel/nvidia support (with open drivers)
a) figure out what values to pass the DSM method to trigger the MUX,
It looks like method 0x5 is the one to trigger the mux switch but I've
no idea yet what values to pass it to trigger the mux switch.

b) figure out how to get the LVDS DDC lines and make nouveau find the
panel, at the moment it fails to find the panel when booted and intel
is in control.

looking at (a) I expect we could pass a bunch of values to the ACPI
method possibly using acpi_call to switch the mux and switch it back,

It looks like passing 0 will return the current toggle status, then
its a matter of working out which of the top bits are doing what,

>From reading one DSDT I can see,

if bit 31 set, then bit 30 is some sort of notify, then bits 25,26,27
are used to work out some values stored in a TOGF

otherwise bit 24 is used for something, then bits 12,13,14, and 3,2,1,
and it stores some values for CRT/LCD/TVout, which may again be

If someone with the hardware and can use acpi_call it would be nice to
try and map out some of these things, at least initially a value that
will turn the Intel LCD off and back on.

The DSDT I'm using at the moment is attached to bug 16403.

Friday, 16 July 2010

ASUS UL80V Nvidia GPU working

This link whows the Asus UL80 laptop solution that works for using the Nvidia GPU.

This does not work on the ASUS N series, it may work on others.

Friday, 2 July 2010

Using acpi_call module to switch on/off discrete graphics card in Linux

sudo apt-get install git
# type password

git clone
cd acpi_call
sudo insmod acpi_call.ko

# To check that the status of your VGA devices, run this command:

lspci -vnnn | grep VGA

# Unplug laptop, click on the battery indicator and take note of
# estimated remaining time.
# Now run this script:


# If you see a "works!" message, it's found a method.
To check that the status of your VGA devices has changed,
run this command again and check for the differences:

lspci -vnnn | grep VGA

Click on the battery indicator after running the script,
it should show a difference of about an extra 1-3 hours battery life.

Please join the hybrid graphics team if you are new by clicking on the
"Join Team" link at the right in this URL:

If you have any comments/questions, the best way to get an answer is to
subscribe to the mailing list at the bottom of that page and send an email there.

Thursday, 1 July 2010