Note: My R30 officially died in January 2005, so this page will no longer be maintained.

My old Toshiba died (the IDE controller, or something like that, went on strike), so I decided to get a ThinkPad. Why an IBM?

My aims were to get a cheap laptop that would last me for many years (until I could afford a more expensive one) as a primary computer (I don’t have a desktop machine. The R30 fit the bill for the most part. It has built-in Ethernet and 802.11b, a fast processor, lots of RAM, but only one PCMCIA slot, which may limit my expandability. At least the built-in Ethernet and 802.11b means that I won’t need a slot for those things. I think that I should be OK. We’ll see...

About a month after I bought my R30, IBM released the R31, which has a different chipset from the R30. From what I can tell, its chipset is more compatible with Linux (and better than what’s in the R30).

For more information see the Linux on Laptops page. Another good resource for Unix on mobile devices is TuxMobil (formerly MobiliX).

Summary

what works:

what doesn’t work (or I haven’t been able to get it to work):

what I haven’t tried yet:

Specs

model:
IBM ThinkPad R30 (26564AU)
CPU:
Pentium III 1GHz
Memory:
128MB standard
HD:
30GB
Removable media:
comes with a DVD-ROM, which can be swapped out and replaced with other drives, such as a floppy, or CD-RW
Video card:
Trident CyberBlade Aladdin i1 w/ 8MB RAM (it actually steals 8 MB from the main memory
Video outputs:
standard VGA and S-Video
Screen:
13.3" TFT
Sound card:
Acer ALi M5451
Ethernet:
built-in Intel 82557-based 100Base-T
Wireless:
built-in Actiontec 802.11b miniPCI card
Modem:
Lucent winmodem AMR
Expandability:
parallel port, 2 USB 1.1 ports, UltraBay Plus, 1 PCMCIA slot (no serial port, no keyboard/mouse port, but these are available on an optional docking station, or with USB adaptors)

Here’s the lspci output:

  00:00.0 Host bridge: Acer Laboratories Inc. [ALi] M1621 (rev 01)
  00:01.0 PCI bridge: Acer Laboratories Inc. [ALi] M5247 (rev 01)
  00:06.0 Multimedia audio controller: Acer Laboratories Inc. [ALi] M5451 PCI South Bridge Audio (rev 01)
  00:07.0 ISA bridge: Acer Laboratories Inc. [ALi] M1533 PCI to ISA Bridge [Aladdin IV]
  00:0a.0 Ethernet controller: Intel Corp. 82557 [Ethernet Pro 100] (rev 0d)
  00:0c.0 Network controller: Harris Semiconductor: Unknown device 3873 (rev 01)
  00:10.0 IDE interface: Acer Laboratories Inc. [ALi] M5229 IDE (rev c3)
  00:11.0 Bridge: Acer Laboratories Inc. [ALi] M7101 PMU
  00:13.0 CardBus bridge: O2 Micro, Inc.: Unknown device 6972
  00:14.0 USB Controller: Acer Laboratories Inc. [ALi] M5237 USB (rev 03)
  01:00.0 VGA compatible controller: Trident Microsystems: Unknown device 8620 (rev 5d)

Partitioning

The 4AU comes with Windows XP pre-installed. (XP is a pig. 128MB is barely enough for it, and I wasn’t running a whole lot either.) I wanted to keep it around in case I needed to run some ThinkPad utility, or if the computer needed to be serviced for any reason (my old Toshiba needed repairs done, and they wanted me to reinstall Windows before they would touch it). Unfortunately, XP decided to convert the partition to NTFS, so fips and GNU parted wouldn’t work with it. Oh well. Time to give PowerQuest some money. PartitionMagic 7.0 supports XP and NTFS, and it handled my system quite well. It did an oops at one point, but chkdsk was able to recover everything. I ended up with the following partition table:

partition size (approx) description
hda1 3.5GB Windows XP
hda2 800MB IBM’s recovery partition(hidden)
hda5 6GB my root directory
hda6 1GB swap space
hda7 13GB /var, /usr/local, /tmp, and /home (basically everything that can’t be on a read-only partition)

I left about 4GB of space so that I could try out other OS’s like HURD or AtheOS if I felt like it.

Installing Linux

Unfortunately, my laptop didn’t come with a floppy drive, and I had no access to a CD writer. I wanted to run Debian, so I couldn’t just go to a store to pick up a copy. I ordered an UltraBay floppy drive from IBM, but they didn’t have any stock, so I would have to wait. In the meantime, I got an UltraBay second HDD adaptor, so that I could copy my old files (and all my customizations) over.

After about three weeks of waiting (and calling IBM and finding out that I wouldn’t be able to get a floppy drive for another two weeks (which, by the way, they were way off — by over a month!)), I decided I had enough of playing around with WinXP. Fortunately, IBM lets you set the drive in the UltraBay HDD adaptor to be the primary drive, and to boot from it. After some fiddling to make it boot right (grub saw my old hard drive as the first hard drive, as it was told by the BIOS, but Linux goes by the IDE controllers), Linux booted successfully. (w00t!) Fortunately, none of my old configuration messed up the ThinkPad.

I just formated my new partitions as ReiserFS, and copied everything from my old partition to my new partition. Then I booted to the new hard drive, recompiled the kernel to support the new hardware, and rebooted. Finally, I installed grub on the new drive (after checking that WinXP would boot from grub).

Later on, I decided to do a full reinstall. I popped in the UltraBay floppy drive that finally came, popped in the Debian install disks, and did a network install. It was mostly straightforward, but I kept a lot of my configuration files. I think the only thing I really had to do was to load the eepro100 module so it could access the network.

TrackPoint

The TrackPoint behaves like a standard 3-button PS/2 mouse, and pretty much Just Works, except for press-to-select. I’m running gpm which eats the mouse input, so XFree86 must be configured to use gpm’s mouse data echoing. I also use tp-scroll so that the middle button can act both as a standard middle button, and as a scroller (hold down the button, and push the TrackPoint around) — vertical scrolling only. This gives a nice mess of a pipeline. I have the following as my /etc/gpm.conf:

  device=/dev/misc/psaux
  responsiveness=
  repeat_type=raw
  type=autops2
  append=""
  sample_rate=

(change the device to /dev/psaux if you aren’t running devfs), then I set up tp-scroll to read from /dev/gpmdata and write to /dev/imouse with this script:

  #!/bin/sh
  mkfifo /dev/imouse
  tp-scroll -i /dev/gpmdata -o /dev/imouse &

And I have the following in my /etc/X11/XF86Config-4:

  Section "InputDevice"
          Identifier      "TrackPoint"
          Driver          "mouse"
          Option          "CorePointer"
          Option          "Device"                "/dev/imouse"
          Option          "Protocol"              "ExplorerPS/2"
          Option          "ZAxisMapping"          "4 5"
  EndSection

To get "press-to-select" to work (i.e. pushing down on the TrackPoint knob counts as a button click), you can use tp4utils. Unfortunately, I couldn’t find settings that work for me, and half the time when I press the knob, it thinks I’m trying to drag. So since I would hardly use press-to-select, I got rid of it. If you find settings that work, let me know.

Sound

It uses an integrated Acer M5451 chip. It has a headphone output and a microphone input. I think that with a port replicator, you get a line in too.

lspci -vv excerpt:

  00:06.0 Multimedia audio controller: Acer Laboratories Inc. [ALi] M5451 PCI South Bridge Audio (rev 01)
          Subsystem: IBM: Unknown device 0506
          Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B-
          Status: Cap+ 66Mhz- UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR+ <PERR+
          Latency: 32 (500ns min, 6000ns max)
          Interrupt: pin A routed to IRQ 11
          Region 0: I/O ports at 9400 [size=256]
          Region 1: Memory at 81c00000 (32-bit, non-prefetchable) [size=4K]
          Capabilities: [dc] Power Management version 2
                  Flags: PMEClk- DSI+ D1+ D2+ AuxCurrent=0mA PME(D0-,D1-,D2+,D3hot+,D3cold+)
                  Status: D0 PME-Enable- DSel=0 DScale=0 PME-

I’m using the ali5451 drivers from the ALSA system. Everything seems to be working fine, but I haven’t tried MIDI playback yet. The ALSA mixer also lets me control the system beep volume.

Unfortunately, there’s no hardware volume control. On the keyboard, there are buttons to mute or change the volume. The mute button works, and pressing one of the volume buttons unmutes, but I can’t get the volume to change. However, see below for how to setup the volume buttons.

Recording from an ALSA program works.

Video

lspci -vv excerpt:

  01:00.0 VGA compatible controller: Trident Microsystems: Unknown device 8620 (rev 5d) (prog-if 00 [VGA])
          Subsystem: IBM: Unknown device 0502
          Control: I/O+ Mem+ BusMaster- SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B-
          Status: Cap+ 66Mhz+ UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR-
          Interrupt: pin A routed to IRQ 11
          Region 0: Memory at 80800000 (32-bit, non-prefetchable) [size=8M]
          Region 1: Memory at 80500000 (32-bit, non-prefetchable) [size=128K]
          Region 2: Memory at 81000000 (32-bit, non-prefetchable) [size=8M]
          Expansion ROM at 80520000 [disabled] [size=64K]
          Capabilities: [80] AGP version 1.0
                  Status: RQ=32 SBA+ 64bit- FW- Rate=x1,x2
                  Command: RQ=0 SBA- AGP- 64bit- FW- Rate=<none>
          Capabilities: [90] Power Management version 1
                  Flags: PMEClk- DSI+ D1+ D2+ AuxCurrent=0mA PME(D0-,D1-,D2-,D3hot-,D3cold-)
                  Status: D0 PME-Enable- DSel=0 DScale=0 PME-

The video chip is a Trident CyberBlade Aladdin i1 which steals 8M of memory from the main memory to make up its video RAM. I am using the trident driver from XFree86 4.2, running at 1024x768x24bpp. It doesn’t seem to be accelerated too well (it seems slower than the S3 ViRGE/MX from my old Toshiba).

Xv seems to work more or less as of XFree86 4.2 (it was inconsistent in 4.1). The only problem is that there’s sometimes a blue band around the window, but that’s bearable. And mode switching seems to be fubar’ed, but it’s fast enough just having the window fill the whole screen. Mmmm. Full-screen video.

I have to use the software cursor, otherwise the cursor gets displayed as a big block, rather than an arrow. I’ve been told that it also fixes the 5cm-to-the-left problem that others have been having. In your /etc/X11/XF86Config-4 (or XF86Config, depending on what your distro does), the video card section should look something like this:

  Section "Device"
          Identifier      "Generic Video Card"
          Driver          "trident"
          VideoRam        8192
          Option          "SWCursor" "on"
  EndSection

The SWCursor option is the one which turns on the software cursor.

Under X, I couldn’t get it to switch to driving an external monitor. Under XFree86 4.1, I had to switch to text mode with the monitor plugged in, switch it to drive an external monitor, and then restart X. Under XFree86 4.2, the situation has improved a bit: I just need to switch to text mode, plug in the monitor, switch it to drive the external monitor, and switch back to X (no restarting necessary).

The contrast buttons (Fn+Home and Fn+End) adjust the contrast properly.

Under Windows, it seems that I can set up an external monitor in a dual-head setup (LCD and monitor displaying different images), but I don’t have a second monitor, so I haven’t tried it out, and I definitely haven’t tried to make XFree86 do that. Well, apparently support for this hasn’t been coded up yet.

Ethernet

It has an integrated Intel 82557 100-BaseT network adaptor.

lspci -vv excerpt:

  00:0a.0 Ethernet controller: Intel Corp. 82557 [Ethernet Pro 100] (rev 0d)
          Subsystem: IBM: Unknown device 023a
          Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B-
          Status: Cap+ 66Mhz- UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR-
          Latency: 32 (2000ns min, 14000ns max), cache line size 08
          Interrupt: pin A routed to IRQ 11
          Region 0: Memory at 81a00000 (32-bit, non-prefetchable) [size=4K]
          Region 1: I/O ports at 9000 [size=64]
          Region 2: Memory at 81a20000 (32-bit, non-prefetchable) [size=128K]
          Expansion ROM at 81a40000 [disabled] [size=64K]
          Capabilities: [dc] Power Management version 2
                  Flags: PMEClk- DSI+ D1+ D2+ AuxCurrent=0mA PME(D0+,D1+,D2+,D3hot+,D3cold+)
                  Status: D0 PME-Enable- DSel=0 DScale=2 PME-

Using the eepro100 module from the kernel works fine. The only problem is that it won’t suspend when I suspend the rest of the computer.

Wireless (802.11b)

It has a miniPCI wireless network card.

  00:0c.0 Network controller: Harris Semiconductor: Unknown device 3873 (rev 01)
          Subsystem: Action Tec Electronics Inc: Unknown device 0406
          Control: I/O+ Mem+ BusMaster- SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B-
          Status: Cap+ 66Mhz- UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR-
          Interrupt: pin A routed to IRQ 11
          Region 0: Memory at 80200000 (32-bit, prefetchable) [size=4K]
          Capabilities: [dc] Power Management version 2
                  Flags: PMEClk- DSI- D1+ D2+ AuxCurrent=0mA PME(D0+,D1+,D2+,D3hot+,D3cold-)
                  Status: D0 PME-Enable- DSel=0 DScale=0 PME-

The orinoco_pci module from the 2.6 kernel works with the card.

The next paragraph is a bit outdated — I haven’t tried the prism2 drivers lately.

The Prism2 PCI drivers from Absolute Value Systems detects the card, and I can connect to the wireless network at the University. I use the prism2_pci module. There seems to be some incompatibility between the linux-wlan drivers and the drivers in the kernel in the sense that some tools written for one will not work with the other. Hopefully this situation will improve in the future.

Power Management

APM seems to be working relatively well. When I hit the suspend key (Fn+F4), it seems to work properly, except that the Ethernet adaptor is still active, the fan is still spinning, and hitting the eject button on the DVD drive makes it eject, so there doesn’t seem to be much power saving. Hitting the "screen off" key (Fn+F3) makes the screen go blank.

Unfortunately, it doesn’t seem to like it if I pull the power cord and there’s some disk activity — it just crashes.

Suspending from X seemed to work fine too, but when I tried it, I also had to change the network settings, which made some programs not work properly, so it didn’t really buy me any time.

If the battery runs out while the computer is running, it will automatically go into suspend mode.

Note for Debian users: if you are using a stock Debian kernel, you will need to turn on APM by passing “apm=on” to the kernel. If you are using LILO, you can do this by adding an “append” line to your /etc/lilo.conf. (I don’t use LILO, so I can’t tell you exactly what the syntax is.) Apparently, APM causes problems with certain computers, so Debian opted to keep it off by default.

Hibernation doesn’t work yet, but I haven’t given it much effort other than hitting the hibernate key (Fn+F12) and seeing it not work. Marcus Carl informs me that hibernation works for him. It seems like hibernation wants a FAT partition (which Marcus has), but my laptop came with XP, so it uses an NTFS partition. I tried swsusp which sort of works. It didn’t seem to like the USB (I have USB support compiled statically into the kernel), and the sound card didn’t want to come up properly. I’m guessing that it should work with a bit more tweaking.

ACPI from kernel 2.6 works to some degree. Namely, it detects the CPU, temperature sensor, and battery, and displays information correctly. However, suspending doesn’t seem to work.

IrDA

The kernel irda, irtty, ircomm, ircomm-tty modules seem to be enough to get the IrDA into a state so that it can communicate with my Palm. The IrDA shows up as /dev/tts/1 (a.k.a. /dev/ttyS1). I haven’t tried any of the fancy stuff like IR networking, printing, etc., because I don’t have any of that equipment.

LIRC works with the SIR module. I just need to kill irattach, make the serial driver drop the IR port using setserial, install the lirc_sir module, and load lircd. (I actually load LIRC on bootup rather than irattach now, since I use my remote more often than I sync with my Palm.)

UltraBay

My UltraBay floppy drive finally arrived (April 2, over two months after I ordered it), so I tried warm swapping. At first, it didn’t work, because I hadn’t enabled "Legacy Floppy" support in the BIOS. A (semi-)quick reboot later, and it recognized the floppy drive. Then I suspended, popped out the floppy, dropped in the DVD drive, and ran the idectl (which is included with hdparm), and it recognized the DVD. Nifty.

I don’t dare try hot swapping, because when I hit the switch to pop out the drive, the computer makes loud beeping noises. (BTW, under Windows, it makes loud noises when I hit the switch even when the computer is suspended.)

PCMCIA

It works fine with the native Linux kernel stuff from 2.4.19. I haven’t tried the pcmcia-cs modules. I only have a Compact Flash to PCMCIA adaptor, and a FireWire card, so those are the only things that I’ve tried. But PCMCIA has been around for a while, so I would be surprised if things don’t work.

Keyboard volume controls

The R30 has four extra keys at the top-right of the keyboard: a “ThinkPad” key, a volume up and down key, and a mute key. The mute key seems to work fine, with no help, and hitting volume up/down unmutes, but they won’t change the volume without some coaxing.

ThinkPad Buttons (tpb) can be used to make the buttons do useful stuff. The volume controls will change the volume, and the “ThinkPad” button can be assigned to execute a command. It can also provide a nice on-screen display for the volume, contrast, and other buttons. It even includes Debian packaging scripts. (Thanks to Stephan Schwarzer for prompting me to try it out.)

As-is, it seems to eat up too much CPU, even when setting the poll interval to something larger. Markus Braun, the author of tpb, suggested to comment out line 677 in tpb.c (get_apm_state(nvram_state);), which is used for detecting when AC is connected or disconnected. With the change made, its CPU use is negligible.

Targus power adaptor

I have a Targus car/plane power adaptor which uses different tips for different devices. It powers the R30 fine with tip number 7, which comes with the adaptor. The Targus AC adaptor uses the same tips, so I assume it should work as well.