Initial Step

The initial step was to boot an Ubuntu Live CD (Hoary Hedgehog was current at the time). Once booted I reconciled the output of the lspci command with the list of modules loaded. The results of Ubuntu's hardware detection confirmed some guesses and provided some information that I wouldn't have guessed - I think I saved a lot of time by doing this.

Preliminaries

I decided to use the Hitachi HTS548080M9AT00 disk that I'd previously upgraded to in my old laptop. The idea was to save on setup time. The T43 came with a 5400 RPM 40GB disk and my old disk was a 5400 RPM 80GB disk. The BIOS complained that the disk might not be properly supported, so I downloaded some new firmware and reflashed the disk under Windows - this seemed to be the only option... and I was in a hurry! I also needed a machine with a floppy drive, so I used the one in my old T22.

I started with a standard kernel.org 2.6.11.12 kernel but have since moved to 2.6.15.

Hardware and Kernel Drivers

IDE Controller

0000:00:1f.2 IDE interface: Intel Corp. 82801FBM (ICH6M) SATA Controller (rev 03)
    

Although Ubuntu showed the disk as sda and the CD-ROM drive as sr0, I missed this hint. First I tried the PIIX IDE driver with associated IDE device drivers.

ATA/ATAPI/MFM/RLL support (IDE) [Y/n/m/?] y
  Enhanced IDE/MFM/RLL disk/cdrom/tape/floppy support (BLK_DEV_IDE) [Y/n/m/?] y
    Intel PIIXn chipsets support (BLK_DEV_PIIX) [Y/n/m/?] y
    Include IDE/ATA-2 DISK support (BLK_DEV_IDEDISK) [Y/n/m/?] y
    ...
    Include IDE/ATAPI CDROM support (BLK_DEV_IDECD) [M/n/y/?] m
    

This configuration worked but I could not enable DMA on the disk. After some random Google searches I decided to try the PIIX/ICH SATA driver.

SCSI device support (SCSI) [Y/m/?] y
  ...
  SCSI disk support (BLK_DEV_SD) [Y/n/m/?] y
  ...
  SCSI CDROM support (BLK_DEV_SR) [M/n/y/?] m
  ...
  * SCSI low-level drivers
  Serial ATA (SATA) support (SCSI_SATA) [Y/n/?] y
    ...
    Intel PIIX/ICH SATA support (SCSI_ATA_PIIX) [Y/n/m/?] y
    

The help for the last option says this, so I've left the IDE driver compiled in as well.

          This option enables support for ICH5 Serial ATA.
          If PATA support was enabled previously, this enables
          support for select Intel PIIX/ICH PATA host controllers.
    

This works nicely.

I discovered after a while that DMA wasn't working on the CD-ROM drive either. As of Linux 2.6.14 libata will handle ATAPI drives and provides a boot (or module) option to enable this. There have been comments about ATAPI support being experimental, but it seems to work just fine for me. I have this in my kernel command-line options:

          libata.atapi_enabled=1
    

Works like a bought one! I've now compiled all the IDE support as modules and have none of it loaded. I'll remove it from my configuration next time I compile a kernel.

Sound card

0000:00:1e.2 Multimedia audio controller: Intel Corp. 82801FB/FBM/FR/FW/FRW (ICH6 Family) AC'97 Audio Controller (rev 03)
    

It uses the SND_INTEL8X0 PCI driver:

Sound card support (SOUND) [Y/n/m/?] y
*
* Advanced Linux Sound Architecture
*
Advanced Linux Sound Architecture (SND) [M/n/y] m
  ...
  *
  * PCI devices
  *
  ...
  Intel/SiS/nVidia/AMD/ALi AC97 Controller (SND_INTEL8X0) [M/n/?] m
    

Initially, the default settings for esd under GNOME caused distorted output. Changing the sample rate to 48000 fixed this problem. I added a line containing default_options=-r 48000 to /etc/esound/esd.conf to make this permanent. Then something changed, presumably in the driver, and the sample rate of 48000 was causing things to sound horrid. My first step was to remove the above esd setting, which improved things. My second step was to simply stop using esd and start using ALSA directly. Much better!

Wired Network Card

0000:02:00.0 Ethernet controller: Broadcom Corporation: Unknown device 167d (rev 11)
    

Ubuntu used the tg3 driver.

  * Ethernet (1000 Mbit)
  ...
  Broadcom Tigon3 support (TIGON3) [M/n/y/?] m
    

Initially this card didn't seem to support MII and I had to do some strange hacks to laptop-net to get it to play nicely. Since then, probably with a new kernel version, MII started working and everything works as expected.

Wireless Network Card

0000:04:02.0 Network controller: Intel Corp. PRO/Wireless 2200BG (rev 05)
    

Ubuntu used the ipw2200 driver. Linux 2.6.15 includes version 1.0.8 of this driver, which looks to be the latest. It was first included in the mainline kernel in version 2.6.14, although this was only version 1.0.0. Prior to that I was used version 1.0.8 courtesy of the ipw2200-source Debian package. The main web site for this driver is at Sourceforge.net.

To use the driver you have to download some firmware. I installed it in /lib/firmware, ignoring some documentation.

I'm using netapplet to control this interface.

USB

0000:00:1d.0 USB Controller: Intel Corp. 82801FB/FBM/FR/FW/FRW (ICH6 Family) USB UHCI #1 (rev 03)
0000:00:1d.1 USB Controller: Intel Corp. 82801FB/FBM/FR/FW/FRW (ICH6 Family) USB UHCI #2 (rev 03)
0000:00:1d.2 USB Controller: Intel Corp. 82801FB/FBM/FR/FW/FRW (ICH6 Family) USB UHCI #3 (rev 03)
0000:00:1d.3 USB Controller: Intel Corp. 82801FB/FBM/FR/FW/FRW (ICH6 Family) USB UHCI #4 (rev 03)
0000:00:1d.7 USB Controller: Intel Corp. 82801FB/FBM/FR/FW/FRW (ICH6 Family) USB2 EHCI Controller (rev 03)
    

These work with the EHCI and UHCI drivers. I've compiled them as modules so they can be unloaded when suspending (see later).

Support for Host-side USB (USB) [M/n/y/?] m
  ...
  *
  * USB Host Controller Drivers
  *
  EHCI HCD (USB 2.0) support (USB_EHCI_HCD) [M/n/?] m
  ...
  OHCI HCD support (USB_OHCI_HCD) [N/m/?] n
  UHCI HCD (most Intel and VIA) support (USB_UHCI_HCD) [M/n/?] m
    

Modem

0000:00:1e.3 Modem: Intel Corp. 82801FB/FBM/FR/FW/FRW (ICH6 Family) AC'97 Modem Controller (rev 03)
    

I've compiled the Intel MC97 modem driver.

Sound card support (SOUND) [Y/n/m/?] y
*
* Advanced Linux Sound Architecture
*
Advanced Linux Sound Architecture (SND) [M/n/y] m
  ...
  *
  * PCI devices
  *
  ...
  Intel/SiS/nVidia/AMD MC97 Modem (EXPERIMENTAL) (SND_INTEL8X0M) [M/n/?] m
    

I've tried using this module, and I've also compiled various non-standard modules, but I haven't been able to get the modem working.

X

0000:01:00.0 VGA compatible controller: ATI Technologies Inc M22 [Radeon Mobility M300]
    

This works fine using the radeon driver under the X.Org X Server (currently 6.8.2.dfsg.1-10 under Debian unstable). It didn't work under XFree86 when I initially tried it.

This configuration doesn't support accelerated 3D graphics, but I can live without that.

There's one problem I haven't yet solved (although I haven't tried recently). If X is started while the laptop is connected to an external monitor, I can never get anything to display on the laptop's LCD screen under X.

Software Suspend

I downloaded the Software Suspend 2 patch and hibernate script. I accepted something resembling the default options when I configured my kernel. Debian has a hibernate package, but it was one version out-of-date, so I applied the Debian patches as best as possible to the newer version and built a package and installed it.

This generally works flawlessly (but see below). Following a recommendation found via a random Google search, I've configured /etc/hibernate/hibernate.conf to remove the tg3 driver before suspending (via UnloadModules tg3 - and reload it via LoadModules auto). I've also configured it to bring down my network interfaces before suspending - I bring them back up manually as needed. I also restart Postfix (via RestartServices postfix and run Anacron upon resume (StartServices anacron).

Occasionally the machine hangs when suspending. I get messages that say something like "scheduling while atomic". I've got some debugging enabled to try and help track this down.

One important thing is that LZF compression needs to be built into the kernel.

*
* Cryptographic options
*
Cryptographic API (CRYPTO) [Y/?] y
  ...
  LZF compression algorithm (CRYPTO_LZF) [Y/n/m/?] y
    

I also added the following lines to /etc/hibernate/hibernate.conf:

ProcSetting disable_encryption 1
ProcSetting compressor lzf
    

I found this in the mailing list archives - it seems that the new encryption API in version 2.1.9.5 is broken, although I'm now using 2.2-rc9.

One vaguely undocumented thing is that, when using the swapwriter, more recent versions of Software Suspend 2 require the default resume location to contain the prefix "swap:", as follows:

CONFIG_SUSPEND2_DEFAULT_RESUME2="swap:/dev/sda5"
    

Other

Conclusions

Apart from the modem, everything seems to work fine.