Asus Laptop Extras

Version 0.1
August 6, 2009

Corentin Chary <corentincj@iksaif.net>
http://acpi4asus.sf.net/

 This driver provides support for extra features of ACPI-compatible ASUS laptops.
 It may also support some MEDION, JVC or VICTOR laptops (such as MEDION 9675 or
 VICTOR XP7210 for example). It makes all the extra buttons generate input
 events (like keyboards).
 On some models adds support for changing the display brightness and output,
 switching the LCD backlight on and off, and most importantly, allows you to
 blink those fancy LEDs intended for reporting mail and wireless status.

This driver supercedes the old asus_acpi driver.

Requirements
------------

  Kernel 2.6.X sources, configured for your computer, with ACPI support.
  You also need CONFIG_INPUT and CONFIG_ACPI.

Status
------

 The features currently supported are the following (see below for
 detailed description):

 - Fn key combinations
 - Bluetooth enable and disable
 - Wlan enable and disable
 - GPS enable and disable
 - Video output switching
 - Ambient Light Sensor on and off
 - LED control
 - LED Display control
 - LCD brightness control
 - LCD on and off

 A compatibility table by model and feature is maintained on the web
 site, http://acpi4asus.sf.net/.

Usage
-----

  Try "modprobe asus-laptop". Check your dmesg (simply type dmesg). You should
  see some lines like this :

      Asus Laptop Extras version 0.42
        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 via netlink events. You can check with
  "acpi_genl monitor" (part of the acpica project).

  Hotkeys are also reported as input keys (like keyboards) you can check
  which key are supported using "xev" under X11.

  You can get information 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.

LEDs
----

  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 also know if they are on/off by reading their content and use
  kernel triggers like disk-activity or heartbeat.

Backlight
---------

  You can control lcd backlight power and brightness with
  /sys/class/backlight/asus-laptop/. Brightness Values are between 0 and 15.

Wireless devices
---------------

  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.

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 a 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.

LED display
-----------

  Some models like the W1N have a LED display that can be used to display
  several items of information.

  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".

Driver options:
---------------

 Options can be passed to the asus-laptop driver using the standard
 module argument syntax (<param>=<value> when passing the option to the
 module or asus-laptop.<param>=<value> on the kernel boot line when
 asus-laptop is statically linked into the kernel).

	     wapf: WAPF defines the behavior of the Fn+Fx wlan key
		   The significance of values is yet to be found, but
		   most of the time:
		   - 0x0 should do nothing
		   - 0x1 should allow to control the device with Fn+Fx key.
		   - 0x4 should send an ACPI event (0x88) while pressing the Fn+Fx key
		   - 0x5 like 0x1 or 0x4

 The default value is 0x1.

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

Patches, Errors, Questions:
--------------------------

 I appreciate any success or failure
 reports, especially if they add to or correct the compatibility table.
 Please include the following information in your report:

 - Asus model name
 - a copy of your ACPI tables, using the "acpidump" utility
 - a copy of /sys/devices/platform/asus-laptop/infos
 - which driver features work and which don't
 - the observed behavior of non-working features

 Any other comments or patches are also more than welcome.

 acpi4asus-user@lists.sourceforge.net
 http://sourceforge.net/projects/acpi4asus

