You are here: start » Linux notes » IBM ThinkPad T43

IBM ThinkPad T43

Changelog

Sunday Nov 16 2008

  • Added configuration option for getting two-finger-vertical-scrolling to work on the T43's touchpad.

Sunday Jul 30 2006

  • Updated to fglrx 8.26.18
  • Added information about a DRI problem I encountered when updating the fglrx driver

Thursday Jun 15 2006

  • Updated to kernel 2.6.16.20
  • Updated installation instructions to new Debian nightly builds
  • Updated to fglrx 8.24.8
  • Added info about used fan control script
  • Fixed some typos

Friday May 12 2006

  • Added a new sata trick to the installation instructions.

Wednesday Jan 4 2006

  • Rewrote the wireless lan section to give a strategy on getting wpa to work with the Atheros properly.
  • Introduced the Changelog

General Specifications

Hardware Components Status Notes
Intel Pentium M (Dothan) 2.0GHz works For cpu frequency scaling, see below
Intel 915PM chipset works
ATI Mobility Radeon x300 works For configuration parameters, take a look here
14.1” TFT Display with 1400×1050 pixel works
80GB PATA HDD works
AD1981B AC'97 Audio controller works Works out of the box with ALSA, for the necessary kernel options see below
Broadcom 10/100/1000 Ethernet works Works out of the box, for necessary kernel options see below
DVD-ROM/CD-RW Combo partly works further documentation to be done, burning not tested yet
IBM Integrated Bluetooth IV with 56K Modem (BMDC-3) works
IBM 11a/b/g Wireless LAN Mini PCI Adapter II works For necessary modules, see below
CardBus slot (Type 2) not tested
ExpressCard/54 slot not tested
IBM Embedded Security Subsystem 2.0 not tested
IBM Active Protection System works see below
Integrated Fingerprint Reader not tested to be tested and documented
UltraNav (TrackPoint / Touchpad combo) works

History

  • 1. November 2005: Ordered at nofost.de, proposed delivery period 7 to 14 days
  • 8. November 2005: Notified of shipment via DHL
  • 9. November 2005: Delivered
  • 7. March 2008: Systemboard is broken. Sent in for repair.
  • 19. March 2008: Returned, all fine again.

Installation of Debian GNU/Linux

First things first: Boot up your ThinkPad into Windows and use the “Recovery Tool” to create a set of recovery disks for the ThinkPad, in order to be able to turn back everything to factory settings. You will need 6 CD-R's or one CD-R and a DVD-R, and it will take some time, but it is worth the hassle: Better safe than sorry.

Installation instructions

In recent nighty builds (this is important, etch beta 2 doesn't support the following) of Debian it is sufficient to add libata.atapi_enabled=1 as a kernel parameter and then continue with the normal installation procedure without needing any special tricks.

I haven't tested this yet, as my T43 still runs on it's first install of Debian back in November, but both Michael A. Jaeger and Nicholas Reilly (thanks to them) assured me of this being enough to make the installation work.

For the old instructions, take a look here.

Compiling your own kernel

I run Linux Kernel 2.6.16.20 which (thankfully) makes it unnecessary to apply any patches to make the T43's hardware work. For the old instructions (kernel 2.6.14.2), take a look here.

Configuration

My current kernel config can be download here: config-2.6.16.20.txt. Information about what specific features to enable follow.

Getting everything to work

CPU

Processor Type

  • Kernel config:
    CONFIG_MPENTIUM=y

CPU Frequency Scaling

  • Kernel config:
    CONFIG_CPU_FREQ=y
    CONFIG_CPU_FREQ_TABLE=y
    CONFIG_CPU_FREQ_STAT=y
    CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE=y
    CONFIG_CPU_FREQ_GOV_USERSPACE=y
    CONFIG_X86_ACPI_CPUFREQ=m
    CONFIG_X86_SPEEDSTEP_CENTRINO=m
    CONFIG_X86_SPEEDSTEP_CENTRINO_TABLE=y
  • apt-get install cpufreqd
  • I adjusted my /etc/cpufreqd.conf slightly to also make the frequency scale when on AC power1): cpufreqd.conf.txt.

Harddisk

  • Kernel config:
    CONFIG_SCSI_SATA=y
    CONFIG_SCSI_ATA_PIIX=y

ACPI

  • Kernel config:
    CONFIG_ACPI=y
    CONFIG_ACPI_SLEEP=y
    CONFIG_ACPI_SLEEP_PROC_FS=y
    CONFIG_ACPI_SLEEP_PROC_SLEEP=y
    CONFIG_ACPI_AC=y
    CONFIG_ACPI_BATTERY=y
    CONFIG_ACPI_BUTTON=y
    CONFIG_ACPI_VIDEO=y
    CONFIG_ACPI_FAN=y
    CONFIG_ACPI_PROCESSOR=y
    CONFIG_ACPI_THERMAL=y
    CONFIG_ACPI_IBM=y
    CONFIG_ACPI_BLACKLIST_YEAR=2001
    CONFIG_ACPI_EC=y
    CONFIG_ACPI_POWER=y
    CONFIG_ACPI_SYSTEM=y
    CONFIG_X86_PM_TIMER=y
    CONFIG_ACPI_CONTAINER=m
  • I also had to add acpi_sleep=s3_bios as a kernelparameter
  • For some ACPI related scripts, scroll down a bit.

Ethernet

  • Kernel config:
    CONFIG_TIGON3=m

Wireless LAN

I'm currently using the Madwifi-NG driver for the built-in Atheros a/b/g chipset.

WPA

I previously used the standard Madwifi driver, but wasn't able to get this to work together with a WPA-PSK + TKIP setup via wpa_supplicant, it simply was stuck in an endless authentication loop, disassociating from the AP again every time right after the 4-way-handshake2). The new ng driver solved my issues:

  • Downloaded madwifi-ng-current.tar.gz from here, extracted it to /usr/src/madwifi-ng and built and installed the driver.
  • Added the ifup and ifdown scripts by Matt Brown as suggested here and modified my /etc/network/interface:
    iface ath0 inet static
            madwifi-base wifi0
            .
            .
            .
            wireless-mode Managed
    

    Now a simple ifup ath0 does all that wlanconfig stuff necessary by madwifi-ng for me.

  • The version of madwifi-ng I have seems to have trouble to suspend correctly, the ath_pci module behaves strange after a resume. So I simply unload it before each suspend and reload it with each resume.
  • Downloaded current wpa_supplicant sources (at the time of writing wpa_supplicant-0.4.9.tar.gz) from here, and built the sources using this .config:
    CONFIG_DRIVER_MADWIFI=y
    CFLAGS += -I/usr/src/madwifi-ng
    CONFIG_CTRL_IFACE=y
    

    Then installed the tools via make install

  • Edited /etc/init.d/wpa_supplicant:
    ctrl_interface=/var/run/wpa_supplicant
    ctrl_interface_group=0
    
    eapol_version=1
    ap_scan=1
    fast_reauth=1
    
    network={
            ssid="thessid"
            key_mgmt=WPA-PSK
            psk="averysecretkey"
    }
  • In order to connect now with the WPA-PSK enabled wlan, I issue the following commands:
            iwconfig ath0 essid thessid
            wpa_supplicant -iath0 -Dmadwifi -c/etc/wpa_supplicant.conf -B

Wavemon

The Wavemon package fetched via apt didn't want to work with the driver3):

gina@ione:~$ wavemon
fatal error: could not get range information

Compiling the package from source resolved that issue:

  • apt-get -b source wavemon
  • dpkg -i wavemon_0.4.0b-8_i386.deb

Graphics

My T43 came with an ATI Mobility Radeon x300. Using the proprietary drivers from ATI, version 8.26.18, I have a working DRI setup with Suspend/Resume support. With driver versions newer than 8.25.18 it is also finally possible to switch on the VGA out on the fly, either cloning the display, or enabling it as the only port, using Fn+F7.

I installed them from the official driver package from ATI and let the provided installer script build some Debian packages for Etch, which I then installed:

  • ./ati-driver-installer-8.26.18-x86.run –buildpkg Debian/etch
  • dpkg -i *.deb
  • cd /usr/src && tar xvfj fglrx.tar.bz2 && cd modules/fglrx && ./make.sh

After installation I added the driver to the “Device” section of my xorg.conf:

Section "Device"
        Identifier      "ATI Technologies, Inc. M22 [Radeon Mobility M300]"
        Driver          "fglrx"
EndSection

I also added the DisplaySize and the DPMS option to the “Monitor” section:

Section "Monitor"
        Identifier      "LCD"
        HorizSync       30-67
        VertRefresh     50-75
        Option          "DPMS"
        DisplaySize     474 355
EndSection

The DisplaySize values were calculated using the formula 25.4 * width / 75 and accordingly 25.4 * height / 75, with width and height being the resolution of my display in pixels, namely 1400 for width and 1050 for height.4) To be on the safe side I also set the resolution to 75dpi in Firefox (Edit > Preferences > Fonts & Colors > Display Resolution). These steps solved the issues I had with the fglrx driver and my system fonts, namely the fonts being too big and having weird scrolling issues.

In order for versions of the proprietary ATI driver later than and including 8.19.10 to correctly work with suspending and resuming, you have to disable any vbetool calls in your suspend-scripts. Otherwise on resume the X-Server will freeze.

Small tip: If you find yourself in the same situation as me, and your DRI stops working although you can't find any related Errors or Warnings in your Xorg.log, do a LIBGL_DEBUG=verbose fglrxinfo. If you see something like

libGL: OpenDriver: trying /usr/X11R6/lib/modules/dri/fglrx_dri.so
libGL error: dlopen /usr/X11R6/lib/modules/dri/fglrx_dri.so failed (/usr/X11R6/lib/modules/dri/fglrx_dri.so: cannot open shared object file: No such file or directory)
libGL error: unable to find driver: fglrx_dri.so

in the output, you might want to try out this workaround discovered by Maciej Matysiak.5)

Sound

  • Kernel config:
    CONFIG_SND_INTEL8X0=m
    CONFIG_SND_INTEL8X0M=m
  • Alsa worked out of the box.

Active Protection System

  • Kernel config:
    CONFIG_HWMON=y
    CONFIG_SENSORS_HDAPS=m
  • apt-get install hdaps-utils
  • Also take a look at the HDAPS entry in the ThinkWiki

SMAPI

Via SMAPI (System Management Application Program Interface) one can adjust the charging settings of the Thinkpad: The capacity treshould on which to start charging, the treshold on which to stop charging, and manually an amount of time to charge for.

In order to get a /sys-interface to this functionality, get the tp_smapi kernel module from http://tpctl.sourceforge.net, unpack it, cd to the new directory and do a make load (or make install). You now have a new interface at /sys/devices/platform/smapi to play around with.

Also see SMAPI Support for Linux at ThinkWiki.org and this thread on the linux-laptop mailinglist. Thanks to Shem for writing this great module!

Things not working

  • Suspend-to-disk (using swsusp) still has some issues. Suspend/Resume works, but from time to time after Resume ACPI events aren't issued anymore. I have yet to figure out what is causing this. Joseph WU suggested a switch to Software Suspend 2, I'm currently working on that and am quite confident that this will work out just fine :)
    With the recent kernel build, it so far looks promising.

Small Software Collection

Fan noise antidote

As the T43's fan has some weird issues (pulsing sounds, always on, also take a look at the ThinkWiki), I installed the tp-fancontrol script6) which now controls the fan and by doing so reduced the noise my ThinkPad produces a lot.

In order for it to work, I had to pass ibm-acpi.experimental=1 as a parameter to my kernel. I also added an initscript which now takes care of starting the script on bootime:

#!/bin/sh
 
PROGRAM="/usr/bin/tp-fancontrol"
PARAMS="-l -d"
PID="/var/run/tp-fancontrol.pid"
 
checkconfig() {
        if [ ! -e /proc/acpi/ibm/fan ]; then
                echo "The ibm_acpi module must be loaded with (experimental=1)"
                return 1
        fi
}
 
case "$1" in
 
start)
        checkconfig || return 1
        echo "Starting tp-fancontrol"
        $PROGRAM $PARAMS
        ;;
 
stop)
        echo "Stopping tp-fancontrol"
        $PROGRAM -k
        ;;
 
esac

Gaim Thinklight

Gaim-Thinklight is a plugin for the multiprotocol messenger Gaim that makes the ThinkLight flash on incoming instant messages. The rate of missed IMs has highly decreased since I installed it, so a big thumbs up to Joachim Breitner for creating this ;-)

ACPI scripts

For all Fn+Key combinations to be recognized by ACPI, you first have to do an echo enable,0xffff > /proc/acpi/ibm/hotkey. Take a look here for further information. I simply added the line to /etc/init.d/bootmisc.sh

Screen off on Fn+F3

  • apt-get install radeontool
  • Create a file /etc/acpi/events/backlight:
    event=ibm/hotkey HKEY 00000080 00001003
    action=/etc/acpi/actions/standby.sh
  • Create a file /etc/acpi/actions/standby.sh:
    #!/bin/bash
     
    if [ -e /tmp/backlightoff ]
    then
    	radeontool light on
    	rm /tmp/backlightoff
    else
    	radeontool light off
    	touch /tmp/backlightoff
    fi

    Don't forget to make it executable.

  • /etc/init.d/acpid restart

Standby on close of Display or Fn+F4

  • If you are using the xorg-ati-driver, or a version of fglrx prior to 8.19.10:
    apt-get install vbetool - we'll need this to save the state of video card memory to the disk and restore it after standby in order to prevent graphic failures. Do not use it with versions after and including 8.19.10, as it breaks the resume process!
  • apt-get install xtrlock
  • Create a file /etc/acpi/events/lid:
    event=button/lid
    action=/etc/acpi/actions/sleep.sh %e
  • Create a file /etc/acpi/events/sleep:
    event=ibm/hotkey HKEY 00000080 00001004
    action=/etc/acpi/actions/sleep.sh %e
  • Create a file /etc/acpi/actions/sleep.sh:
    #!/bin/sh
     
    # if launched through a lid event and lid is open, do nothing
    echo "$1" | grep "button/lid" && grep -q open /proc/acpi/button/lid/LID/state && exit 0
     
    # lock X, subsitute 'user' for your username
    export DISPLAY=:0
    LOCKAS=user
    su $LOCKAS -c xtrlock &
     
    /usr/bin/tp-fancontrol -u
     
    # switch to text virtual terminal
    FGCONSOLE=`fgconsole`
    chvt 10
    sleep 1
     
    # save vbestate - necessary if either the xorg-ati driver or an fglrx prior to 8.19.10 is used
    #vbetool vbestate save > /tmp/vbestate
     
    # nighty night, don't let the vampire bite
    echo -n "mem" > /sys/power/state
     
    # restore vbestate - see above
    #vbetool vbestate restore < /tmp/vbestate
    #rm /tmp/vbestate
     
     
    #switch back to intial virtual terminal
    chvt $FGCONSOLE

    Don't forget to make it executable.

  • /etc/init.d/acpid restart

Suspend-to-disk on Fn+F12

  • If you are using the xorg-ati-driver, or a version of fglrx prior to 8.19.10:
    apt-get install vbetool - we'll need this to save the state of video card memory to the disk and restore it after standby in order to prevent graphic failures. Do not use it with versions after and including 8.19.10, as it breaks the resume process!
  • apt-get install xtrlock
  • Create a file /etc/acpi/events/disk:
    event=ibm/hotkey HKEY 00000080 0000100c
    action=/etc/acpi/actions/disk.sh
  • Create a file /etc/acpi/actions/disk.sh:
    #!/bin/sh
     
    # lock X, subsitute 'user' for your username
    export DISPLAY=:0
    LOCKAS=user
    su $LOCKAS -c xtrlock &
     
    /usr/bin/tp-fancontrol -u
     
    # switch to text virtual terminal
    FGCONSOLE=`fgconsole`
    chvt 10
    sleep 1
     
    # save vbestate - necessary if either the xorg-ati driver or an fglrx prior to 8.19.10 is used
    #vbetool vbestate save > /tmp/vbestate
     
    # see you later, alligator
    echo -n "disk" > /sys/power/state
     
    # restore vbestate - see above
    #vbetool vbestate restore < /tmp/vbestate
    #rm /tmp/vbestate
     
    #switch back to intial virtual terminal
    chvt $FGCONSOLE

    Don't forget to make it executable.

  • /etc/init.d/acpid restart

Toggle Bluetooth on Fn+F5

  • Create a file /etc/acpi/events/bluetooth:
    event=ibm/hotkey HKEY 00000080 00001005
    action=/etc/acpi/actions/bluetooth.sh
  • Create a file /etc/acpi/actions/bluetooth.sh:
    #!/bin/bash
     
    STATE=`cat /proc/acpi/ibm/bluetooth | head -n 1 | awk '{print $2}'`
    if [ $STATE = 'disabled' ]
    then
            echo "enable" > /proc/acpi/ibm/bluetooth
    else
            echo "disable" > /proc/acpi/ibm/bluetooth
    fi

    Don't forget to make it executable.

  • /etc/init.d/acpid restart

Remapping CapsLock

As the ThinkPad's keyboard doesn't have a windows key, which comes in quite handy when defining shortcuts in the window manager, I remapped CapsLock - which is totally useless otherwise IMO - to serve its purpose.

  • My ~/.Xmodmaprc:
    remove Lock = Caps_Lock
    keycode 66 = Super_L
  • Small addition to /etc/X11/xorg.conf to be on the safe side:
    Section "InputDevice"
    	Identifier	"Generic Keyboard"
    	Driver		"keyboard"
            .
            .
            .
    	Option		"XkbOptions"	"altwin:left_meta_win"
    EndSection
    

    (compare "Windows Key is not working as Meta Key for shortcut definitions")

Two-finger-scrolling on the touchpad

In order to enable two-fingered-vertical-scrolling on the T43's touchpad, all you have to do is add

Option "VertTwoFingerScroll" "1"

to your touchpad's InputDevice section in your /etc/X11/xorg.conf.

lspci output

0000:00:00.0 Host bridge: Intel Corporation Mobile 915GM/PM/GMS/910GML Express Processor to DRAM Controller (rev 03)
0000:00:01.0 PCI bridge: Intel Corporation Mobile 915GM/PM Express PCI Express Root Port (rev 03)
0000:00:1c.0 PCI bridge: Intel Corporation 82801FB/FBM/FR/FW/FRW (ICH6 Family) PCI Express Port 1 (rev 03)
0000:00:1c.2 PCI bridge: Intel Corporation 82801FB/FBM/FR/FW/FRW (ICH6 Family) PCI Express Port 3 (rev 03)
0000:00:1d.0 USB Controller: Intel Corporation 82801FB/FBM/FR/FW/FRW (ICH6 Family) USB UHCI #1 (rev 03)
0000:00:1d.1 USB Controller: Intel Corporation 82801FB/FBM/FR/FW/FRW (ICH6 Family) USB UHCI #2 (rev 03)
0000:00:1d.2 USB Controller: Intel Corporation 82801FB/FBM/FR/FW/FRW (ICH6 Family) USB UHCI #3 (rev 03)
0000:00:1d.3 USB Controller: Intel Corporation 82801FB/FBM/FR/FW/FRW (ICH6 Family) USB UHCI #4 (rev 03)
0000:00:1d.7 USB Controller: Intel Corporation 82801FB/FBM/FR/FW/FRW (ICH6 Family) USB2 EHCI Controller (rev 03)
0000:00:1e.0 PCI bridge: Intel Corporation 82801 Mobile PCI Bridge (rev d3)
0000:00:1e.2 Multimedia audio controller: Intel Corporation 82801FB/FBM/FR/FW/FRW (ICH6 Family) AC'97 Audio Controller (rev 03)
0000:00:1e.3 Modem: Intel Corporation 82801FB/FBM/FR/FW/FRW (ICH6 Family) AC'97 Modem Controller (rev 03)
0000:00:1f.0 ISA bridge: Intel Corporation 82801FBM (ICH6M) LPC Interface Bridge (rev 03)
0000:00:1f.2 IDE interface: Intel Corporation 82801FBM (ICH6M) SATA Controller (rev 03)
0000:00:1f.3 SMBus: Intel Corporation 82801FB/FBM/FR/FW/FRW (ICH6 Family) SMBus Controller (rev 03)
0000:01:00.0 VGA compatible controller: ATI Technologies Inc M22 [Radeon Mobility M300]
0000:02:00.0 Ethernet controller: Broadcom Corporation NetXtreme BCM5751M Gigabit Ethernet PCI Express (rev 11)
0000:04:00.0 CardBus bridge: Ricoh Co Ltd RL5c476 II (rev 8d)
0000:04:02.0 Ethernet controller: Atheros Communications, Inc. AR5212 802.11abg NIC (rev 01)

Links

1) I don't see a reason making the CPU run at 2GHz when not really needing that power, as it also makes the ThinkPad hotter and louder
2) The funny thing was that it did work with WPA-PSK + TKIP/AES via wpa_supplicant. But sadly this setup was incompatible to other - redmondbased - wlan-nics in the network.
3) I haven't tested yet whether it works with the new ng driver out-of-the-box. The described way to go was also a solution for the same issue with the ipw2200 driver on an X41 though, so it will stay here either way
4) Got this hint from the Gentoo Wiki, thanks
5) Got this hint from the ThinkWiki, thanks.
6) Also as a local mirror here

Discussion

JulianJulian, 2006/08/11 13:12

Hi, why are you using MadWifi-NG instead of the ipw2200 driver? Is there a reason for this.

Gina HaeussgeGina Haeussge, 2006/08/11 14:20

Because I have an Atheros card in this thing. I just realised though that I had made a copy-and-paste error in the table at the beginning of this node, which I now corrected to reflect the correct wlan nic.

JulianJulian, 2006/09/24 14:49

Oh aber eine sache interessiert mich dann doch was hat es den gekostet? nen ThinkPad war ja schon immer ein Traum von mir. Kannst den Preis mir via GötterGatten zukommen lassen. Vorrausgesetzt wen man über sowas reden möchte

MKMK, 2006/09/27 17:46

Let’s be nice and show folks how to build the ATI ‘fglrx’ module using the module-assistant. Don’t use make.sh, it doesn’t work very well.

# apt-get install debhelper module-assistant libstdc++5 # sh ./ati-driver-installer-8.26.18-x86.run –-buildpkg Debian/etch # dpkg -i *.deb # cd /usr/src # module-assistant prepare # module-assistant a-i fglrx # modinfo fglrx

AndreyAndrey, 2007/07/22 12:24

Hi!

Thanks for the perfect description of the ACPI configuration (and for the scripts)! I did all your steps and it worked! Thanks.

BrunoBruno, 2008/06/10 15:53

Thanks for the tips. I have a T43p with Mandriva: the ACPI script for special keys were not working (Fn+F4 or Lid to suspend, or Fn+F3) with Mdv 2008.1, and with your help I fixed it.

BrunoBruno, 2008/06/10 15:59

BTW, another comment: the ibm_acpi is now called thinkpad_acpi but all works the same (cf. http://thinkwiki.org/wiki/ACPI_fan_control_script).

Enter your comment (wiki syntax is allowed):
DNYTT
linux/t43.txt · Last modified: 2008/11/16 15:03 by foosel