This package provides 2 things : -------------------------------- - asus-laptop.o or asus-laptop.ko (for 2.6.X kernel), a kernel module to handle hotkey events, LEDs, Backlight, etc... - asus_acpid, a user-level daemon, based on acpid, to handle events generated by the kernel module. This daemon is only provided as an example, you can use any tool you want, as all events reported by the driver are inserted in the /proc/acpi/event queue. So, if you want, you can use the regular acpid. The advantage of this daemon is that it can be launched by any user, and so, interact directly with the X session opened by this user. You may then be able to launch X programs with this daemon, whereas with the classical ACPI daemon, this is not possible easily. Table of contents : -------------------------------------------------------------------------------- 1. Requirements 2. Compilation 2.1 Kernel module 2.2 asus_acpid daemon 3. Installation 3.1 Kernel module 3.2 asus_acpid 4. Usage 4.1 Kernel module 4.1.1 Display switching 4.1.2 LED display 4.2 asus_acpid daemon 5. Kernel support 6. Unsupported models 7. Patches, Errors, Questions: -------------------------------------------------------------------------------- -------------------------------------------------------------------------------- 1. Requirements Kernel 2.4.X or 2.6.X sources, configured for you computer, with ACPI support. You also need CONFIG_LEDS_CLASS and CONFIG_BACKLIGHT_CLASS_DEVICE. -------------------------------------------------------------------------------- 2. Compilation For the impatient, simply type make in the top level directory of the package, everything should be compiled fine. If it's not the case, read on. 2.1 Kernel module Go to the driver directory : cd driver If your kernel tree is not in /lib/modules//build, you will have to edit the Makefile to change the line s KDIR := /lib/modules/$(KVER)/build to reflect the path to your kernel tree : KDIR = You can also create a link from /lib/modules//build to your kernel source tree. You can edit the Makefile if you wish to change the linker (ld by default) and the compiler (gcc by default), or any option defined there ... Type make, you are done. To use the backlight and LEDs, you need to activate $ make menuconfig Device Drivers --> Graphics support ---> [*] Backlight & LCD device support ---> --- Backlight & LCD device support <*> Lowlevel Backlight controls LED devices ---> [*] LED Support <*> LED Class Support 2.2 asus_acpid daemon Go to the asus_acpid directory Edit the Makefile if you wish to change the default install directories (/usr/local/bin and /usr/local/share/man/man8). Type make, you are done. You can compile both the daemon and the kernel module by typing make in the top directory. -------------------------------------------------------------------------------- 3. Installation For the impatient, simply type "make install" in the top level directory of the package. The kernel module will be installed in /lib/modules/2.X.XX/kernel/drivers/misc, and the daemon in /usr/local/bin. If it doesn't work, read on. 3.1 Kernel module Go to the driver directory : cd driver Type "make install", you are done, module is in /lib/modules/2.X.XX/kernel/drivers/misc. If the path is wrong, edit the Makefile and correct it. 3.2 asus_acpid Go to the asus_acpid directory Edit the Makefile if you wish to change the default install directories (/usr/local/bin and /usr/local/share/man/man8). Type "make install", you are done. -------------------------------------------------------------------------------- 4. Usage 4.1 Kernel module Try "modprobe asus_acpi". Check your dmesg (simply type dmesg). You should see some lines like this : Asus Laptop Extras version 0.40 L2D model detected. If it is not the output you have on your laptop, send it (and the laptop's DSDT) to me. That's all, now, all the events generated by the hotkeys of your laptop should be reported in your /proc/acpi/event entry. You can check it, if you are root, by doing a "cat /proc/acpi/event" and pressing those hotkeys, you should see them appear. You won't be able to open /proc/acpi/event if it is already opened by another program, so check if you haven't a daemon running (like acpid), before reporting a bug :) You can modify LEDs be echoing values to /sys/class/leds/asus:*/brightness : echo 1 > /sys/class/leds/asus:mail/brightness will switch the mail LED on ... You can as well know if they are on/off by reading their content and use kernel triggers like ide-disk or heartbeat. You can get informations on the version of your DSDT table by reading the /sys/devices/platform/asus-laptop/infos entry. If you have a question or a bug report to do, please include the output of this entry. You can control lcd backlight power and brightness with /sys/class/backlight/asus-laptop/. Brightness Values are between 0 and 15. You can turn the internal Bluetooth adapter on/off with the bluetooth entry (only on models with Bluetooth). This usually controls the associated LED. Same for Wlan adapter. 4.1.1 Display switching Note: the display switching code is currently considered EXPERIMENTAL. Switching works for the following models: L3800C A2500H L5800C M5200N W1000N (albeit with some glitches) M6700R A6JC F3J Switching doesn't work for the following: M3700N L2X00D (locks the laptop under certain conditions) To switch the displays, echo values from 0 to 15 to /sys/devices/platform/asus-laptop/display. The significance of those values is as follows: +-------+-----+-----+-----+-----+-----+ | Bin | Val | DVI | TV | CRT | LCD | +-------+-----+-----+-----+-----+-----+ + 0000 + 0 + + + + + +-------+-----+-----+-----+-----+-----+ + 0001 + 1 + + + + X + +-------+-----+-----+-----+-----+-----+ + 0010 + 2 + + + X + + +-------+-----+-----+-----+-----+-----+ + 0011 + 3 + + + X + X + +-------+-----+-----+-----+-----+-----+ + 0100 + 4 + + X + + + +-------+-----+-----+-----+-----+-----+ + 0101 + 5 + + X + + X + +-------+-----+-----+-----+-----+-----+ + 0110 + 6 + + X + X + + +-------+-----+-----+-----+-----+-----+ + 0111 + 7 + + X + X + X + +-------+-----+-----+-----+-----+-----+ + 1000 + 8 + X + + + + +-------+-----+-----+-----+-----+-----+ + 1001 + 9 + X + + + X + +-------+-----+-----+-----+-----+-----+ + 1010 + 10 + X + + X + + +-------+-----+-----+-----+-----+-----+ + 1011 + 11 + X + + X + X + +-------+-----+-----+-----+-----+-----+ + 1100 + 12 + X + X + + + +-------+-----+-----+-----+-----+-----+ + 1101 + 13 + X + X + + X + +-------+-----+-----+-----+-----+-----+ + 1110 + 14 + X + X + X + + +-------+-----+-----+-----+-----+-----+ + 1111 + 15 + X + X + X + X + +-------+-----+-----+-----+-----+-----+ In most cases, the appropriate displays must be plugged in for the above combinations to work. TV-Out may need to be initialized at boot time. Debugging: 1) Check whether the Fn+F8 key: a) does not lock the laptop (try disabling CONFIG_X86_UP_APIC or boot with noapic / nolapic if it does) b) generates events (0x6n, where n is the value corresponding to the configuration above) c) actually works Record the disp value at every configuration. 2) Echo values from 0 to 15 to /sys/devices/platform/asus-laptop/display. Record its value, note any change. If nothing changes, try a broader range, up to 65535. 3) Send ANY output (both positive and negative reports are needed, unless your machine is already listed above) to the acpi4asus-user mailing list. Note: on some machines (e.g. L3C), after the module has been loaded, only 0x6n events are generated and no actual switching occurs. In such a case, a line like: echo $((10#$arg-60)) > /sys/devices/platform/asus-laptop/display will usually do the trick ($arg is the 0000006n-like event passed to acpid). Note: there is currently no reliable way to read display status on xxN (Centrino) models. 4.1.2 LED display Some models like the W1N have a LED display that can be used to display several informations. LED display works for the following models: W1000N W1J To control the LED display, use the following : echo 0x0T000DDD > /sys/devices/platform/asus-laptop/ where T control the 3 letters display, and DDD the 3 digits display, according to the tables below. DDD (digits) 000 to 999 = display digits AAA = --- BBB to FFF = turn-off T (type) 0 = off 1 = dvd 2 = vcd 3 = mp3 4 = cd 5 = tv 6 = cpu 7 = vol For example "echo 0x01000001 >/sys/devices/platform/asus-laptop/ledd" would display "DVD001". 4.2 asus_acpid daemon Now, you have to get a program than can handle events reported by the kernel module. The ACPID daemon is perfect for this, it is certainly packaged for your distribution, so I suggest you install it. Then you have two solutions: handle the events generated by hotkeys directly in the acpid configuration files (generally situated in /etc/acpid/), or with an alternate daemon. As I mentioned earlier, the advantage of the alternate daemon is that is can be launched by a non privileged user and interact directly with the environment of this user, that is you can bind one of your hotkeys to an Xterm if you wish, what is impossible with the acpid daemon without making dirty hacks... So, now that you are convinced the alternate daemon is better, we are going to install it : 1) first create a directory .asus_acpi in your home directory 2) copy everything in samples/ to that directory (cp -r samples/* ~/.asus_acpi) 3) launch asus_acpid (asus_acpid) 4) press hotkeys, enjoy Check the man page of asus_acpid (man asus_acpid) to know of to change the configuration. If you have a "connection refused" message when you try to launch asus_acpid, it means you must set a correct path to the socket open by acpid. For this check the config file of your acpid daemon. when you know the path to this socket, just launch the asus_acpid with "-e /path_to_socket" option. You can also check if the events are generated by using the small perl program included in the asus_acpid directory. -------------------------------------------------------------------------------- 5. Kernel Support Starting with kernel 2.4.22 and 2.6.X, the driver is included in the vanilla source tree. You can still compile the driver outside the kernel tree if you like it this way. -------------------------------------------------------------------------------- 6. Unsupported models These models will never be supported by this module, as they use a completely different mechanism to handle LEDs and extra stuff (meaning we have no clue how it works): - ASUS A1300 (A1B), A1370D - ASUS L7300G - ASUS L8400 -------------------------------------------------------------------------------- 7. Patches, Errors, Questions: Please, include the output of /sys/devices/platform/asus-laptop/info and /proc/acpi/dsdt (binary file format is just fine) if you can. acpi4asus-user@lists.sourceforge.net http://sourceforge.net/projects/acpi4asus