Linux on the HP nc6000

Last updated: Fri 24 Feb 2005.
The document and all its associated files are licensed under the GPL.

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

This is a provisional page that provides information on how to get Linux working on the HP nc6000 laptop. Since it took me a long time and lots of testing to figure all this out, I'm publishing it here in the hope that it will be useful.

NOTE: I have no longer have access to an HP NC6000 since my laptop's motherboard broke in August 2005. Therefore, this information is probably out of date.

Power management

Most stuff, e.g. fans, battery and AC adapter, works out of the box.

Processor clock speed modulation

This works using the standard 2.6 API. I use powernowd to keep the CPU clock down, keep the fans quiet and prolong battery life. You need to compile the cpufreq_userspace and speedstep_centrino modules for it to work.

If the processor acpi module is loaded, switching C1/C2/C3 states works, but, at least on my machine, C3 is almost never used. The main cuplrits are:

Suspend to disk

I use software suspend 2. I also tried S4 support in the vanilla kernel, but it's much slower, and when it resumes all disk caches are emtpy so the laptop is sluggish. With swsusp2, when you resume all the apps you have in cache start instantly.

Currently I'm using swsusp 2.1.8.9 on a 2.6.11.10 kernel and it's solid as a rock. A long time ago I had to set the Async IO limit to 256 or the machine would hang on resume, but maybe that's the default now. To suspend I use the hibernate script available from http://www.suspend2.net/downloads/. My configuration file is here.

Little nits remaining are:

Suspend to RAM (S3)

S3 "suddenly started working" for me when I moved to a vanilla 2.6.11-rc3 kernel, but it seems to be very picky about kernel configuration. At a minimum, you will need to disable radeonfb, which hangs the machine on resume. Standard vesafb works fine though. If you can't get S3 to work, first try my kernel .config.

The laptop comes out of S3 fine, but it doesn't initialize the video card on resume. You must do it yourself, either by using vbetool or by adding the acpi_sleep=s3_bios kernel parameter using lilo or grub. I use vbetool because it's available for Debian and it can save and restore the console state properly on suspend and resume.

The script I use for S3 suspend is here. Note that when the machine resumes, acpid will see the ACPI event caused by the power button (which you have to press to turn the machine back on), so if you have configured acpid to hibernate when you press the power button, as soon as the machine comes out of S3 it will immediately hibernate again! The scripts fix this by creating /var/run/S3 when going into S3 and checking for its presence in the power button script.

Suspending using the sleep and power buttons

To hibernate the machine when you press the power button, just configure acpid to call hibernate when the power button is pressed (unless the machine is coming out of S3, see above). The script I use is powerbtn.sh. On Debian, just put it in /etc/acpi.

Entering S3 when the sleep button is pressed requires a little more work. For GNOME, you first need to map the sleep button to the "Sleep" function in the Keyboard Shortcuts preferences. When you do this, GNOME calls the apm command as the user that is currently logged in. If you are not logged in as root (which you shouldn't be), you need to use a setuid application to call the S3 script. I use this simple C program, which I compiled and installed setuid root in /usr/local/bin/apm: apm.c.

I don't know how to to this in KDE, but it shouldn't be too different.

Battery and AC adapter status on resume

When you resume from S3 or S4, ACPI doesn't tell the OS if you have plugged in or unplugged the AC adapter or the battery while suspended. This can be a problem if you suspend on AC power and resume on battery: after resume, you don't know how much battery life you have left.

It's sometimes possible to work around this by reloading the battery and ac modules, but the best way I have found is to hack the DSDT so it generates ac adapter and battery events in the _WAK function. This a bit of a hack, but if you want to do it, the patch to the DSDT is here. To decompile and recompile the DSDT, you will need the iasl compiler (note: if you use Debian you need to install an old version of the flex package to compile iasl itself). To activate the new DSDT, you must add the following lines to drivers/acpi/osl.c:
#define CONFIG_ACPI_CUSTOM_DSDT
#define CONFIG_ACPI_CUSTOM_DSDT_FILE "/path/to/dsdt.dsl.hex"
or apply the DSDT in initrd patch and add the DSDT to your initrd.

Graphics card clock modulation

This saves a lot of battery power. To use it you either need to use the ATI proprietary driver (not tested) or the x.org server. See the graphics section below.

Networking

Wired

The integrated broadcom gigabit ethernet is supported by the tg3 driver. I use ifplugd to bring the interface up when the cable is plugged in. I use udhcpc as a DHCP client because it's small and fast and doesn't try to renew leases between sessions.

Wireless

The integrated Atheros 802.11a/b/g wireless is supported by the madwifi driver (you need to get it from CVS). The wireless switch "just works" (I think it disconnects the antenna or something). To automatically connect to wireless networks I use wpa_supplicant and ifplugd.

Graphics

ATI provides a proprietary driver which should work. I don't use it though, so the following stuff applies to the open source drivers that are available.

Dynamic clocks

This saves a lot of battery power. To use it, you need to use the x.org X server. If you are using Debian, useful information on how to compile x.org yourself is here. I think there are also prebuilt .debs somewhere, but I don't know where. To turn this on, just add:
	Option "DynamicClocks" "on"
to xorg.conf.

Backlight

With some versions of x.org, the backlight doesn't turn off on lid close. My lid script turns it off manually and also throttles the screensaver so as to save CPU power.

TV out

I've never been able to get this to work. Any pointers will be much appreciated.

3D acceleration

3D sort of works using r300_driver. You need a recent version of x.org (6.8.2 should be fine, but CVS is better) and Mesa from CVS. However, the machine sometimes locks up hard when running 3D apps and the quality of the driver is not yet very high.

Brightness control

This just works.

Hot keys

Getting key events

Downloads

Kernel configuration

Scripts and configuration files

These are the userspace scripts and configuration files I use. They are mostly Debian-specific, but you can probably modify them to fit your needs

DSDT patch

Links

Download links