Linux on an IBM ThinkPad X24

I bought a ThinkPad X24 from the cheap ThinkPad shop on Tottenham Court Road (Shyamtronics, in case you don't know about it - you can normally barter their advertised prices down a bit.) By and large it works very well; these are some slightly haphazard notes about what does and doesn't. There are similar pages linked from the Linux on Laptops website.

The X24 ThinkPads currently (autumn 2005) go for about £250 on eBay. This is a pretty good deal, I reckon, although you should probably factor in the cost of getting a usable amount of memory for it and a larger disk now that the prices of disks have dropped so much. Also, the lack of USB 2 is pretty irritating if you have to use removable storage a lot.

On the whole, I'm very happy with this laptop. It has the usual good build quality of IBM's ThinkPads and the hardware has excellent Linux support. In addition, it's small enough that I'm happy to carry it around with me, and the battery life is excellent. However, I have had to send it back twice for repair, in both cases since because the video hardware on the main board stopped working. These were both covered by the three year warranty, but it was very annoying being without a laptop while they fixed it, of course. In addition it was much more difficult than it should have been to persuade IBM to fix it, since by that stage I'd removed Windows and installed Debian GNU/Linux on it. The next time I get a laptop I'm going to make sure of the following things:

At one stage I had terrible problems with the laptop not being able to regulate its temperature; during tasks that used a lot of CPU the temperature reported by acpi -V would keep going up and up until it shut itself down at 92℃. However, after the most recent repair this seems to no longer be a problem.

Repartitioning

For my initial installation, I kept the original copy of Windows XP and preserved the recovery partition. I shrank the NTFS partition with Partition Magic, although nowadays the NTFS resizing in GNU Parted (as included in recent Debian install CDs) works well enough that I'd have no need for Partition Magic.

Once it became clear that Linux worked fine for me on the X24, I thought that the only needed Windows for the occasional BIOS update, but of course with the options of using PXE or building a DOS boot CD with the BIOS update software on it that reason didn't apply, so I ended up repartitioning it so that only Linux remained on the disk:

                              Disk Drive: /dev/hda
                        Size: 80026361856 bytes, 80.0 GB
             Heads: 16   Sectors per Track: 63   Cylinders: 155061

    Name        Flags      Part Type  FS Type          [Label]        Size (MB)
 ------------------------------------------------------------------------------
    hda5        Boot        Logical   Linux ext3                       79002.40*
    hda6                    Logical   Linux swap / Solaris              1023.94

(Note that this is with a larger hard disk than the one the machine came with.)

Debian Installation

You need to use the idepci flavour of boot CD or the system hangs on boot. I did a network installation over ethernet, which worked fine. I used the old eepro100 module, rather than the Intel e100 module - as far as I recall, they both work fine, though.

I'm now using GRUB as a boot loader, which is a great improvement over LILO.

Kernel Configuration

I'm using Linux kernel 2.6.13.1 on my laptop, and it basically works fine. My kernel .config may be of some use.

Sound

Sound works fine with the ALSA driver selected with CONFIG_SND_INTEL8X0 in the kernel.

InfraRed

I've never bothered trying to get the infrared module to work, since I just use a USB Bluetooth dongle for talking to my mobile.

Power Management

I'm using ACPI in preference to APM. Suspend to RAM works fine for me with a short script that just shuts down the wireless before suspending:

#!/bin/sh
set -e
wireless-disable
echo -n "mem" > /sys/power/state

The laptop unsuspends when you next open the lid. One possible source of concern is that although most of the ACPI devices you'd expect are detected:

ACPI: Battery Slot [BAT0] (battery present)
ACPI: AC Adapter [AC] (off-line)
ACPI: CPU0 (power states: C1[C1] C2[C2] C3[C3])
ACPI: Processor [CPU] (supports 8 throttling states)
ACPI: Power Button (FF) [PWRF]
ACPI: Lid Switch [LID]
ACPI: Sleep Button (CM) [SLPB]
ACPI: Thermal Zone [THM0] (45 C)

... the fan isn't. I'm not sure how much to worry about that...

Wireless Support

The built-in Prism 2.5 based 802.11b device works reasonably well with the kernel's orinoco_pci module. However, it won't let you scan for access points with iwlist:

cider:/# iwlist eth1 scan
eth1      Interface doesn't support scanning : Operation not supported

... and had other strange foibles, like refusing to turn off WEP once it had been enabled for the interface. Those were both very irritating, of course, so I switched to using the prism2_pci module from the linux-wlan-ng project. I have some simple scripts that scan for access points, join networks and so on - that all works very well now.

Graphics and XFree86 Configuration

The XFree86 works fine using the Debian xserver-xfree86 (4.2.1) package with the radeon driver:

Section "Device"
        Identifier      "ATI Radeon Mobility M6 LY"
        Driver          "radeon"
        BusID           "PCI:01:00:00"
        Option          "UseFBDev"              "false"
EndSection

The kernel's Radeon framebuffer driver seems to work OK as well.

mplayer runs well with xvidix video output, though you have to be root for it to work.

Modem

Getting the built-in modem to work was a rather painful experience, unfortunately, in that I had to try many different third party drivers before finding one that worked. What you want are the slamr module and slmodemd daemon from SmartLink's slmodem-2.9.4 package. The modem appears as /dev/ttySL0.

Docking Station and DVD

I also bought the Ultrabase X2 Media Slice (i.e. a docking station) and a DVD drive to go into it. I was pleased to discover that mplayer, xine and ogle could all play DVDs quite happily once I'd remembered to turn on DMA for the DVD drive.

I haven't yet figured out how to get the notebook to happily dock into the media slice and notice the DVD drive. If I suspend the notebook first, I can add or remove the slice (which is useful since it has better speakers than the built-in one) but unless the notebook was booted with the DVD drive attached, it doesn't get picked up. I guess this just needs a bit more research on my part...

lspci -v

In case it's of use to anyone who's thinking of buying one of these machines and wants to know exactly what hardware is in there, this is the result of lspci -v:

0000:00:00.0 Host bridge: Intel Corp. 82830 830 Chipset Host Bridge (rev 04)
        Subsystem: IBM ThinkPad A/T/X Series
        Flags: bus master, fast devsel, latency 0
        Memory at d0000000 (32-bit, prefetchable) [size=256M]
        Capabilities: [40] #09 [1105]
        Capabilities: [a0] AGP version 2.0

0000:00:01.0 PCI bridge: Intel Corp. 82830 830 Chipset AGP Bridge (rev 04) (prog-if 00 [Normal decode])
        Flags: bus master, 66MHz, fast devsel, latency 96
        Bus: primary=00, secondary=01, subordinate=01, sec-latency=64
        I/O behind bridge: 00003000-00003fff
        Memory behind bridge: c0100000-c01fffff
        Prefetchable memory behind bridge: e0000000-e7ffffff

0000:00:1d.0 USB Controller: Intel Corp. 82801CA/CAM USB (Hub #1) (rev 02) (prog-if 00 [UHCI])
        Subsystem: IBM ThinkPad A/T/X Series
        Flags: bus master, medium devsel, latency 0, IRQ 11
        I/O ports at 1800 [size=32]

0000:00:1d.1 USB Controller: Intel Corp. 82801CA/CAM USB (Hub #2) (rev 02) (prog-if 00 [UHCI])
        Subsystem: IBM ThinkPad A/T/X Series
        Flags: bus master, medium devsel, latency 0, IRQ 11
        I/O ports at 1820 [size=32]

0000:00:1d.2 USB Controller: Intel Corp. 82801CA/CAM USB (Hub #3) (rev 02) (prog-if 00 [UHCI])
        Subsystem: IBM ThinkPad A/T/X Series
        Flags: bus master, medium devsel, latency 0, IRQ 11
        I/O ports at 1840 [size=32]

0000:00:1e.0 PCI bridge: Intel Corp. 82801 PCI Bridge (rev 42) (prog-if 00 [Normal decode])
        Flags: bus master, fast devsel, latency 0
        Bus: primary=00, secondary=02, subordinate=0a, sec-latency=64
        I/O behind bridge: 00004000-00008fff
        Memory behind bridge: c0200000-cfffffff
        Prefetchable memory behind bridge: e8000000-f00fffff

0000:00:1f.0 ISA bridge: Intel Corp. 82801CAM ISA Bridge (LPC) (rev 02)
        Flags: bus master, medium devsel, latency 0

0000:00:1f.1 IDE interface: Intel Corp. 82801CAM IDE U100 (rev 02) (prog-if 8a [Master SecP PriP])
        Subsystem: IBM ThinkPad A/T/X Series
        Flags: bus master, medium devsel, latency 0, IRQ 11
        I/O ports at <ignored>
        I/O ports at <ignored>
        I/O ports at <ignored>
        I/O ports at <ignored>
        I/O ports at 1860 [size=16]
        Memory at 10000000 (32-bit, non-prefetchable) [size=1K]

0000:00:1f.3 SMBus: Intel Corp. 82801CA/CAM SMBus Controller (rev 02)
        Subsystem: IBM ThinkPad A/T/X Series
        Flags: medium devsel, IRQ 11
        I/O ports at 1880 [size=32]

0000:00:1f.5 Multimedia audio controller: Intel Corp. 82801CA/CAM AC'97 Audio Controller (rev 02)
        Subsystem: IBM ThinkPad T23 (2647-4MG) or A30/A30p (2652/2653)
        Flags: bus master, medium devsel, latency 0, IRQ 11
        I/O ports at 1c00 [size=256]
        I/O ports at 18c0 [size=64]

0000:00:1f.6 Modem: Intel Corp. 82801CA/CAM AC'97 Modem Controller (rev 02) (prog-if 00 [Generic])
        Subsystem: IBM: Unknown device 0227
        Flags: medium devsel, IRQ 11
        I/O ports at 2400 [size=256]
        I/O ports at 2000 [size=128]

0000:01:00.0 VGA compatible controller: ATI Technologies Inc Radeon Mobility M6 LY (prog-if 00 [VGA])
        Subsystem: IBM ThinkPad X22/X23/X24
        Flags: bus master, stepping, fast Back2Back, 66MHz, medium devsel, latency 66, IRQ 11
        Memory at e0000000 (32-bit, prefetchable) [size=128M]
        I/O ports at 3000 [size=256]
        Memory at c0100000 (32-bit, non-prefetchable) [size=64K]
        Expansion ROM at c0120000 [disabled] [size=128K]
        Capabilities: [58] AGP version 2.0
        Capabilities: [50] Power Management version 2

0000:02:03.0 CardBus bridge: Ricoh Co Ltd RL5c476 II (rev 80)
        Subsystem: IBM ThinkPad A/T/X Series
        Flags: bus master, medium devsel, latency 168, IRQ 11
        Memory at 50000000 (32-bit, non-prefetchable) [size=4K]
        Bus: primary=02, secondary=03, subordinate=06, sec-latency=176
        Memory window 0: e8000000-e9fff000 (prefetchable)
        Memory window 1: c2000000-c3fff000
        I/O window 0: 00004000-00004fff
        I/O window 1: 00005000-00005fff
        16-bit legacy interface ports at 0001

0000:02:03.1 CardBus bridge: Ricoh Co Ltd RL5c476 II (rev 80)
        Subsystem: IBM ThinkPad A/T/X Series
        Flags: bus master, medium devsel, latency 168, IRQ 11
        Memory at 50100000 (32-bit, non-prefetchable) [size=4K]
        Bus: primary=02, secondary=07, subordinate=0a, sec-latency=176
        Memory window 0: ea000000-ebfff000 (prefetchable)
        Memory window 1: c4000000-c5fff000
        I/O window 0: 00006000-00006fff
        I/O window 1: 00007000-00007fff
        16-bit legacy interface ports at 0001

0000:02:05.0 Network controller: Intersil Corporation Prism 2.5 Wavelan chipset (rev 01)
        Subsystem: Actiontec Electronics Inc: Unknown device 0406
        Flags: bus master, medium devsel, latency 64, IRQ 11
        Memory at f0000000 (32-bit, prefetchable) [size=4K]
        Capabilities: [dc] Power Management version 2

0000:02:08.0 Ethernet controller: Intel Corp. 82801CAM (ICH3) PRO/100 VE (LOM) Ethernet Controller (rev 42)
        Subsystem: IBM ThinkPad A/T/X Series
        Flags: bus master, medium devsel, latency 66, IRQ 11
        Memory at c0200000 (32-bit, non-prefetchable) [size=4K]
        I/O ports at 8000 [size=64]
        Capabilities: [dc] Power Management version 2