Linux on an ASUS Z71V based laptop

Revision 1.10
2006-05-03
Josh Green
josh AT resonance DOT org

TuxMobil - Linux on Laptops, Notebooks, PDAs and Mobile Phones

Table of Contents

File Downloads

Version 4 of the asus_acpi patch. Removed Z71A light sensor support that was added to the M2E model, since it was incorrect. Some code cleanup (no changes in functionality though for Z71V).

Note: This patch is for use with acpi4asus version 0.30. The acpi4asus project is the source of the asus_acpi module in the Linux kernel, and can be built separately. If you decide to build the asus_acpi module from the acpi4asus source you may want to disable the built in ASUS ACPI support in the Kernel to prevent subsequent installs from overwriting the updated patched version.

Note #2:: The Z71V patch is now part of the acpi4asus CVS. A version of acpi4asus has not yet been released containing this patch, but in the future it will eventually make its way into the kernel, thereby making it unnecessary to apply it.

acpi4asus-0.30_M7V-v4.patch - Version 4 of the Z71V patch for acpi4asus Version 0.30.

Version 3 of the asus_acpi patch for model M7V support (includes the Z71V and maybe others?). These are patches for specific Linux kernel versions, if you would like to download the acpi4asus project separately and patch it use the acpi4asus patch above (recommended if you have a different kernel version or if the patch doesn't apply cleanly).

asus_acpi_M7V-2.6.16-v3a.patch - Version 3a of the Z71V patch for Kernel 2.6.16.
Note that version 3a of this patch also fixes a bug in the asus_acpi module that comes with kernel 2.6.16 that was causing M7V support to fail.

asus_acpi_M7V-2.6.14-v3.patch - Version 3 of the Z71V patch for Kernel 2.6.14.

My xorg.conf, you may find it useful:
xorg.conf

My kernel .config file. Use at your own risk of course. To use it, copy to your /usr/src/linux source directory as .config and run "make menuconfig" (or "make gconfig", "make xconfig", etc).
kernel_config-2.6.14

hotkey.sh that I'm using with acpid to handle special key events:
hotkey.sh

Related Links

Leviathan's Z71V page - Contains info for using these laptops in Ubuntu and also general information, including some info on suspend to disk/ram.

Change History

Revision 1.10 2006-05-03

Revision 1.9 2006-04-04

Revision 1.8 2006-01-11

Revision 1.7 2005-12-18

Revision 1.6 2005-11-23
Updated asus_acpi patch against kernel 2.6.14 and also added Z71A light sensor support.

Revision 1.5 2005-09-06

Revision 1.4 2005-09-04

Revision 1.3 2005-08-07

Revision 1.2 2005-05-24

Revision 1.1 2005-05-06

Revision 1.0 2005-04-15
Initial posting

Introduction

Here you will find some notes and information that I found useful in getting Linux to run on an ASUS Z71V based laptop.
I purchased mine from www.powernotebooks.com model PowerPro A 2:21 but much of this information will probably also apply to other ASUS Z71V based laptops. I use Gentoo so some of this info may be Gentoo Linux specific, but could be easily adapted to other distributions.

This is work in progress and will become more complete as I get more accustomed to using my new laptop.

Disclaimer: Use this information at your own risk. You are responsible for how you use (or misuse) the information found here. This is common sense though, and should go without saying.

License: This documentation is public domain, use as you please. The patch to the asus_acpi module is distributed under the GPL.

Laptop Experience

I have sometimes been asked as to whether I recommend this laptop. I usually just tell people my own experience and let them decide for themselves. Keep in mind that this is my own experience and does not necessarily reflect the experience of every Z71V user. As far as the features go, it is a nice powerful system. I have been mostly happy with it overall and the Linux support is fairly good (minus the modem and memory card reader). I think the most major issue is the failing battery issue discussed on this forum thread:
Z71V Battery Problems...
Fortunately for me I have a good support package with this laptop, so I have been able to replace the battery rather easily (twice now). I'm not sure if this issue will be resolved by ASUS, so thats something to keep in mind when considering puchasing this model. I'm not certain that it affects every laptop of this model or not. I don't regret my purchase at all though, and besides the battery issue I would say it has exceeded my expectations.

Hardware

The hardware in my system (yours may vary).

What works

Status of what I have working or not:
FeatureWorksNotes
VideoYESI'm using commercial nVIDIA drivers
AudioYESUsing latest ALSA, some problems
EthernetYESUse sk98lin module
ModemNONo driver for this software modem
TouchpadYESSynaptics driver is nice to have
PCMCIAYESI had to pass "pci=assign-busses" to Linux kernel
FirewireYESI haven't tested personally but other users report success
DVD burnerYESDVD burning works
Memory card readerNONo driver currently

Kernel Modules

Here is a list of modules in my /etc/modules.autoload.d/kernel-2.6:
asus_acpi	# For additional buttons and LEDs
ac
battery
button
fan
processor
thermal
video
uhci-hcd
ehci-hcd
ide_cd
cdrom
rtc
evdev		# Used by synaptics driver
speedstep_centrino

nvidia		# If you are using the commercial nvidia drivers
UPDATE:Seems with kernel 2.6.16 the correct module to use is now again speedstep_centrino. Starting with kernel-2.6.11 it was the acpi_cpufreq module. You're milage may vary. Try speedstep_centrino and if you have problems then the acpi_cpufreq module may work.

Video

Works great with the nVidia commercial drivers, which is required for 3D support.

The widescreen display required some special mode lines to get the 1680x1050 resolution. Here is my Monitor section of my xorg.conf. The vrefresh of 0-60 is likely not a good idea, but the mode lines seem to work fine for me.

Section "Monitor"
    Identifier "monitor1"
    VendorName "Generic"
    ModelName "Flat Panel 1680x1050"

    # hsync in kHz
    HorizSync 29-64

    # vrefresh in Hz
    VertRefresh 0-60

    # 1280x800 @ 60.00 Hz (GTF) hsync: 49.68 kHz; pclk: 83.46 MHz
    ModeLine  "1280x800" 83.46 1280 1344 1480 1680 800 801 804 828

    # 1680x1050 @ 60.00 Hz (GTF) hsync: 63.84 kHz; pclk: 144.02 MHz
    ModeLine  "1680x1050" 144.02 1680 1784 1968 2256 1050 1051 1054 1064
EndSection

Audio

I was fortunate enough to be at this years Linux Audio Conference in Karlsruhe, Germany which the developer of the ALSA driver, Takashi Iwai, happened to be attending too. He fixed most of the audio problems and added a model "z71v" to the hda-intel driver. These changes are now in the ALSA driver (as of 1.0.9rc4a).

Remaining problems: Many games refuse to play audio including Quake 3 and sometimes Descent 3. Many others work fine though. Seems to be related to programs that mmap the device or use sample rates that aren't natively supported by the device. Sometimes I've experienced clicking in the output or synchronization problems in media programs like mplayer. There is a module parameter "position_fix" that was added to be able to try different buffer position reporting schemes. Try adding "position_fix=1" or "position_fix=2" to the module parameters like so:

modprobe snd-hda-intel position_fix=1
Or add "options snd-hda-intel position_fix=1" to your /etc/modules.d/alsa file and run "update-modules" (Gentoo specific).

UPDATE: Quake3 source code has been released and SDL support has already been added for audio. So Quake3 can now be played with this sound card. I built quake3 from the subversion source code repository found here: http://icculus.org/quake3/. Thanks to ID Software for continuing to open source their older game engines! :)

Ethernet

Works great. Use the "skge" module ("Device Drivers"->"Networking support"->"Ethernet 1000 Mbit"->"New SysKonnect GigaEthernet" when configuring the kernel). Note that the sk98lin module will also work but has been marked as depricated (thanks to Paul Clark for pointing this out).

Touchpad

This touchpad has a scroll area. I had to install the synaptics driver before this would work ("emerge synaptics"). You'll need to edit your xorg.conf to finish the install (see the included INSTALL.gz and README.gz in /usr/share/doc/synaptics-0.xx.x). This driver gives you greater control over the touchpad which is also nice.

PCMCIA

I just got this working after reading some bug reports for Linux PCMCIA. It seems I had to pass "pci=assign-busses" to the Linux kernel to get things to work. If you are using LILO you can add this to the "append" line, example (the append line is only of interest, the other lines may likely differ on your machine):
...
image=/boot/vmlinuz
        label=linux
        append="pci=assign-busses"
...

ACPI

ACPI seems to be working fine. The temperature, AC status, and battery are all reported correctly. The lid switch works and the LCD is turned off. I have not yet tested suspending to RAM or HD.

Patch to asus_acpi module

I added some code to the asus_acpi module to support the Z71V hardware (the ACPI model identified is M7V). This patch adds support for the M7V model, including toggling the light sensor, setting its level, and switching the display between LCD and CRT (thanks to James Lademann for adding display switching support).

Go to the File Downloads section of this page for the M7V patches.

This patch adds the files "lssw" and "lslvl" to /proc/acpi/asus. Sending a 0 to lssw will disable the light sensor any other value will enable it. A value from 0 to 15 can be sent to lslvl to control the light sensor level.

UPDATE: The M7V patch has been merged with the acpi4asus project CVS. This means that future versions of acpi4asus, and eventually the Linux kernel, will contain support for the M7V model, making patching unnecessary. As of now (acpi4asus version 0.30 and Linux kernel 2.6.16) it is still necessary to patch things.

Extra buttons

To enable the Fn-keys, launch and audio control buttons the ACPI daemon (acpid) is your friend. Note that my config is probably not the proper way to do things, but I was unable to get the regular expression event matching to work properly. Here are my configuration files:

/etc/acpi/default.sh

#!/bin/sh
# Default acpi script that takes an entry for all actions

set $*

group=${1/\/*/}
action=${1/*\//}

case "$group" in
        button)
                case "$action" in
                        power)  /sbin/init 0
                                ;;
                        *)      logger "ACPI action $action is not defined"
                                ;;
                esac
                ;;

        hotkey)
                /etc/acpi/hotkey.sh "$@"
                ;;
        *)
                logger "ACPI group $group / action $action is not defined"
                ;;
esac
And here is a new file called hotkey.sh. Edit to your taste, in particular change the applications to ones you prefer and the name "josh" to your own user.
Credit goes to nion's website which contains good info on getting Linux to run on an ASUS M6N.
/etc/acpi/hotkey.sh
#!/bin/bash
case "$3" in
# Mute button
00000032)
    /usr/bin/amixer set Front toggle
    /usr/bin/amixer set Headphone toggle
;;
# Volume up button
00000030)
    /usr/bin/amixer set Front 1+
    /usr/bin/amixer set Headphone 1+
;;
# Volume down button
00000031)
    /usr/bin/amixer set Front 1-
    /usr/bin/amixer set Headphone 1-
;;
# Rewind button
00000040) su - josh -c "/usr/bin/xmms -r"
;;
# Stop button
00000043) su - josh -c "/usr/bin/xmms -s"
;;
# Play/pause button
00000045) su - josh -c "/usr/bin/xmms -t"
;;
# Forward button
00000041) su - josh -c "/usr/bin/xmms -f"
;;
# CD-player ON/OFF button (I use it to eject the cdrom)
0000004c) eject cdrom
;;
# Mail button
00000050) su - josh -c "export DISPLAY=:0.0;evolution &"
;;
# Browser button
00000051) su - josh -c "export DISPLAY=:0.0;galeon &"
;;
# WiFi button
0000005d) # wlanup start
;;
# Light sensor toggle
0000007a) echo $((`cat /proc/acpi/asus/lssw` ^ 1)) > /proc/acpi/asus/lssw
;;
# LCD/CRT button (LCD only)
00000061) echo 1 > /proc/acpi/asus/disp
;;
# LCD/CRT button (CRT only)
00000062) echo 2 > /proc/acpi/asus/disp
;;
# LCD/CRT button (LCD and CRT)
00000063) echo 3 > /proc/acpi/asus/disp
;;
# Uncomment "logger" to log unknown key presses to system log
*) # logger "ACPI hotkey $3 is not defined"
;;
esac
The application launching (evolution and galeon in this case) don't yet work due to X security. Need to figure out how to get around this.

Additional notes/problems

UPDATE: I was previously having problems in Linux with momentary lockups while playing 3D games. I shipped my laptop in for an unrelated repair and when it came back it had a new shell and I now no longer have this problem anymore. I suspect that previously there was a GPU heatsink issue. I was able to trace the stalls down to the generation of hundreds of ACPI thermal events which was causing the Linux kernel to consume all CPU for several seconds at a time. This may also point to some inefficiencies in the ACPI code, since I was unable to reproduce this problem in windows.

UPDATE: I just started experiencing the battery not fully charging problem that many users are reporting with the Z71V. ASUS has confirmed this issue and says they are working to find a solution. I heard one technician say that its a problem with how the laptop is charging the battery, that causes them to fail prematurely. Fortunately, since mine is under warranty, I get a new battery for free. Although I was told the problem will surface again, which is unfortunate. I was also told that leaving the battery out while using AC power may increase the life of the battery (perhaps a good option if yours is out of warranty).
Here is a rather large ongoing forum on this issue:
Z71V Battery Problems...

Xorg config

My xorg.conf, you may find it useful. Now a separate file by suggestion of Paul Clark.
xorg.conf