Linux on the Dell Latitude D800

Its been very hard for me to keep this page up to date, as the D800 has lots of cutting edge hardware from a Linux perspective. While it works very well (and is very high performance) in general, the support for it has been pretty volatile. Case in point is suspend-to-disk and suspend-to-ram, just today (2004/03/05) someone finally reported success with both suspension styles and all the patches required to do it. Its still not in mainline kernels, which means that data on this page goes out of date very quickly.

In light of that, I started a Yahoo group a while back, where everyone can post their own information to an archived mailing list, and people can post files, etc. This is the group homepage: Linux on Latitude D800s. I strongly encourage you to join the group and check the archives for the most recent information. You'll notice that the status page here is nearly completely green now - everything works, but the most bleeding edge capabilities only have instructions in the mailing list, and I'm not sure when I'll get a chance to update my cookbook here.

On the other hand, if you do follow these instructions here, I promise that you will quickly have a working laptop, with nearly all features working (just no suspend states). Doing that first (so you can use the laptop) and then using it as a base for experimentation with the mailing list information might be a good way to go. Either way, good luck, and please post any success stories or questions to the mailing list.

--Mike

The following information assumes knowledge of how to install a new Linux kernel at minimum. Knowing how to configure one and patch it will help, though I give explicit instructions below. See the Linux Kernel HOWTO for help. You may find precompiled kernels/modules here in the future but for now it's just patches and advice.

Subsystem
Status
Updated
Info
Hard Disk - IDE/(U)DMA

5/20/2003 ~29MB/s throughput with a patch or a release candidate kernel
Optical - DVD-ROM/CD-RW

6/8/2003
Worked great, burnt fine, hot-swapping works, but seized up (details below). It did get replaced quick though...
Audio

5/23/2003 Fully functional with ALSA drivers. Mixer working well with hardware keys
Keyboard - special keys

5/1/2003 fully functional after configuration
ACPI / Power Management

5/23/2003 requires release candidate kernel, but  most things work
ACPI / Suspend/Resume

3/5/2004 Suspend-to-ram and suspend-to-disk working - check the Yahoo list archives! Thanks to Christoph Lukas among others for instructions
Xserver

5/23/2003 working very well - open source driver (no 3d acceleration) required for suspend states
Firewire

5/20/2003 Reported as working great by others, out of the box
Ethernet

5/2/2003 5705M chip has two drivers that should work.Using the Broadcom driver currently
Modem

6/2/2003 binary drivers work if you need it
USB
5/23/2003 USB1.0 and USB2.0 work great
Infrared

8/18/2003 haven't even tried it yet. Does anyone use infrared on laptops? Reported working
Mini-PCI

11/6/2003 Careful! TrueMobile 1150 miniPCI works great, but TrueMobile 1300/1400 requires a proprietary driver loader
PCMCIA
4/30/2003 works out of the box
Bluetooth

5/1/2003
works like a charm according to many sources
Smartcard reader

8/18/2003
Reportedly has no driver for linux.

[ Green - Working/tested ] [ Yellow - Partly working / tested ] [ Orange - Untested ] [ Red - Not working ]

Acknowledgements

First, let me acknowledge that this page is almost a direct rip off of Graeme Wilford's page for RedHat 9 on Inspiron 8500 laptops. In grand Free Software tradition I liked his format a lot so I blatantly copied it. The data has been altered where necessary for D800 laptops (obviously), but his page was a fabulous starting point for what is basically very similar hardware. Not just the style, but some of the words are definitely still his, so he should get a ton of credit. Thanks Graeme!

Andrew Fritz is working on Gentoo specific instructions that work well as an add-on to this page. If you use Gentoo, you should check out his page and maybe work with him to make the Gentoo experience a happy one.

If you are interested in getting this machine to work on the newer linux 2.5.x kernel series, Bert Hubert has a page devoted to that.

I just found a D600 page from Martin List-Petersen (the D600 has very similar hardware to the D800) that may be interesting, check it out. Of special interest is the bluetooth section - he's done the work to get bluetooth working with his cell phone for GPRS internet access. He's also got the Truemobile 1150 card working (since the 1300 and 1400 have no drivers). I also just got a report from a mostly anonymous "ewcp" on the yahoo mailing list that the D600 works well with all the instructions posted below, so those machines probably work pretty well too.

Summary

Update 5/16/2003: I was getting lots of information from people via email, but felt it would be best if everyone could communicate through each other instead of just through me, so I created a yahoo group to get a free mailing list with archives etc. If you'd like to join in the conversation, here's the group homepage: Linux on Latitude D800s.

With the exception of the wireless card and the suspend power management states, this laptop works pretty well.

I'm writing this page on the laptop, using the 2.4.21-rc2-ac2 kernel (Follow the ACPI instructions below, then add the nvidia and broadcom drivers and you're set)

Update 5/13/2002: Tudor Hulubei actually has the ACPI and PCI patch working with the Redhat 2.4.20-9 kernel. Its brand new so may be raw, but here's the source RPM if you would like to play around with it. I haven't tested it yet, so feel free to report success or send patches/updates to parts of it. From what people have discovered, this will probably lock up when you use the binary nvidia driver and close the lid, but the -ac series of kernels doesn't have that problem so we should be able to build a source rpm eventually that works.

Introduction

This guide (currently a work in progress) might help you to get the most out of your Inspiron D800. Mine arrived with Windows 2000 installed which was for the most part, useless to me. I installed RedHat 9 but most of this is distro-independent.

The D800 is a huge machine due to it's wide aspect-ratio screen, but it's relatively light, looks good, comes packed with technology, and is supposed to run well on a battery. Mine has these configurable components:
These are the main on-board components:

Preparing for installation

This was easy for me - I really didn't care for windows at all, and knew what the hardware on the machine was, so I simply started installing linux...

Installing RedHat 9.0 (RH9)

The first thing you notice is the ieee1394 driver being loaded. Then it boots anaconda and you're in X. The graphical install works fine. Don't panic if you see horrible lines across the screen for a few seconds, it takes a little while for the vesa graphics driver to kick in and initialise properly.

I did a custom install of all packages, with a very simple (clean, in my opinion) partitioning scheme. I used ext3 for all mountable filesystems.

Once the install gets going, the first thing you notice is how slow it is. The complete set of packages took around 2 hours to install! Here's why...

Hard disk IDE interface:

Update 5/20/2003: The linux-2.4.21-rc2-ac2 kernel (the one I'm recommending people use right now) supports the IDE chipset out of the box as well.

Update 5/14/2003:
Igor Fedulov has written in to report that the newest Redhat 9 kernel does actually support this IDE chipset. So simply updating to the latest errata kernel will get you supported here, but you'll still need patches for ACPI.

The RH9 out-of-the-box kernel (2.4.20-9) does not recognize the IDE chipset and this means that although your disk will work, it won't use (U)DMA. Without DMA, you get about 3Mb/s depending on hdparm options! Pretty poor showing.

The only thing you need to get the IDE interfaces up to speed is for the Linux kernel to recognize the chipset, and drive it to its maximum. That's accomplished with a simple patch.

My original BIOS patch was very flawed, and I apologize. It worked for me, and I've discovered that the reason why is because linux-2.4.21-rc1 already has a patch applied that recognized the PCI chip. Anyway, Tudor Hulubei pointed out to me that Graeme's patch does work for linux-2.4.20 though (thanks!), and it will get your hard drive working at just under 29 MB/s.

Otherwise, just follow the first part of the instructions for ACPI below to get kernel 2.4.20 and patch it up to 2.4.21-rc1 and you'll have a recognized PCI chipset.

You can verify that the patch worked and your IDE chipset is being recognized using hdparm. The specific command that will give you the timings is `hdparm -t /dev/hda`. You should run it a few times to make sure its stable, and you shouldn't have anything else running on the computer.

Optical Drive - DVD-ROM/CD-RW

Update 6/8/2003: I just got a secondary battery (I can get 5.5 to 6 hours on battery now, with wireless running, sweet) and discovered after some trial and error that the optical drive is actually hot-swappable, with full operating system support from what I can tell. You need the idectl script that normally comes with hdparm but doesn't come with RedHat 9 for some reason. You just tell it `idectl 1 off` to take the optical drive out and put the battery in, and you tell it `idectl 1 on` to get the optical drive working again. This was an unexpected bonus from this laptop, I'm pretty happy about it.

Update 5/19/2003: I called Dell last Thursday, they sent a new optical drive, and it works great (for now). So, snappy service (I do like Dell for that), and I guess I'll be more careful about when I open the drive going forward.

Update 5/13/2003:
Over the weekend, I was digitizing quite a bit of music, and while its extremely snappy (<6 minutes/disc) I made a user error that apparently has hardware consequences. I opened the drive during optical disc access (cdda2wav, it wasn't mounted), causing lots of understandable I/O errors. The bad part is that closing the drive didn't reset things as you'd expect - I still haven't gotten the drive to think the tray is closed, and the drive motor will never spin up. I can hear the laser seeking, but no spinning. I haven't worked with Dell yet, but be very careful about when you open the optical drive if don't want the hassle.

With the patch above, no tuning is necessary, and the errors I saw can no longer be reproduced. The optical drive is completely stable now, as far as I can tell, even under very heavy load.

Audio - Sigmatel 9750

Update 5/20/2003: There is a buzzing noise on a lot of these laptops when they are plugged in and the battery is fully charged. Apparently (I haven't tried this but Igor Fedulov has) if you ask for a replacement, they'll send a new power adaptor and it should get rid of the sound. There's ongoing investigation into this, and I need to try it since the buzzing is irritating...

Out of the box, the audio on this machine "mostly" works. If all you use is xmms, it will work most of the time. The problem is that sometimes the i810 module sets the sound chip up with a totally bizarre clock frequency. You're probably familiar with "44.1 kHz" in relation to audio - 48kHz is another common clocking. My chip was initialized to 19333 Hz last time though - the end result being that the gnome sound daemon 'esd' crashed. There's hope though, you just need the ALSA project drivers. Following the outline of Graeme's instructions, here is how I got sound working on this machine:
  1. Grab the files you'll need from the ALSA project. Freshrpms.net has RPMs, so here's what I did:
    1. wget  http://ftp.freshrpms.net/pub/freshrpms/redhat/9/alsa-driver/alsa-driver-0.9.3a-fr1.src.rpm
    2. wget  http://ftp.freshrpms.net/pub/freshrpms/redhat/9/alsa-lib/alsa-lib-0.9.3-fr1.i386.rpm
    3. wget  http://ftp.freshrpms.net/pub/freshrpms/redhat/9/alsa-utils/alsa-utils-0.9.3-fr1.i386.rpm
  2. Build the kernel module for our custom kernel (special thanks to Graeme for this incantation):  `rpmbuild --rebuild --nodeps --define "cards intel8x0" alsa-driver-0.9.3a-fr2.src.rpm`
  3. Install the kernel module and driver - the kernel is custom, so you have to tell it --nodeps: `rpm -Uvh --nodeps /usr/src/redhat/RPMS/i386/kernel-module-alsa-0.9.3a-fr1_2.4.21_rc2_ac2.i386.rpm /usr/src/redhat/RPMS/i386/alsa-driver-0.9.3a-fr1.i386.rpm`
  4. Install the library and utilities: `rpm -Uvh alsa-lib* alsa-utils*`
At this point, you should add these lines to your /etc/modules.conf:

# ALSA portion
alias char-major-116 snd
alias snd-card-0 snd-intel8x0

# module options should go here
 
# OSS/Free portion
alias char-major-14 soundcore
alias sound-slot-0 snd-card-0
 
# card #1
alias sound-service-0-0 snd-mixer-oss
alias sound-service-0-1 snd-seq-oss
alias sound-service-0-3 snd-pcm-oss
alias sound-service-0-8 snd-seq-oss
alias sound-service-0-12 snd-pcm-oss

Finally, remove your i810_audio and ac97_codec modules (`rmmod i810_audio ac97_codec`) and install the new driver (`modprobe snd-card-0`) and you should have fully functioning audio immediately. Enjoy.w

Keyboard - special keys

Interestingly (and Graeme notes this about the the I8500 as well), with ACPI enabled the Fn+F3 and Fn+F8 keys combinations no longer have any effect. I have no idea why that's the case, but it is.

At any rate, I've got the keys working in one of the 3 or 4 ways that it can be done. I humbly believe my way is the easiest since it doesn't involve any daemons (it uses the window manager to monitor for the events), but that's just my opinion. Many others find "acme" to be extremely easy and highly recommend it. I haven't tried it.

The way I did it was to disable the XKEYBOARD extension in my XF86Config, so that I could modify the /etc/X11/Xmodmap file without danger. I then added mappings to the Xmodmap file that corresponded to the volume up, volume down, mute and eject buttons.

Finally, I modified my sawfish keybindings so that the new key mappings were picked up and were used to execute external commands. I used amixer for the volume commands and eject for the eject command.

Updated 5/23/2003: The main problem with controlling the mixers is that the mixer chip will mute the main channel if you have headphones plugged in and then take the volume down to zero. That means that if you use the "toggle" mixer command for mute, you may end up in an undefined state where main is muted and headphone isn't (or vice versa) and you'll no longer be controlling the channels the way you want. Additionally, it will take the main channel down to zero volume if you mute it with headphones in.

To work around that behavior, I just set the volume to zero and mute headphone and main speaker channels for any mute key event, and then use the volume up and down commands to move the headphone and main volume and unmute both. It seems a little strange and somewhat, but its the only way I found to make the behavior 100% reliable. Now both channels are guaranteed to be in sync and unmuted when moving volume around, and muting is guaranteed to shut down all audio - it just doesn't work like a toggle.

Get the XF86Config file from the X section (it disables the XKBD extension which is supposed to be the right thing to do if you use an Xmodmap), then use this file as the /etc/X11/Xmodmap, and here's my ~/.sawfish/custom so you can see the mappings (the important ones are in the "custom-set-keymap" entry at the top of the file).

Here's the shell commands if you want try them out:

volume down: amixer sset Headphone,0 5%- unmute; amixer sset Master,0 5%- unmute
volume up:   amixer sset Headphone,0 5%+ unmute; amixer sset Master,0 5%- unmute
mute button: amixer sset Headphone,0 0% mute; amixer sset Master,0 0% mute

Power/voltage/frequency/temperature Management

ACPI

Update 5/23/2003: Eddie Gonzalez-Solares reports that the ACPI processor module doesn't let you select all 6 of the processor states, only P1 and P2. I've seen this myself, but hadn't investigated. Eddie mentions that he disabled the processor module in the kernel and then downloaded Intel's binary ACPI processor module from their developer site and he is able to manipulate all 6 of the processor states. Andrew Fritz tried to reproduce this and had some difficulty with the stock kernels, but reports that Intel's binary processor.o will load with the -rc2-ac3 kernel. Alan Cox kernels continue to be the ACPI leaders all the way around.

Update 5/20/2003:
Something in the "-ac" series that Alan Cox has fixed but not put in the mainline kernel is required to make ACPI work correctly. Luckily, the linux-2.4.21-rc2-ac2 kernel works great and has ACPI integrated, so the instructions and files have been updated to use this kernel version.

Update 5/13/2003: There is a new BIOS out (release notes), and none of this has been attempted with the new BIOS. The release notes indicate the ACPI code in the BIOS was changed slightly, so I'm not sure if they've fixed anything or broken more things.

The D800 does not support APM. It only supports the newer standard of ACPI. This is important not only for suspend+resume but also for thermal management and battery life.

The acpi support within 2.4.20-9 is turned off by default but doesn't work even if you turn it on - the ACPI support in the mainstream kernel is simply too old. Using the kernel 2.4.21-rc2-ac2 along with a new ACPI DSDT from the acpi.sf.net site, things work though. What works? The power buttons and lid switch, CPU temperature, CPU power usage, AC status, and battery level. Everything but the fans, actually, and those are programmatically controllable by the i8kutils, so they work too, just separately. What more could you want?

So, how do you do all that? Well, it takes a little time, but its not rocket science - other people have done all the work - you just have to put it together. These are the exact steps I took to get it to work. I even re-did my work while I was writing this, so they are tested instructions, and it really should work for you.

  1. Move into the /usr/src/ directory to perform these steps (cd /usr/src)
  2. Grab the stock linux 2.4.20 kernel (wget http://kernel.org/pub/linux/kernel/v2.4/linux-2.4.20.tar.bz2)
  3. Unpack the new kernel (tar -jxvf linux-2.4.20.tar.bz2)
  4. Grab the patch to 2.4.20-rc2 (wget http://kernel.org/pub/linux/kernel/v2.4/testing/patch-2.4.21-rc2.bz2)
  5. Unzip the patch (bunzip2 patch-2.4.21-rc2.bz2)
  6. Patch the kernel (cd linux-2.4.20; patch -p1 < ../patch-2.4.21-rc2; cd ..)
  7. Grab the patch to 2.4.21-rc2-ac2 (wget http://kernel.org/pub/linux/kernel/people/alan/linux-2.4/2.4.21/patch-2.4.21-rc2-ac2.bz2)
  8. Unzip the patch (bunzip2 patch-2.4.21-rc2-ac2.bz2)
  9. Patch the kernel (cd linux-2.4.20; patch -p1 < ../patch-2.4.21-rc2-ac2; cd..)
  10. Rename the kernel directory to match its version (mv linux-2.4.20 linux-2.4.21-rc2-ac2)
  11. Move into the kernel directory - the rest of the work is in the directory (cd linux-2.4.21-rc2-ac2)
  12. The installed ACPI DSDT on D800s is broken (at least with the A00 BIOS). You need to get one that works - it can be found here though it originally came from Markus Gutschke from acpi.sourceforge.net (wget http://mikehardy.net/linux_latitude_d800/dsdt.hex)
  13. Move the new ACPI DSDT into /tmp so the kernel compile can find it (mv dsdt.hex /tmp)
  14. Grab a patch which will make ACPI load a new DSDT into your kernel (wget http://mikehardy.net/linux_latitude_d800/osl.diff)
  15. Patch the kernel to load the new DSDT file (patch -p1 < osl.diff)
  16. Either configure the new kernel, or download my kernel config (wget http://mikehardy.net/linux_latitude_d800/.config - you'll need to "make oldconfig" if you use my config file without running the configuration tools yourself or the 'make dep' in the step below will fail) Note: ACPI support is not compiled as a module - you need to load them all the time anyway, so it makes sense to compile them in directly.
  17. Build the kernel (make clean; make dep; make bzImage; make modules; make modules_install)
  18. Install the kernel (cp System.map /boot/System.map-2.4.21-rc2-ac2; cp arch/i386/boot/bzImage /boot/vmlinuz-2.4.21-rc2-ac2; then I use LILO personally so I add a lilo entry and re-run lilo - if you grub you just need to a new entry to your file like the one in this example)
  19. Reboot, and ACPI should come up and work.
  20. Run dmesg and compare it to my dmesg output. (here's just the 'ACPI' lines grepped out)
  21. Check out how you can use it by reading the excellent processor an power documentation at http://acpi.sourceforge.net/documentation/index.html

I'm using acpid from acpid.sourceforge.net to automate the use of ACPI on my system, in combination with some nicely done scripts from the oft-mentioned Markus Gutschke. Here's the package of scripts here, they simply need to be expanded from the root ('/') of the filesystem. Another take on scripts to handle sleeping on lid events is available at Andrew Fritz's Gentoo D800 page.

If I turn the LCD down all the way, take out my PCMCIA card, take out the USB mouse, turn off the wireless and turn down my music, I can get around 3.5 hours of real work (Java development) out of it on one primary battery. It charges in 1.5 hours. Not bad.

For a look at a different take on getting ACPI to work (its pretty similar but different enough it may be good for context), check out what Graeme has done on his laptop for ACPI:

http://www.ee.surrey.ac.uk/Personal/G.Wilford/Inspiron8500/#Power_Management_-_ACPI 

Update 5/2/2003: I really wanted the battery status applet in gnome to work, but it generated a ton of load on my system, so I hacked it up to be more efficient. Now it only reads /proc/acpi/battery/BAT*/info once (instead of every time), and it only reads /proc/acpi/battery/BAT*/status every 30 seconds instead of every second. That made it about as CPU-friendly as I can think of to make it and I'm now quite happy with it. Here's the pre-compiled applet that I'm using (right-click -> "Save as...", put it in /usr/libexec/), or the patch vs. Redhat 9's gnome-applets RPM that I posted to the project.

Suspend+Resume

Not working very well yet. Here are what the states are supposed to be: http://acpi.sourceforge.net/documentation/sleep.html

S1: I do have the "standby" state working, it makes the power indicator blink, and stops all laptop functionality. When I hit the power button, it springs back to life. If you automate LCD blanking using acpid and scripts that respond to the LID ACPI event, you have a very nice power-saving state that should last many, many hours.

S2 isn't defined, and doesn't do anything.

S3 is defined as "save to ram", but doesn't do anything. I'd love to get this one working.

S4 locked the machine up, rather than "save to disk" as it was supposed to. I'll probably use swsusp.

S4Bios locks the machine up as well. Not the "save to disk via BIOS" that you'd expect...

S5 does shut the machine down, and the kernel uses it correctly when shutting the machine down, so this one works.

Please report any success you've had via email, with either ACPI or swsusp.

CPU frequency and voltage scaling

There is support for Intel SpeedStep available in the Redhat kernels and -ac kernels (like the one I'm currently recommending), but I haven't tried it.. Documentation is available in /usr/src/linux-2.4/Documentation/cpufreq. The ACPI "platform limit" seems to work semi-effectively out of the box (it certainly turns the performance down ;-) ), though I can't dial the processor down arbitrarily despite the appearance that I should be able to.

i8k - Inspiron 8k SMM BIOS driver (temperature management)

Information can be found here. The i8k driver is included in the default RH9 kernel but has to be force loaded on the D800 (modprobe i8k force=1). It provides BIOS, CPU temperature, fan and button status under /proc/i8k. The i8k utilities package v1.17 allows manual/programmed control of fans and volume control button status.

I've followed the instructions in the i8k package and sent the maintainer all the information to put the d800 in the list of supported BIOSes for the i8k package. He has acknowledged receipt fo the information, and hopefully it will be mainstream soon and work out of the box.

NB. Right/left fan control is reversed on the D800.

As a tangent, it should be said that the temperature control on this machine appears to be excellent. The fans turn on and off intermittently with or without i8k, ACPI, or anything at all. They are generally off or on very low, making it quiet, but they do spin right up when the hardware is really working. This part of the laptop, at least, seems perfect.

X @ 1920x1200 - AGP4x: Nvidia Geforce4 4200 Go

Update 6/7/2003: Haye Lau has contributed an XF86Config file that works for people who have the 1280x800 screen.

Update 5/23/2002: Markus Gutschke reports that despite the problems I'm having, on his Debian machine with XFree86 4.2.0 he has no problems whatsoever with 3d and proceeded to rattle off a long list of 3d programs he ran at once in various overlapping window configurations, in an obvious attempt to make me jealous (it worked). So, if you're using Debian with 4.2.0 and the nvidia drivers, you're probably fine. If you're not, you may have problems like I do, and hopefully you or I can track them down.

Update 5/23/2003:
Eddie Gonzales-Solares reports that the Intel AGP chip (an i855) wasn't recognized by the stock kernel or the Redhat kernel, but the -ac patch kernels (like the one I have instructions for) do recognize it. I haven't tested 3d since I've been using the -ac kernels, but this may eliminate the 3d lockups.

Update 5/22/2003:
Two people have reported difficulty getting the video driver to correctly drive the panel past 1024x768. The collective intelligence on the linux-latitude-d800 mailing list hasn't been able to figure it out yet. If you had this problem and solved it, please mail me or the list and let us know how.

Update 5/13/2003:
Be very careful with the brightest setting on this laptop. My LCD panel now has a light but noticable burn in from the bright parts of my desktop (window frames, etc). I haven't worked with Dell on this yet, but given the brightest LCD setting's ability to burn the screen in, I'd rather have a BIOS setting that let made that brightness unavailable. No brightness is worth burn-in potential. I frequently work on emacs for hours at a stretch, and I'm sure this will happen again. Malcolm Caldwell has confirmed that this is an issue for him, and his Gnome panel has burnt in as well. Igor Fedulov has had this issue using Windows, so its not a Linux-specific thing. Dell replaced Igor's LCD screen already, so the support is there, but its best if it just doesn't happen. Do be careful, and watch that brightness setting...

Update 5/13/2003: To get screen blanking to work, if you're using Gnome, use the "Advanced" tab in the "xscreensaver" dialog available from the "Preferences" menu. You can set the power saving features there, and the "Off" setting turns the LCD panel off. If that doesn't work for you, try manually setting the "off" timeout using the `xset` command. `xset dpms off 2700` turns it off in 45 minutes for instance. You can pop those lines into your X initialization files (.xinitrc maybe?) and they'll get your screen turning off.

Where to start? Nothing works perfectly. Well, there are two drivers, I'll start with the most feature-rich one.

The binary nvidia driver directly from Nvidia runs on this machine, and works mostly. Here's the XF86Config I'm using and the log it generates on startup (and here's one from Markus Gutschke). Both set the LCD up to run at 1920x1200, and both are largely similar. The problem is that 3D applications have the nasty habit of either hanging the machine outright, or rebooting it forthrightly. It doesn't take long either - just preview a few 3D X screensavers, and you'll see. The positive is that it is able to communicate via DPMS to the LCD panel. What does that mean? LCD blanking - the power saver of power savers. Combine that with the S1 sleep state, and you have a decent way to pack the laptop up and save it for a day or so.

It was indicated that AGP is usually the cause of crashes, so I've tried this driver with the Linux kernel agpgart module loaded, with the NVidia NvAGP, and with no AGP whatsoever. They all crash quickly when fooling with 3D modes.

Now, the 'nv' driver that comes bundled with XFree86 (and is open source, I have to mention) works spectacularly for 2D things. It will do 3D very slowly and lock up on returning from 3D as well though. Add to that the failure of the DPMS modes on the LCD panel, and its simply not as functional as the 'nvidia' driver, so I'm using that now.

If you find any way to get DPMS and 3D working in a very stable configuration, please let me know. If its not stable, I'm not touching it though - I may be a Quake addict but I need stability more than I need 3D.

Firewire - TI PCI4510

Joachim Kieferle reports that this works great. I don't have any devices myself, though if you have a digital video cam you'd like to send me ...

Ethernet - Broadcom 5705M

I exchanged email with the illustrious Dave Miller (who has done an enormous amount of work on the linux kernel) to get it supported. He already has code that supports it, and I'm waiting for the code in the form of a patch that should arrive from Jeff Garzik. (mini-update 5/23/2003: Its been a looong time since I mailed Dave or Jeff, and no patch ever came for the tg3 driver. I guess we'll just see it in 2.6.xx)

Update 5/2/2003: I've gotten a copy of the newest "official" Broadcom 570x driver, which supports the 5705M chip. The tg3 driver is the preferred driver (its in the stock kernel), but until I have the patch that extends it to support the 5705M, the bcm5700 driver from Broadcom does the trick. As root, do this to get it working:
  1. Move in to the kernel source area (cd /usr/src)
  2. Make a symbolic link to our kernel since the Broadcom build process expects to find the kernel source in /usr/src/linux (ln -s linux-2.4.21-rc1 linux)
  3. Make a directory for the driver to expand in to (mkdir bcm5700; cd bcm5700)
  4. Download the driver (wget http://mikehardy.net/linux_latitude_d800/bcm5700-5.0.16.tar.gz)
  5. Unpack it (tar -zxvf bcm5700-5.0.16.tar.gz
  6. Make the driver (cd src; make clean; make)
  7. Try it out (insmod bcm5700.o) - you should see output in /var/log/messages indicating it works.
  8. If that worked, you'll want to install it  so it works across reboots. (make install)
  9. I re-set my network settings to use it by putting "alias eth0 bcm5700" in /etc/modules.conf, then ran "service network restart"

Modem - Conexant D480MDC

It appears the manufacturer of the modem chip, Conexant, has taken notice of the linux community. I'm guessing the percentage of people using the chip and linux together isn't very big, so that's neat. If you go here, you can grab the modem that I've heard works for this laptop. We have to use the source RPM because we've got a custom kernel.

Philosophically, you have to be okay with this "tainting" your kernel. These modems are binary drivers, due to the patent issues surrounding modem functionality, and they are loaded in to the kernel using a tiny bit of open-source glue. I have to admit, that bothers me a bit, but I'm going to set it up just in case I need to the modem at some point in the future. So:
  1. Grab the driver source rpm (wget http://www.linuxant.com/drivers/hsf/archive/hsflinmodem-5.03.27lnxtbeta03042700/hsflinmodem-5.03.27lnxtbeta03042700-1.src.rpm)
  2. Install the source rpm (rpm -Uvh hsflinmodem-5.03.27lnxtbeta03042700/hsflinmodem-5.03.27lnxtbeta03042700-1.src.rpm)
  3. Build the RPM (rpmbuild -ba /usr/src/redhat/SPECS/hsflinmodem.spec)
  4. Install the RPMs (rpm -Uvh /usr/src/redhat/RPMS/i386/hsf*)
  5. Run /usr/sbin/hsfconfig (you have to specify the kernel source directory /usr/src/linux-2.4.21-rc2-ac2 here)
  6. Connect to the new modem (cu -l /dev/modem)
  7. Check the configuration by issuing a command to the cu prompt (AT&V)
  8. Enter '~.' to exit cu. 
It looks like its working. Need to get a modem line to test it for real.

Update 6/2/2003: Markus Gutschke mentioned that if you're using the -ac kernels (as I give people instructions to do) you need an extra patch after step 4. If you're not using the -ac kernels you don't need this, but if you do, download this patch graciously provided by Christian Soeller, then run patch from '/' I think as 'patch -p0 < ac-modem.diff'. I haven't tried that command line or the patch, so go easy on me if its slightly off (maybe the directory is wrong or you need -p1 or something) - fool around with it and it should work. Its just a one-line patch - you could even change it by hand. That makes it so that step 5 will actually compile.

USB - 82801DB USB UHCI Controller

Works fine with USB 1.0 devices (USB mouse). I don't have any USB2.0 devices, but Eddie Gonzales-Solares has a USB2 hard drive and reports that with USB1.0 he gets ~1MB/s while on this laptop he gets 13.8MB/s out of it, so that indicates its working wonderfully. Thanks Eddie!

Infrared

Untested.

Mini-PCI


Works great out of the box - it shows up as a device on another PCMCIA bus.
Its possible now to load the Dell TrueMobile 1300/1400 Windows drivers using a nifty (but proprietary) loader from http://www.linuxant.com/driverloader/
There is no known native driver for Dell TrueMobile 1300/1400 cards.


The TrueMobile 1150 works natively under Linux. The chip in this card is supported by the orinoco/hermes driver and works great. If this is interesting to you, the cards cost around $50 from Dell, but you have to be very specific if you call them. You must get the "Dell Truemobile 1150 miniPCI card" *exactly*. It was made for Latitude C640 laptops, but works in the D800 (I use it). The auxiliary antennae doesn't connect (the connector is just a little too short) but I've been using it for 4 months now as my primary network connection and its fine.

PCMCIA

Default kernel yenta-socket works great. I'm using an 802.11b card in it for network connectivity, and it worked out of the box and without any errors.

Bluetooth

I haven't tried to do anything with bluetooth at all, but I do have the modules compiled and it is detected fine. It even correctly registers and unregisters the module when you use the Fn+F2 key to turn the wireless off and on. That tells me that I can use the laptop on planes to watch DVDs without worrying about the wireless interfering with the avionics. Not a huge deal, but its comforting to know all the features seem to be functional as far as I've investigated.

Smartcard Reader

Interestingly, there is a smartcard reader hooked in with the PCMCIA card. I think it might be an o2micro module card, but that's a wild guess. Its totally untested right now

Other Resources


May 2003 - Mike Hardy <d800 - @ - mikehardy.net>