The Thinkpad X22


Here are some notes on getting Fedora Core 3 to run on a Thinkpad X20 - including the modem.

System specifications

Model 2662-9BU
Processor Intel Pentium III/M at 800 MHz
Hard Disk 40GB Model IC25N040ATCS05-0 (hdparm gives transfer rates of about 25 MB/sec)
Memory 640 MB
Video Card ATI Technologies Inc Radeon Mobility M6 LY (8 MB)
Audio Intel Corp. 82801CA/CAM AC'97 Audio Controller
Ethernet Intel Corp. 82801CAM (ICH3) PRO/100 VE (LOM) Ethernet Controller
Modem Lucent Microelectronics WinModem 56k

As with most IBM machines, there are different configurations available for the X22. Mainly, they differ in the combo card provided in the laptop's miniPCI slot. Some models come with wireless (mine didn't).

Linux hardware support

Here's a list of drivers for the Thinkpad X22's hardware.

Video XFree86 / XOrg radeon driver with DRI support
Audio OSS support via i810_audio module. ALSA support via snd_intel8x0.
Ethernet e100 module
Modem ltmodem module / driver package

In general, the hardware of the Thinkpad X22 is well-supported. I initially installed Fedora Core 3 on this laptop, and all the hardware listed above except the Lucent modem was automatically detected and configured.

Power management is a bit tricky on this machine so far. I've had no luck at all with ACPI, and APM has been a mixed bag. Power management does not "just work". More notes on power management are below.

Installation of Fedora Core 3

I wanted to have hibernation working, so I created a 750MB DOS partition with the Windows 95 fdisk utility. I then formatted the partition with DOS, and copied the DOS system files to it in case I needed a BIOS update sometime in the future and had to boot to DOS to extract the update utility.

Device Boot Start End Blocks Id System Mount Point
/dev/hda1 * 1 99 748408+ 6 FAT16 Not mounted (for hibernation file)
/dev/hda2 100 113 105840 83 Linux /boot
/dev/hda3 114 252 1050840 82 Linux Swap swap
/dev/hda4 253 5168 37164960 83 Linux /

TODO: Add information on creating a hibernation file with tphdisk.c

Most of the install was uneventful. After the install, I had to disable rhgb (Redhat's graphical booting toy), otherwise X wouldn't work right. To do this, when the system gets to the GRUB bootloader screen, press a key to stop the system from booting directly into Linux. Hit "a" to edit the parameters for the kernel to boot. Delete "rhgb" from that line. This is a temporary change. To make it permanent, you can edit /etc/grub.conf (a symlink to the real GRUB configuration file) and remove "rhgb".

I installed your basic Personal Desktop system with development tools, then added multimedia stuff and downloaded the current FC3 updates from FreshRPMs.

Fedora Core 3 quirks and projects

Here's a list of things I'm working on.


With no changes to kernel parameters, ACPI suspend locks up on resume. Booting with acpi_sleep=s3_bios lets the notebook suspend and resume correctly from a text screen. The machine will suspend and resume from X as well, but the display will be garbled. The machine is still running, and can be shut down by (blindly) switching to a terminal and running shutdown -h now. This is, of course, not really useful for my daily work.

Maybe I'll try my luck with ACPI again when Fedora Core 4 comes out.


Booting with acpi=off allows APM hibernate to work, provided a hibernation file exists. APM suspend, though, still misbehaves - beeping a few times after shutting off the display and (sometimes) locking up the machine.

To allow the system to go into APM suspend, I edited /etc/sysconfig/apm-scripts/apmscript (even though the file says not to edit it :) ). I backed up the file first, then added the lines in bold.

# Red Hat APM suspend/resume script


[ "$UTC" = "yes" -o "$UTC" = "true" -o "$UTC" = 1 ] && CLOCK="--utc"

case "$PROG" in
/sbin/service pcmcia stop
[ -f /etc/sysconfig/apm-scripts/apmcontinue-pre ] && /etc/sysconfig/apm-scripts/apmcontinue-pre "$@"


/sbin/service pcmcia start


There is probably a cleaner way to do this, but I can't make sense of the comments at the beginning of the file telling me what script I am supposed to edit. The edits above will fix APM suspend, but are not necessary for APM hibernate.

Sound is muted when waking the computer from hibernation or suspend. It can be awakened by muting and then unmuting the Master and PCM channels. Doing either the master or PCM channels alone doesn't seem to work. This simple script (if run after resuming) should fix it.

# Fix: Unmute sound after suspend/hibernate
amixer set Master off
amixer set PCM off
amixer set PCM on
amixer set Master on

I put the script in /etc/syconfig/apm-scripts/apmcontinue. From my reading of the apmscript script, apmcontinue is run when suspending and resuming - but that doesn't matter for this purpose.

Occasionally, the sound will fail completely after a resume, and any attempt to use sound will spit out a bunch of error messages. If this happens, dmesg will show things like:

codec_write 0: semaphore is not ready for register 0x2
codec_write 0: semaphore is not ready for register 0x18
codec_write 0: semaphore is not ready for register 0x18
codec_write 0: semaphore is not ready for register 0x2
codec_write 0: semaphore is not ready for register 0x2
codec_write 0: semaphore is not ready for register 0x4
codec_write 0: semaphore is not ready for register 0x26
codec_write 0: semaphore is not ready for register 0x26

This can be fixed by removing and reinserting the snd_intel8x0 module. As root, enter:

modprobe -r snd_intel8x0; modprobe snd_intel8x0

When I am sufficiently motivated, I will probably script this. :)

APM suspend and hibernate seem reliable enough now that messing with ACPI is not a priority for me.

Update January 12, 2005: Fedora's 2.6.10 kernel update seems to have broken APM suspend / hibernate, so Thinkpad X22 users who use APM may want to stay away from this update for now.


ltmodem drivers can be compiled without installing the full kernel sources.

To get the modem to work, I had to modify /etc/rc.d/rc.local. I added:

# Fix: ltmodem drivers don't load correctly.
ln -s /dev/ttLTM0 /dev/modem
modprobe lt_serial

This is a udev thing. I will figure out how to do this "correctly" later, I'm sure.

For some reason the lt_serial module isn't automatically loading when trying to dial (instead, ppp fails with an error), so I simply load the module at boot time. The symlink is there because ppp also complains when the modem device is /dev/ttLTM0.

Thinkpad buttons

It's very easy to get the Thinkpad button to do something useful. In my case, I have it open up an xterm. To use the Thinkpad button (and to get visual feedback on all the special keys on the X22), you need two packages: tpb and xosd. You can get both of these from Fedora Extras. Once you download the packages and install them, edit /etc/rc.d/rc.local to load the correct kernel module for you:

# Needed for:
# tpb (thinkpad button driver)

modprobe nvram

Now, you can run tpb. I use a command line that looks like this, and I have it start when I log in:

tpb --osd=on --daemon --thinkpad="/usr/bin/X11/xterm"


Fedora Core 3 will autodetect and automatically set up a print queue for USB printers when they're plugged in. This is quite nice. Unfortunately, when FC3 sees my Samsung ML-1430 laser printer, the queue added defaults to a page size of A4. This makes all printouts the wrong size. Changing the page size with system-config-printer works, but only until the printer is disconnected. When reconnected, FC3 sets up the printer with A4 paper again. I've worked around the problem by manually creating a print queue for the Samsung printer, but it'd be nice to fix the automatic system. Any ideas?

Oddly, when I manually created the print queue for the Samsung, the default paper size was set to US Letter, and not A4.

USB fun

I have a Dynex USB 2.0 card based on an NEC chipset. This card works in Fedora Core 1, Fedora Core 2, and earlier versions of Red Hat, but does not work at high speed with Fedora Core 3. This is probably a kernel bug that needs to be reported to bugzilla when I get a chance.

dmesg on card insert -

PCI: Enabling device 0000:03:00.2 (0000 -> 0002)
ehci_hcd 0000:03:00.2: EHCI Host Controller
ehci_hcd 0000:03:00.2: irq 11, pci mem e8964000
ehci_hcd 0000:03:00.2: new USB bus registered, assigned bus number 4
ehci_hcd 0000:03:00.2: USB 2.0 enabled, EHCI 1.00, driver 2004-May-10
hub 4-0:1.0: USB hub found
hub 4-0:1.0: 5 ports detected
ohci_hcd: 2004 Feb 02 USB 1.1 'Open' Host Controller (OHCI) Driver (PCI)
PCI: Enabling device 0000:03:00.0 (0000 -> 0002)
ohci_hcd 0000:03:00.0: OHCI Host Controller
PCI: Setting latency timer of device 0000:03:00.0 to 64
ohci_hcd 0000:03:00.0: irq 11, pci mem e886a000
ohci_hcd 0000:03:00.0: new USB bus registered, assigned bus number 5
hub 5-0:1.0: USB hub found
hub 5-0:1.0: 3 ports detected
PCI: Enabling device 0000:03:00.1 (0000 -> 0002)
ohci_hcd 0000:03:00.1: OHCI Host Controller
PCI: Setting latency timer of device 0000:03:00.1 to 64
ohci_hcd 0000:03:00.1: irq 11, pci mem e8a3a000
ohci_hcd 0000:03:00.1: new USB bus registered, assigned bus number 6
hub 6-0:1.0: USB hub found
hub 6-0:1.0: 2 ports detected

This appears to be normal output.

Now here's dmesg output after plugging in the burner.

ehci_hcd 0000:03:00.2: fatal error
ehci_hcd 0000:03:00.2: HC died; cleaning up
ohci_hcd 0000:03:00.1: wakeup
usb 6-1: new full speed USB device using address 2
usb 6-1: not running at top speed; connect to a high speed hub
SCSI subsystem initialized
Initializing USB Mass Storage driver...
scsi0 : SCSI emulation for USB Mass Storage devices
Vendor: IOMEGA Model: CDDVD482416E23-C Rev: 0037
Type: CD-ROM ANSI SCSI revision: 02
USB Mass Storage device found at 2
usbcore: registered new driver usb-storage
USB Mass Storage support registered.
sr0: scsi3-mmc drive: 24x/48x writer cd/rw xa/form2 cdda tray
Uniform CD-ROM driver Revision: 3.20
Attached scsi CD-ROM sr0 at scsi0, channel 0, id 0, lun 0

At this point, I can "use" the drive, but only at low speed - meaning I can't burn anything but CDRW discs (which the drive will burn at 4X). Trying to burn CDRs generates coasters, since this drive's minimum speed for burning CDRs is 8x. This drive and card combo works with Fedora Core 1 and Fedora core 2 and will burn at high speed.

USB Update - June 1, 2005

Fedora's update kernel 2.6.11-1.14_FC3 fixes the problem with the Dynex USB2 card, and devices attached to the card will now run at high speed. This update kernel will probably also help you if you have another card based on the same NEC chipset.

TuxMobil - Linux on laptops, notebooks, PDAs and mobile phones
Click this link to go back to the top
This web site was last updated December 19, 2009.