This document describes what I needed to do to get Fedora Core 1 working optimally on my ThinkPad T30, model 2366-QU8:

Installation

I didn't need to do anything special during the installation. But if you want to use hibernation, you should leave some room on your disk for a FAT partition that the hibernation file will live on; see below.

Also, if you have the Cisco mini-PCI wireless card, you may need to run Windows to downgrade the firmware so it will work under Linux. If you're planning to blow away Windows entirely, deal with this first; see below.

Pre-built Packages

Dag Wieers' apt-rpm repository has many of the packages necessary for Thinkpad support already built, which makes this process a lot faster. Install his apt package or add his repository to your sources.list.d, if you already have apt. More information at the link above.

It's probably possible to access his repository through up2date, but I haven't tried that yet.

Suspend/Hibernate

Suspend seems to work fine out of the box. Hibernation is a bit more complicated. If you're running in APM mode (which you are, unless you explicitly enabled ACPI), you can use the BIOS hibernation support.

The hibernation file needs to live in the root directory of a FAT (16 or 32) partition. This can be a dedicated partition or you can share it with a Windows installation. It has to be FAT, though, not NTFS. If it's a dedicated partition, you can give it partition type 16 (Hidden FAT16) so that it doesn't show up under Windows. I think it also needs to be a primary partition, though some people have suggested otherwise.

The file needs to be large enough to hold your main RAM and video RAM, plus about 1MB. The IBM hibernation utility diskette does a precise calculation for the necessary file size: for my 512MB system it said that the minimal size was 540765K, which seems to be 512MB main + 16MB video + 3K of mystery memory--presumably various bits of system state. It then created a file 541616K long, a further 941K. This seems to be the result of tacking on the 938K save2dsk.xga file that comes with the utility and then rounding up to the nearest 4K cluster boundary.

The partition will need to be larger yet, to allow for filesystem overhead and partition sizing constraints.

In addition to the boot floppy, IBM offers a Windows program for creating the file. Or to create the file under Linux, download tphdisk.c from Andrew Tridgell, compile it and follow its instructions.

Note that you need to power-cycle the laptop for the BIOS to notice the hibernation file; a soft reboot isn't good enough.

Out of the box, the Fedora X server freezes on resume from hibernate; apparently this is because the video hardware isn't properly reinitialized. To fix this, you can install new DRI drivers from Charl P. Botha. I used the CVS tarball from his website. I tried getting a newer snapshot from the DRI project webpage, but it was incompatible with the Fedora X server.

To install it, first you need to make sure that your kernel source tree is properly configured for building modules:

Then unpack the tarball and run its install.sh as root.

The swsusp project is working on software hibernate support, as seen in Windows XP. I haven't tried it out yet.

Other Power Management

The Fedora kernel supports clock speed modulation for the P4-M, but for some reason it isn't enabled by default. So you need to add

  modprobe p4-clockmod
to your /etc/rc.local or /etc/rc.modules.

The tpctl package provides detailed control of various Thinkpad features--power management, display configuration, touchpad support, etc. Install it with

  apt-get install kernel-module-thinkpad tpctl
You may also need to add these lines to your /etc/modules.conf:
  keep
  path[thinkpad]=/lib/modules/`uname -r`/thinkpad
  alias char-major-10-170 thinkpad
Not all of the features work with newer thinkpads, but many do.

The apmiser daemon included with tpctl claims to be smarter about CPU throttling than the kernel; to enable it, add

  apmiser -d
to your /etc/rc.local.

There's a new GUI for tpctl called configure-thinkpad. There don't seem to be any rpms floating around yet.

You might also try the cpufreq or cpudyn packages, both available via apt-get. cpufreq will load the clockspeed module when it starts up if you edit /etc/sysconfig/cpufreqd appropriately.

The Fedora release notes brag about the new /proc/sys/vm/laptop-mode which is supposed to bundle disk accesses to save battery power, but I still see the disk activity light come on about every 5 seconds (the ext3 commit interval?). This version of the patch includes a script which modifies /proc/sys/vm/bdflush, which the Fedora apmscript doesn't do.

apmd also seems to be failing to run apmscript change power when I suspend on AC and resume on battery.

Ethernet

02:08.0 Ethernet controller: Intel Corp. 82801CAM (ICH3) PRO/100 VE (LOM) Ethernet Controller (rev 42)
Works fine. Fedora automatically uses the e100 driver; other people have also reported success with the eepro100 driver.

This page has an interesting hack for automatically bringing up eth0 when a cable is plugged in.

Video

01:00.0 VGA compatible controller: ATI Technologies Inc Radeon Mobility M7 LW [Radeon Mobility 7500]
XFree86 4.3 seems to support the M7 chipset quite well; even 3D programs run properly out of the box. But see above about upgrading the DRI drivers to fix hibernation.

I like to use a graphic console on my laptop via the vesafb driver; to get that I add

  vga=791 video=vesa
to the kernel line in /boot/grub/grub.conf. That's for the 1024x768 display; if you have the 1400x1050 display, you'd use vga=834 instead.

On a previous laptop I used video=vesa:ywrap,pmipal for the best performance, but that seems to have problems on the T30. I tried ypan instead of ywrap, but scrolling backwards is horribly slow. I'm not sure that you need to write video=vesa at all if you don't want to specify more options.

Ben Pfaff says that the radeonfb driver also works, but causes problems.

I haven't played with TV-out yet. The GATOS project apparently has extra-special drivers for TV in/out support on ATI hardware.

Special keyboard support

For ThinkPad button support and on-screen feedback for the volume/mute keys, install the tpb package with
  apt-get install tpb xosd
It works fine out of the box, but man tpb has configuration information.

The next step is making the Back/Forward buttons by the arrow keys navigate forward and back in Mozilla. Rob Mayoff has some instructions. Unfortunately, tpb interferes with this, so you need to either stop tpb or patch it to stop interfering with these keys. There is a patch here, but you'll need to apply it yourself. There's a thread dealing with this stuff.

UltraNav Touchpad/TrackPoint support

The UltraNav works pretty well out of the box, but the middle blue button doesn't work, either as a middle button or for scrolling.

Linuxcare has some notes on getting support for all of the features of the Synaptics touchpad under X.

Fabrice Bellet has instructions for getting middle button support by reading mouse events through gpm.

Other hacks:

I'm not currently using any of these.

Modem

00:1f.6 Modem: Intel Corp. 82801CA/CAM AC'97 Modem Controller (rev 02)
The modem in the Thinkpad seems to work with the Smartlink drivers. Install them using
  apt-get install kernel-module-slmdm slmdm-utils
And add to /etc/modules.conf:
  alias char-major-212 slmodem
  alias slmodem slamrmo
  options slmdm country=USA
Dag's comments in the SRPM, and others I've heard elsewhere, suggest that versions of the driver after 2.7.10 don't work properly, which is why his rpms have not been updated to the latest version (2.7.14 at time of writing).

Fabrice Bellet mentions a new driver, named "slmodem" rather than "slmdm", available at the SmartLink FTP site.

I haven't actually tried to use the modem other than to verify that it responds to AT commands, so YMMV.

Wireless

02:02.0 Network controller: AIRONET Wireless Communications Cisco Aironet Wireless 802.11b
If you have the Prism2-based IBM 802.11b wireless card in your laptop, you have many driver options; see
Karl Auer or Ben Pfaff for more information.
If you have the Intel PRO/Wireless 2100 card, you'll have a harder time getting it to work, as Linux support is still under development. Andrew B has more information.
I have the Cisco MPI350 card, so that's what I'll talk about.

Install Fabrice Bellet's driver and the Cisco utilities using

  apt-get install kernel-module-airo_mpi aironet-utils
Actually, you probably need to be more specific about which version of the module you want, but running the above command should tell you which versions are available. If you want, you can also install the Cisco driver (kernel-module-mpi350), but it doesn't support the normal Linux wireless interface.

You may need to add this to /etc/modules.conf, if kudzu doesn't do it for you on the next reboot:

  alias eth1 airo_mpi

Once the airo_mpi driver is loaded, you should be able to run

  cat /proc/driver/aironet/eth1/Status
to get the firmware version of your MPI350. The conventional wisdom is that version 5.00.03 is the best version for Linux support; if yours has a later version installed, you must downgrade it to 5.00.03 before it will work under Linux. If the driver fails to load, or fails to give you its status, you probably need to downgrade the firmware first.

If getting the status works, you might be able to downgrade the firmware from within Linux using the Cisco acu program--I haven't tried this, so proceed at your own risk. To give it a try, download the 5.00.03 firmware from the MPI350 firmware page, run acu as root, and use the Commands/Load new Firmware menu option to install the new firmware.

I wasn't so brave, so I used Windows to downgrade the firmware. To do this, download the 2.1 bundle for the appropriate version of Windows from the Windows Express Bundle page and follow the instructions to install the driver, ACU, and then the firmware. If you continue to run Windows, do not upgrade the Windows drivers for the MPI350, as they tend to silently update the firmware at the same time, and newer drivers don't work properly with the older firmware.

Unfortunately, the latest entry on Fabrice's web page suggests that he won't be maintaining this driver much longer.

I note that turning the radio off in ACU doesn't show up in iwlist eth1 txpower. It does seem to turn the radio off, though. Turning it off using iwconfig eth1 txpower off does show up in the ACU status. The driver also disables the radio if you run ifconfig eth1 down, so you don't really need to worry about manually disabling the radio on airplanes and to conserve battery.

Hard disk

TOSHIBA MK4019GAX
00:1f.1 IDE interface: Intel Corp. 82801CAM IDE U100 (rev 02)
Fedora automatically enables DMA and multiple-sector transfers for the hard disk, which provides a healthy hdparm -t benchmark of about 25MB/sec.

Manually enabling 32-bit transfers (hdparm -c1) doesn't seem to have any effect. Neither does unmaskirq (hdparm -u1); it might improve system responsiveness during heavy disk access, but I've seen comments about it interfering with suspend, so I think I'll just leave it off.

DVD/CD-RW combo drive

HL-DT-STCD-RW/DVD DRIVE GCC-4240N
Fedora automatically sets the drive up to use ide-scsi, and writing a cd with cdrecord works just fine.

UltraBay hot-swapping

I haven't found any reports of actually getting hot-swapping to work with the T-series UltraBay; nobody seems to know how to tell the UltraBay hardware to stop beeping, that it's OK to remove the device.

Warm-swapping (i.e. swapping devices during suspend) seems to work fine, but you still want to deregister/register the IDE bus if either of the devices involved is IDE. Also, if you are using a CD writer, you need to unload/reload the ide-scsi module or it (the module) will become very unhappy.

Tim Stadelmann's hotswap program was written for a Dell C600, but seems to work fine on my Thinkpad for registering/unregistering ide1 before and after the suspend. I've put together some RPMs which can be found here, along with a hotswaprc which handles the module magic.

There's an out-of-date script to automate this process called ultrabayd that mostly looks like it should work, but it needs to learn about CD-RW devices.

Sound

00:1f.5 Multimedia audio controller: Intel Corp. 82801CA/CAM AC'97 Audio Controller (rev 02)
Works fine out of the box. I haven't messed with alsa.

Security chip (TCPA)

IBM provides a driver for the TCPA chip, but I haven't tried it yet.

Infrared

I haven't played with IR support at all. Dag Wieers says it works with the ircomm-tty driver, once you've enabled it in the BIOS.

Other notes

I noticed that all of my devices were sharing IRQ 11. This turned out to be because the BIOS was set to assign IRQ 11 to all PCI devices. I changed all of those settings to Auto, and they spread out more. No idea if this makes any difference at all.

PCMCIA seems to work fine. I haven't tried USB.

I find that the new VM randomization feature of the kernel interferes with debugging, so I turn it off by adding

  echo 0 > /proc/sys/kernel/exec-shield-randomize
to /etc/rc.local.