*Migrated from https://github.com/Lekensteyn/acpi-stuff* About ----- bbswitch is a kernel module which automatically detects the required ACPI calls for two kinds of Optimus laptops. It has been verified to work with "real" Optimus and "legacy" Optimus laptops (at least, that is how I call them). The machines on which these tests has performed are: - Clevo B7130 - GT 425M ("real" Optimus, Lekensteyns laptop) - Dell Vostro 3500 - GT 310M ("legacy" Optimus, Samsagax' laptop) (note: there is no need to add more supported laptops here as the universal calls should work for every laptop model supporting either Optimus calls) It's preferred over manually hacking with the acpi_call module because it can detect the correct handle preceding _DSM and has some built-in safeguards: - You're not allowed to disable a card if a driver (nouveau, nvidia) is loaded. - Before suspend, the card is automatically enabled. When resuming, it's disabled again if that was the case before suspending. Hibernation should work, but it not tested. Build ----- Build the module (kernel headers are required): make Then load it (requires root privileges, i.e. `sudo`): make load If your card is supported, there should be no error. Otherwise, you get a "No such device" (ENODEV) error. Check your kernel log (dmesg) for more information. DKMS support ------------ If you have DKMS installed, you can install bbswitch in such a way that it survives kernel upgrades. It is recommended to remove older versions of bbswitch by running `dkms remove bbswitch/OLDVERSION --all` as root. To install the new version, simply run: # make -f Makefile.dkms To uninstall it, run: # make -f Makefile.dkms uninstall Lenovo IdeaPad Y470/Y570 and Toshiba SATELLITE P870 --------------------------------------------------- Until [this kernel bug](https://bugzilla.kernel.org/show_bug.cgi?id=42696) is fixed, you need to apply an ugly hack on these laptops to make bbswitch and the driver (both nouveau and nvidia) work. For now I have decided not to put the hack in the bbswitch module since it is a very ugly hack that is comparable to writing a maximum allowable speed of 130 km/h on a traffic sign for a road where 120 km/h is allowed just because the radar gun does not work properly. The module has been tested on a Lenovo IdeaPad Y570 running an up-to-date version of Ubuntu 11.10 Oneiric (64-bit) with Bumblebee 3.0 (3.0-1~oneiricppa2) installed using the nvidia driver. To make use of it, use the `hack-lenovo` branch. An example using DKMS: $ git clone git://github.com/Bumblebee-Project/bbswitch.git -b hack-lenovo $ cd bbswitch $ mkdir /usr/src/acpi-handle-hack-0.0.1 # cp Makefile acpi-handle-hack.c /usr/src/acpi-handle-hack-0.0.1 # cp dkms/acpi-handle-hack.conf /usr/src/acpi-handle-hack-0.0.1/dkms.conf # dkms add acpi-handle-hack/0.0.1 # dkms build acpi-handle-hack/0.0.1 # dkms install acpi-handle-hack/0.0.1 If everything goes well, you now need to get the hack loaded on boot. On Ubuntu and Debian, this can be done with: echo acpi-handle-hack | sudo tee -a /etc/modules sudo update-initramfs -u For other systems, adopt the instructions from the *Disable card on boot* section below. Please do not copy these instructions to blogs/forums/whatever without warning that the method is a hack (you can refer to the metaphore above) and that it may crash the machine if incorrectly applied. To apply these changes, you have to reboot (technically, unloading nvidia/nouveau, bbswitch and stopping bumblebeed, `modprobe acpi-handle-hack` and starting bumblebeed should work as well, but saying reboot is shorter) Usage ----- bbswitch has three commands to check the card status and switching (`#` means "run with root privileges, i.e. run it prefixed with `sudo `): ### Get the status: # cat /proc/acpi/bbswitch 0000:01:00.0 ON ### Turn the card off, respectively on: # tee /proc/acpi/bbswitch <<