====== 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 =====
{{ linux:t43:thinkpad_t43.png }}
^ Hardware Components ^ Status ^ Notes |
| Intel Pentium M (Dothan) 2.0GHz | works | For cpu frequency scaling, [[linux:t43#cpu|see below]] |
| Intel 915PM chipset | works | |
| ATI Mobility Radeon x300 | works | For configuration parameters, take a look [[linux:t43#graphics|here]] |
| 14.1" TFT Display with 1400x1050 pixel | works | |
| 80GB PATA HDD | works | |
| AD1981B AC'97 Audio controller | works | Works out of the box with ALSA, for the necessary kernel options [[linux:t43#sound|see below]] |
| Broadcom 10/100/1000 Ethernet | works | Works out of the box, for necessary kernel options [[linux:t43#ethernet|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, [[linux:t43#wireless|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 | [[linux:t43#hdaps|see below]] |
| Integrated Fingerprint Reader | not tested | to be tested and documented |
| UltraNav (TrackPoint / Touchpad combo) | works | |
===== History =====
* 1. November 2005: Ordered at [[http://www.nofost.de|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 [[http://cdimage.debian.org/cdimage/daily-builds/daily/arch-latest/i386/iso-cd/|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 [[linux:t43:archive|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 [[linux:t43:archive|here]].
==== Configuration ====
My current kernel config can be download here: {{linux:t43: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 power((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)): {{linux:t43: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, [[linux:t43#acpi_scripts|scroll down a bit]].
==== Ethernet ====
* Kernel config: CONFIG_TIGON3=m
==== Wireless LAN ====
I'm currently using the [[http://madwifi.org/|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 [[http://hostap.epitest.fi/wpa_supplicant/|wpa_supplicant]], it simply was stuck in an endless authentication loop, disassociating from the AP again every time right after the 4-way-handshake((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.)). The new ng driver solved my issues:
* Downloaded ''madwifi-ng-current.tar.gz'' from [[http://snapshots.madwifi.org/|here]], extracted it to ''/usr/src/madwifi-ng'' and built and installed the driver.
* Added the ''ifup'' and ''ifdown'' scripts by [[http://www.mattb.net.nz/patches/madwifi/|Matt Brown]] as suggested [[http://madwifi.org/wiki/UserDocs/Distro/Debian|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 [[http://hostap.epitest.fi/wpa_supplicant/|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 [[http://www.janmorgenstern.de/projects-software.html|Wavemon]] package fetched via ''apt'' didn't want to work with the driver((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 )):
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 [[https://support.ati.com/ics/support/KBAnswer.asp?questionID=1176|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.((Got this hint from [[http://gentoo-wiki.com/HOWTO_Xorg_and_Fonts#.2Fetc.2FX11.2Fxorg.conf|the Gentoo Wiki]], thanks)) 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 [[http://lists.debian.org/debian-amd64/2006/02/msg00311.html|this workaround]] discovered by Maciej Matysiak.((Got this hint from [[http://thinkwiki.org/wiki/Problems_with_fglrx#Perpetual_Mesa_GLX_Indirect_on_Debian|the ThinkWiki]], thanks.))
==== Sound ====
* Kernel config: CONFIG_SND_INTEL8X0=m
CONFIG_SND_INTEL8X0M=m
* [[http://www.alsa-project.org/|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 [[http://www.thinkwiki.org/wiki/HDAPS|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 [[http://thinkwiki.org/wiki/SMAPI_support_for_Linux|SMAPI Support for Linux]] at ThinkWiki.org and [[http://mailman.linux-thinkpad.org/pipermail/linux-thinkpad/2005-December/030792.html|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. [[http://www.cs.ust.hk/~joseph/Favorites/Debian/UbuntuOnIBMThinkpadT43.html|Joseph WU]] suggested a switch to [[http://suspend2.net|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 [[http://thinkwiki.org/wiki/Problem_with_fan_noise|ThinkWiki]]), I installed the [[http://thinkwiki.org/wiki/ACPI_fan_control_script#Variable_speed_control_scripts|tp-fancontrol script]]((Also as a local mirror {{linux:t43:tp-fancontrol.txt|here}})) 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 ====
[[http://www.joachim-breitner.de/blog/archives/38-Created-gaim-thinklight.html|Gaim-Thinklight]] is a plugin for the multiprotocol messenger [[http://gaim.sourceforge.net|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 [[http://www.thinkwiki.org/wiki/How_to_get_special_keys_to_work#ibm-acpi_events|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 [[:linux#windows_key_is_not_working_as_meta_key_for_shortcut_definitions|"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 =====
* Helpful Resources:
* [[http://linux.spiney.org/debian_gnu_linux_on_an_ibm_thinkpad_t43p]]
* [[http://thinkwiki.org/wiki/Installation_instructions_for_the_ThinkPad_T43]]
* [[http://thinkwiki.org/wiki/Category:T43]]
* [[http://www.cse.ust.hk/~josephwu/Favorites/Debian/UbuntuOnIBMThinkpadT43.html]]
* [[http://jefke.free.fr/writings/thinkpad_t43/]]
* [[http://www.alphawave.net/~dl/thinkpad-t42/suspend.html]]
* Listed at [[http://tuxmobil.org/ibm.html|TuxMobil.org]]
* Listed at [[http://www.linux-on-laptops.com/ibm.html|Linux on Laptops]]
~~DISCUSSION~~