*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. Precautionary measure : - On some machines, turning off the card is permanent and the card does not reappear on subsequents reboots, which can result into the screen staying black all the time, including the BIOS screen. If it occurs, first try to shutdown, unplug power cord, remove battery, wait 30s, then put everything back in and boot. If it's not solved, then the solution is to reset the BIOS to factory settings. Before executing bbswitch for the first time, it is therefore recommended to take note of the full key sequence in the BIOS to do a reset. 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 -m bbswitch -v OLDVERSION --all` as root. To install the new version, simply run: # make -f Makefile.dkms To uninstall it, run: # make -f Makefile.dkms uninstall 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 <<" start on runlevel [2345] stop on runlevel [016] pre-start exec /sbin/modprobe bbswitch load_state=0 unload_state=1 pre-stop exec /sbin/rmmod bbswitch Reporting bugs -------------- This module has been integrated in Bumblebee "Tumbleweed". Please report any issues on this module in the issue tracker and provide the following details: - The output of `dmesg | grep -C 10 bbswitch:` - The kernel version `uname -a` - Your distribution and version (if applicable) - The version of your Xorg and the driver - Submit your machine information on https://bugs.launchpad.net/bugs/752542; the instructions are listed in the bug description. Summary: install the packages containing `dmidecode`, `acpidump` and `iasl` and then run: wget http://lekensteyn.nl/files/get-acpi-info.sh sh get-acpi-info.sh - Information about the ACPI handles associated with PCI devices. Since this is a kernel module, you'll need kernel headers, gcc and automake. Commands: git clone git://github.com/Lekensteyn/acpi-stuff.git --depth 1 cd acpi-stuff/acpi_dump_info make sudo make load cat /proc/acpi/dump_info Upload the generated tarball on the above Launchpad URL and provide a link to the comment containing your report. TODO ---- With the new PCI device approach, if load_state=0, then starting bumblebeed will unload bbswitch. Fix Bumblebee not to unload the module when the PM method is bbswitch and the loaded module is bbswitch.