<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://www.thinkwiki.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Phoenix84</id>
	<title>ThinkWiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://www.thinkwiki.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Phoenix84"/>
	<link rel="alternate" type="text/html" href="https://www.thinkwiki.org/wiki/Special:Contributions/Phoenix84"/>
	<updated>2026-05-03T07:37:57Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.31.12</generator>
	<entry>
		<id>https://www.thinkwiki.org/w/index.php?title=How_to_hotswap_Ultrabay_devices&amp;diff=42325</id>
		<title>How to hotswap Ultrabay devices</title>
		<link rel="alternate" type="text/html" href="https://www.thinkwiki.org/w/index.php?title=How_to_hotswap_Ultrabay_devices&amp;diff=42325"/>
		<updated>2009-03-27T06:06:27Z</updated>

		<summary type="html">&lt;p&gt;Phoenix84: /* Using the generic bay driver and udev */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The following discusses hotswap (AKA &amp;quot;hotplug&amp;quot;) of devices in the [[Ultrabay]].&lt;br /&gt;
&lt;br /&gt;
==Which driver?==&lt;br /&gt;
Since the following may be confusing for SATA ThinkPad owners, which are likely all the same for now, you have two busses and drivers: one SATA bus which works with the AHCI driver and one IDE bus for the Ultrabay for which you should pick &amp;lt;tt&amp;gt;ata_piix&amp;lt;/tt&amp;gt; ('''not''' piix/CONFIG_BLK_DEV_PIIX). See below for hotswapping.&lt;br /&gt;
&lt;br /&gt;
Debian users: at least up the the kernel released with Lenny, Debian applies a patch in the Debian kernel sources which prevents the use of &amp;lt;tt&amp;gt;ata_piix&amp;lt;/tt&amp;gt; with PATA devices (like the IDE bus for the Ultrabay). You will have to either use an upstream kernel or (re)patch the Debian kernel sources. &lt;br /&gt;
You may want to have a look at the following Debian bug reports as well: [http://bugs.debian.org/444182 #444182], [http://bugs.debian.org/463833 #463833].&lt;br /&gt;
&lt;br /&gt;
==Choosing the right driver: new style &amp;lt;tt&amp;gt;ata_piix&amp;lt;/tt&amp;gt; vs old style &amp;lt;tt&amp;gt;piix&amp;lt;/tt&amp;gt; together with &amp;lt;tt&amp;gt;ide-disk&amp;lt;/tt&amp;gt;==&lt;br /&gt;
For ICH5,6,7,8, systems, whether you have an older IDE only thinkpad, or a newer thinkpad like the T/Z61p, there is one SATA bus for the system hard drive and an IDE bus for the Ultrabay (even if your Ultrabay happens to have a SATA drive, as it'll be seen as an IDE device), you'll have two drivers to chose from for your ultrabay: the old IDE/&amp;lt;tt&amp;gt;piix&amp;lt;/tt&amp;gt;+&amp;lt;tt&amp;gt;ide-disk&amp;lt;/tt&amp;gt; driver, and the newer PATA (=IDE) support of the newer &amp;lt;tt&amp;gt;ata_piix&amp;lt;/tt&amp;gt; driver.&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;tt&amp;gt;piix&amp;lt;/tt&amp;gt;+&amp;lt;tt&amp;gt;ide-disk&amp;lt;/tt&amp;gt; are part of the old original IDE driver and your Ultrabay device will show up as &amp;lt;tt&amp;gt;/dev/hda&amp;lt;/tt&amp;gt;.&amp;lt;BR&amp;gt;&amp;lt;tt&amp;gt;ata-piix&amp;lt;/tt&amp;gt; is the new SATA/PATA (=IDE) driver that will cause your Ultrabay hard drive to show up as &amp;lt;tt&amp;gt;/dev/sda&amp;lt;/tt&amp;gt; and your CD-ROM as &amp;lt;tt&amp;gt;/dev/sr0&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The two things to know are: (1) you want to use &amp;lt;tt&amp;gt;ata_piix&amp;lt;/tt&amp;gt; and (2) if you build &amp;lt;tt&amp;gt;piix&amp;lt;/tt&amp;gt; in (CONFIG_BLK_DEV_PIIX enabled), or load it as a module, it'll take over the IDE bus and prevent ATA_PIIX from seeing your Ultrabay. You don't want that.&lt;br /&gt;
&lt;br /&gt;
The longer details are:&amp;lt;BR&amp;gt;&lt;br /&gt;
You don't want the &amp;lt;tt&amp;gt;piix&amp;lt;/tt&amp;gt;+&amp;lt;tt&amp;gt;ide-disk&amp;lt;/tt&amp;gt; combo because even as modules, you will not be able to unload &amp;lt;tt&amp;gt;piix&amp;lt;/tt&amp;gt; to reset the bus if there are issues swapping devices (with &amp;lt;tt&amp;gt;ata_piix&amp;lt;/tt&amp;gt;, even if you forget to unregister a drive before removing it, you can unload the module and reload it to reset the bus after the fact if you have a newer ThinkPad with a separate AHCI/SATA bus for the boot drive).&lt;br /&gt;
&lt;br /&gt;
As for hotswap, with &amp;lt;tt&amp;gt;piix&amp;lt;/tt&amp;gt;+&amp;lt;tt&amp;gt;ide-disk&amp;lt;/tt&amp;gt;, you can read the section below, but after more than one day of trying on 2.6.22.15 (as &amp;lt;tt&amp;gt;piix&amp;lt;/tt&amp;gt;+&amp;lt;tt&amp;gt;ide-disk&amp;lt;/tt&amp;gt; was taking over my IDE bus, and stopping me from using ata_piix before I removed it), I was not able to get hotswapping to work with piix+ide-disk (lt_hotswap would not even build on 2.6.22.15).&lt;br /&gt;
&lt;br /&gt;
hotswap just works with &amp;lt;tt&amp;gt;ata_pixx&amp;lt;/tt&amp;gt; on 2.6.22, and reportedly with anything newer than 2.6.18, so you want to get rid of &amp;lt;tt&amp;gt;piix&amp;lt;/tt&amp;gt;+&amp;lt;tt&amp;gt;ide-disk&amp;lt;/tt&amp;gt;.&lt;br /&gt;
There are several ways to do that:&lt;br /&gt;
* if &amp;lt;tt&amp;gt;piix&amp;lt;/tt&amp;gt; is built in your kernel (CONFIG_BLK_DEV_PIIX):&lt;br /&gt;
** rebuild your kernel with CONFIG_BLK_DEV_PIIX turned off.&lt;br /&gt;
** if you don't want to rebuild your kernel, try disabling the IDE bus grabbing by that driver with &amp;lt;tt&amp;gt;ide0=noprobe hda=noprobe hdb=noprobe&amp;lt;/tt&amp;gt; in your grub/lilo config (adjust the drive letters as appropriate, but note that this did not work for me on 2.6.22.15: the drive didn't show up on the &amp;lt;tt&amp;gt;piix&amp;lt;/tt&amp;gt; bus, but it didn't show up on the &amp;lt;tt&amp;gt;ata_piix&amp;lt;/tt&amp;gt; bus either).&lt;br /&gt;
* if &amp;lt;tt&amp;gt;piix&amp;lt;/tt&amp;gt; is built in as a module&lt;br /&gt;
** you can move out the module in {{path|/lib/modules/ver/kernel/drivers/ide/pci/piix.ko}} and reboot.&lt;br /&gt;
** or build a new kernel, again with CONFIG_BLK_DEV_PIIX turned off.&lt;br /&gt;
** or add &amp;lt;tt&amp;gt;options ide_core options=&amp;quot;ide0=noprobe hda=noprobe hdb=noprobe&amp;quot;&amp;lt;/tt&amp;gt; to your modprobe.conf is supposed to work too (but didn't work on 2.6.22.15, see comment above)&lt;br /&gt;
&lt;br /&gt;
Then, continue this document to see how to do hotswap with &amp;lt;tt&amp;gt;ata_piix&amp;lt;/tt&amp;gt; (if you are lucky enough to have a newer SATA ThinkPad where the &amp;lt;tt&amp;gt;ata_piix&amp;lt;/tt&amp;gt; driver only runs the Ultrabay, and you have a separate &amp;lt;tt&amp;gt;bus&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;ahci&amp;lt;/tt&amp;gt; driver for your main drive, it is recommended to have &amp;lt;tt&amp;gt;ata_piix&amp;lt;/tt&amp;gt; as a module (&amp;lt;tt&amp;gt;CONFIG_ATA_PIIX=m&amp;lt;/tt&amp;gt;) so that you can unload/reload it if your bus gets in a bad state after a failed hotswap)&lt;br /&gt;
&lt;br /&gt;
==When using the &amp;lt;tt&amp;gt;ata_piix&amp;lt;/tt&amp;gt; driver==&lt;br /&gt;
The following applies when using the &amp;lt;tt&amp;gt;ata_piix&amp;lt;/tt&amp;gt; driver, which is necessary for many recent ThinkPad models that use an [[Intel ICH6-M]] controller. See also [[Problems with SATA and Linux]]. &lt;br /&gt;
&lt;br /&gt;
Mainline kernels before 2.6.18 cannot reliably recognize newly (re-)inserted Ultrabay drives without a reboot. There are experimental hotplug patches against pre-2.6.18 mainline kernels [http://home-tj.org/wiki/index.php/Libata-tj-stable here].&lt;br /&gt;
&lt;br /&gt;
* Available hotplug patches&lt;br /&gt;
**[http://home-tj.org/files/libata-tj-stable/libata-tj-2.6.16.16-20060512.tar.bz2 Patch tarball against 2.6.16.16] ([http://lwn.net/Articles/183407/ Announce])&lt;br /&gt;
**[http://home-tj.org/files/libata-tj-stable/libata-tj-2.6.17-20060625-1.tar.bz2 Patch tarball against 2.6.17/2.6.17.1] ([http://article.gmane.org/gmane.linux.ide/11598 Announce])&lt;br /&gt;
**[http://home-tj.org/files/libata-tj-stable/libata-tj-2.6.17.4-20060710.tar.bz2 Patch tarball against 2.6.17.4]&lt;br /&gt;
**[http://whoopie.gmxhome.de/linux/patches/2.6.17.14-tj/00-libata-tj-2.6.17.4-20060710.patch Patch against 2.6.17.14]&lt;br /&gt;
&lt;br /&gt;
* Confirmed to work on the following laptops, with bus the following ID &lt;br /&gt;
**ThinkPad {{T23}}&lt;br /&gt;
**ThinkPad {{T30}}&lt;br /&gt;
**ThinkPad {{T43}}, {{T43p}}&lt;br /&gt;
**ThinkPad {{R52}}&lt;br /&gt;
**ThinkPad {{T60}} ID=4&lt;br /&gt;
**ThinkPad {{T61}} ID=0&lt;br /&gt;
**ThinkPad {{Z61p}} ID=4 (0-3:ahci, 5-6: ata_piix)&lt;br /&gt;
ID will typically be 1 if you only have an IDE bus (0 is boot drive, 1 is Ultrabay), and it'll be 4 if you have a SATA bus your system boots from (ID 0-3) and an IDE bus for your Ultrabay (ID 4-5).&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Note that even on a given laptop model the ID can vary depending on whether your kernel has drivers that configure your boot drive is using the old style IDE driver (which doesn't add IDs before your Ultrabay), or whether your boot drive is using the new style driver (which  adds IDs before your Ultrabay)&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hotplug just works with kernels newer than 2.6.18 ( or older kernels that were patched to support &amp;lt;tt&amp;gt;ata_piix&amp;lt;/tt&amp;gt; hotplug (don't try it otherwise!))&amp;lt;BR&amp;gt;&lt;br /&gt;
First, it is recommended you find the right SCSI ID for your drive to hotswap and unregister it before removing it (this works with all recent mainline kernels):&lt;br /&gt;
 {{cmdroot|echo 1 &amp;gt; /sys/class/scsi_device/$ID:0:0:0/device/delete}} &lt;br /&gt;
 {{cmdroot|echo eject &amp;gt;  /proc/acpi/ibm/bay}}&lt;br /&gt;
The drive can now be ejected (without this, your IDE bus may complain if you just yank a drive, but you can usually recover by unloading/reloading the &amp;lt;tt&amp;gt;ata_piix&amp;lt;/tt&amp;gt; module on a SATA laptop if your main drive is not on the &amp;lt;tt&amp;gt;ata_piix&amp;lt;/tt&amp;gt; bus)&lt;br /&gt;
&lt;br /&gt;
You can then issue the following after inserting an Ultrabay drive to rescan the port:&lt;br /&gt;
 {{cmdroot|echo 0 0 0 &amp;gt;  /sys/class/scsi_host/host$ID/scan}}&lt;br /&gt;
The inserted drive should now be recognized by the kernel, and appropriate {{path|/dev/*}} entries created automatically (e.g., by &amp;lt;tt&amp;gt;udev&amp;lt;/tt&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Ted T'so has also written this hotswap patch, which may or may not be needed for you, see [http://www.mail-archive.com/linux-acpi@vger.kernel.org/msg04716.html hotswap patch] and report back&lt;br /&gt;
&lt;br /&gt;
===Scripts for hotswapping===&lt;br /&gt;
&lt;br /&gt;
The following scripts and [[acpid]] daemon configuration files do the following:&lt;br /&gt;
* Automatically unmounts the relevant filesystems and power off the Ultrabay when the Ultrabay eject lever is released. Screams if some filesystem can't be unmounted.&lt;br /&gt;
* Rescans the Ultrabay port when then Ultrabay eject lever is pushed back in.&lt;br /&gt;
&lt;br /&gt;
They assumes you're using the &amp;lt;tt&amp;gt;ata_piix&amp;lt;/tt&amp;gt; driver with an appropriate kernel (see above).&lt;br /&gt;
&lt;br /&gt;
Create {{path|/usr/local/sbin/ultrabay_insert}} with permissions 755:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
echo 12 &amp;gt; /proc/acpi/ibm/beep&lt;br /&gt;
sync&lt;br /&gt;
echo 0 0 0 &amp;gt; /sys/class/scsi_host/host1/scan&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Create {{path|/usr/local/sbin/ultrabay_eject}} with permissions 755:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
ULTRABAY_SYSDIR='/sys/class/scsi_device/1:0:0:0/device'&lt;br /&gt;
shopt -s nullglob&lt;br /&gt;
&lt;br /&gt;
# Umount the filesystem(s) backed by the given major:minor device(s)&lt;br /&gt;
unmount_rdev() { perl - &amp;quot;$@&amp;quot; &amp;lt;&amp;lt;'EOPERL'  # let's do it in Perl&lt;br /&gt;
	for $major_minor (@ARGV) {&lt;br /&gt;
		$major_minor =~ m/^(\d+):(\d+)$/ or die;&lt;br /&gt;
		push(@tgt_rdevs, ($1&amp;lt;&amp;lt;8)|$2);&lt;br /&gt;
	}&lt;br /&gt;
        # Sort by reverse length of mount point, to unmount sub-directories first&lt;br /&gt;
        open MOUNTS,&amp;quot;&amp;lt;/proc/mounts&amp;quot; or die &amp;quot;$!&amp;quot;;&lt;br /&gt;
        @mounts=sort { length($b-&amp;gt;[1]) &amp;lt;=&amp;gt; length($a-&amp;gt;[1]) } map { [ split ] } &amp;lt;MOUNTS&amp;gt;;&lt;br /&gt;
        close MOUNTS;&lt;br /&gt;
        foreach $m (@mounts) {&lt;br /&gt;
                ($dev,$dir)=@$m;&lt;br /&gt;
		next unless -b $dev;  $rdev=(stat($dev))[6];&lt;br /&gt;
		next unless grep($_==$rdev, @tgt_rdevs);&lt;br /&gt;
		system(&amp;quot;umount&amp;quot;,&amp;quot;-v&amp;quot;,&amp;quot;$dir&amp;quot;)==0  or  $bad=1;&lt;br /&gt;
	}&lt;br /&gt;
	exit 1 if $bad;&lt;br /&gt;
EOPERL&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Get the UltraBay's /dev/foo block device node&lt;br /&gt;
ultrabay_dev_node() {&lt;br /&gt;
	UDEV_PATH=&amp;quot;`readlink -e &amp;quot;$ULTRABAY_SYSDIR/block:&amp;quot;*`&amp;quot; || return 1&lt;br /&gt;
	UDEV_NAME=&amp;quot;`udevinfo -q name -p $UDEV_PATH`&amp;quot; || return 1&lt;br /&gt;
	echo /dev/$UDEV_NAME&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
if [ -d $ULTRABAY_SYSDIR ]; then&lt;br /&gt;
	sync&lt;br /&gt;
	# Unmount filesystems backed by this device&lt;br /&gt;
	unmount_rdev `cat $ULTRABAY_SYSDIR/block\:*/dev     \&lt;br /&gt;
	                  $ULTRABAY_SYSDIR/block\:*/*/dev`  \&lt;br /&gt;
	|| {&lt;br /&gt;
		echo 10 &amp;gt; /proc/acpi/ibm/beep;  # error tone&lt;br /&gt;
		exit 1;&lt;br /&gt;
	}&lt;br /&gt;
        sync&lt;br /&gt;
        # Nicely power off the device&lt;br /&gt;
	DEVNODE=`ultrabay_dev_node` &amp;amp;&amp;amp; hdparm -Y $DEVNODE&lt;br /&gt;
        # Let HAL+KDE notice the unmount and let the disk spin down&lt;br /&gt;
	sleep 0.5&lt;br /&gt;
	# Unregister this SCSI device:&lt;br /&gt;
	sync&lt;br /&gt;
	echo 1 &amp;gt; $ULTRABAY_SYSDIR/delete&lt;br /&gt;
fi&lt;br /&gt;
sync&lt;br /&gt;
# We really need a 3 sec pause here otherwise the system will freeze..&lt;br /&gt;
sleep 3&lt;br /&gt;
# Turn off power to the UltraBay:&lt;br /&gt;
if [ -d /sys/devices/platform/bay.0 ]; then&lt;br /&gt;
	echo 1 &amp;gt; /sys/devices/platform/bay.0/eject&lt;br /&gt;
elif [ -e /proc/acpi/ibm/bay ]; then&lt;br /&gt;
	echo eject &amp;gt; /proc/acpi/ibm/bay&lt;br /&gt;
fi&lt;br /&gt;
# Tell the user we're OK&lt;br /&gt;
echo 12 &amp;gt; /proc/acpi/ibm/beep&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Use the modified version below if the above doesn't work for you (for kernels 2.6.25+ due to &amp;quot;ULTRABAY_SYSDIR/block\:*/dev&amp;quot; path change). It was tested on a Thinkpad X41 with Fedora 9 and kernel 2.6.25.11:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
ULTRABAY_SYSDIR='/sys/class/scsi_device/1:0:0:0/device'&lt;br /&gt;
shopt -s nullglob&lt;br /&gt;
&lt;br /&gt;
# Umount the filesystem(s) backed by the given major:minor device(s)&lt;br /&gt;
unmount_rdev() { perl - &amp;quot;$@&amp;quot; &amp;lt;&amp;lt;'EOPERL'  # let's do it in Perl&lt;br /&gt;
	for $major_minor (@ARGV) {&lt;br /&gt;
		$major_minor =~ m/^(\d+):(\d+)$/ or die;&lt;br /&gt;
		push(@tgt_rdevs, ($1&amp;lt;&amp;lt;8)|$2);&lt;br /&gt;
	}&lt;br /&gt;
        # Sort by reverse length of mount point, to unmount sub-directories first&lt;br /&gt;
        open MOUNTS,&amp;quot;&amp;lt;/proc/mounts&amp;quot; or die &amp;quot;$!&amp;quot;;&lt;br /&gt;
        @mounts=sort { length($b-&amp;gt;[1]) &amp;lt;=&amp;gt; length($a-&amp;gt;[1]) } map { [ split ] } &amp;lt;MOUNTS&amp;gt;;&lt;br /&gt;
        close MOUNTS;&lt;br /&gt;
        foreach $m (@mounts) {&lt;br /&gt;
                ($dev,$dir)=@$m;&lt;br /&gt;
		next unless -b $dev;  $rdev=(stat($dev))[6];&lt;br /&gt;
		next unless grep($_==$rdev, @tgt_rdevs);&lt;br /&gt;
		system(&amp;quot;umount&amp;quot;,&amp;quot;-v&amp;quot;,&amp;quot;$dir&amp;quot;)==0  or  $bad=1;&lt;br /&gt;
	}&lt;br /&gt;
	exit 1 if $bad;&lt;br /&gt;
EOPERL&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Get the UltraBay's /dev/foo block device node&lt;br /&gt;
ultrabay_dev_node() {&lt;br /&gt;
	UDEV_PATH=&amp;quot;`readlink -e &amp;quot;$ULTRABAY_SYSDIR/block/&amp;quot;*`&amp;quot; || return 1&lt;br /&gt;
	UDEV_NAME=&amp;quot;`udevinfo -q name -p $UDEV_PATH`&amp;quot; || return 1&lt;br /&gt;
	echo /dev/$UDEV_NAME&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
if [ -d $ULTRABAY_SYSDIR ]; then&lt;br /&gt;
	sync&lt;br /&gt;
	# Unmount filesystems backed by this device&lt;br /&gt;
	unmount_rdev `cat $ULTRABAY_SYSDIR/block/*/dev     \&lt;br /&gt;
	                  $ULTRABAY_SYSDIR/block/*/*/dev`  \&lt;br /&gt;
	|| {&lt;br /&gt;
		echo 10 &amp;gt; /proc/acpi/ibm/beep;  # error tone&lt;br /&gt;
		exit 1;&lt;br /&gt;
	}&lt;br /&gt;
        sync&lt;br /&gt;
        # Nicely power off the device&lt;br /&gt;
	DEVNODE=`ultrabay_dev_node` &amp;amp;&amp;amp; hdparm -Y $DEVNODE&lt;br /&gt;
        # Let HAL+KDE notice the unmount and let the disk spin down&lt;br /&gt;
	sleep 0.5&lt;br /&gt;
	# Unregister this SCSI device:&lt;br /&gt;
	sync&lt;br /&gt;
	echo 1 &amp;gt; $ULTRABAY_SYSDIR/delete&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# We really need a 3 sec pause here otherwise the system will freeze..&lt;br /&gt;
sleep 3&lt;br /&gt;
&lt;br /&gt;
# Turn off power to the UltraBay:&lt;br /&gt;
dock=$( /bin/grep ata_bay /sys/devices/platform/dock.?/type )&lt;br /&gt;
dock=${dock%%/type:ata_bay} # needed for 2.6.27 and later&lt;br /&gt;
if [ -n &amp;quot;$dock&amp;quot; -a -d &amp;quot;$dock&amp;quot; ]; then&lt;br /&gt;
        echo 1 &amp;gt; $dock/undock&lt;br /&gt;
elif [ -d /sys/devices/platform/bay.0 ]; then&lt;br /&gt;
	echo 1 &amp;gt; /sys/devices/platform/bay.0/eject&lt;br /&gt;
elif [ -e /proc/acpi/ibm/bay ]; then&lt;br /&gt;
	echo eject &amp;gt; /proc/acpi/ibm/bay&lt;br /&gt;
fi&lt;br /&gt;
# Tell the user we're OK&lt;br /&gt;
echo 12 &amp;gt; /proc/acpi/ibm/beep&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Create {{path|/etc/acpi/events/ultrabay-insert}}:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
event=ibm/bay MSTR 00000001 00000000&lt;br /&gt;
action=/usr/local/sbin/ultrabay_insert&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Create {{path|/etc/acpi/events/ultrabay-eject}}:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
event=ibm/bay MSTR 00000003 00000000&lt;br /&gt;
action=/usr/local/sbin/ultrabay_eject&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Restart &amp;lt;tt&amp;gt;acpid&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
If the &amp;lt;tt&amp;gt;ata_piix&amp;lt;/tt&amp;gt; driver is built in the kernel, it will catch bay events and you will see the&lt;br /&gt;
following message in your system log:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
thinkpad_acpi: another device driver is already handling bay events&lt;br /&gt;
thinkpad_acpi: disabling subdriver bay&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
You should load &amp;lt;tt&amp;gt;thinkpad_acpi&amp;lt;/tt&amp;gt; before &amp;lt;tt&amp;gt;ata_piix&amp;lt;/tt&amp;gt; if you want it to handle bay events.&lt;br /&gt;
&lt;br /&gt;
===Using the generic bay driver and udev===&lt;br /&gt;
&lt;br /&gt;
Starting from kernel 2.6.23-rc3, it's possible to use the generic &amp;lt;tt&amp;gt;bay&amp;lt;/tt&amp;gt; driver in combination with udev to hotswap. Please check if CONFIG_ACPI_BAY is enabled (module or built-in) in your kernel configuration.&lt;br /&gt;
&lt;br /&gt;
Create {{path|/etc/udev/rules.d/ibm-ultrabay.rules}}:&lt;br /&gt;
 ENV{BAY_EVENT}==&amp;quot;3&amp;quot;, KERNEL==&amp;quot;bay.0&amp;quot;, ACTION==&amp;quot;change&amp;quot;, SUBSYSTEM==&amp;quot;platform&amp;quot;, RUN+=&amp;quot;/usr/local/sbin/ultrabay_eject&amp;quot;&lt;br /&gt;
 ENV{BAY_EVENT}==&amp;quot;1&amp;quot;, KERNEL==&amp;quot;bay.0&amp;quot;, ACTION==&amp;quot;change&amp;quot;, SUBSYSTEM==&amp;quot;platform&amp;quot;, RUN+=&amp;quot;/usr/local/sbin/ultrabay_insert&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Starting with kernel 2.6.28, the &amp;lt;tt&amp;gt;bay&amp;lt;/tt&amp;gt; drivernel was remove from the mainline ker. The &amp;lt;tt&amp;gt;dock&amp;lt;/tt&amp;gt; driver replaced it completely. Make sure CONFIG_ACPI_DOCK is enabled in the kernel, and use the following udev rules:&lt;br /&gt;
&lt;br /&gt;
 ENV{EVENT}==&amp;quot;undock&amp;quot;, KERNEL==&amp;quot;dock.2&amp;quot;, ACTION==&amp;quot;change&amp;quot;, SUBSYSTEM==&amp;quot;platform&amp;quot;, RUN+=&amp;quot;/usr/local/sbin/ultrabay_eject&amp;quot;&lt;br /&gt;
 ENV{EVENT}==&amp;quot;dock&amp;quot;, KERNEL==&amp;quot;dock.2&amp;quot;, ACTION==&amp;quot;change&amp;quot;, SUBSYSTEM==&amp;quot;platform&amp;quot;, RUN+=&amp;quot;/usr/local/sbin/ultrabay_insert&amp;quot;&lt;br /&gt;
&lt;br /&gt;
However, the ultra_eject script needs to be changed, otherwise udev goes into an infinite event loop. It will send undock events every few seconds forever. That means as soon as the ultrabay is plugged in again, it will be immediately ejected. For kernels 2.6.28 and higher, the bay cannot be powered off using this method, so change the end of the script to read:&lt;br /&gt;
 # Turn off power to the UltraBay:&lt;br /&gt;
 if [ -d /sys/devices/platform/bay.0 ]; then&lt;br /&gt;
 	echo 1 &amp;gt; /sys/devices/platform/bay.0/eject&lt;br /&gt;
 elif [ -e /proc/acpi/ibm/bay ]; then&lt;br /&gt;
 	echo eject &amp;gt; /proc/acpi/ibm/bay&lt;br /&gt;
 fi&lt;br /&gt;
 # Tell the user we're OK&lt;br /&gt;
 echo 12 &amp;gt; /proc/acpi/ibm/beep&lt;br /&gt;
&lt;br /&gt;
Alternatively, instead of modifying the script, use the libata-acpi method below.&lt;br /&gt;
This was tested on a T61p running Gentoo with tuxonice 2.6.28-r8 without any issues.&lt;br /&gt;
&lt;br /&gt;
===Using libata-acpi and udev===&lt;br /&gt;
&lt;br /&gt;
Starting from kernel 2.6.26-rc5, it's possible to use &amp;lt;tt&amp;gt;libata-acpi&amp;lt;/tt&amp;gt; in combination with udev to hotswap. Please check if CONFIG_ATA_ACPI is enabled in your kernel configuration.&lt;br /&gt;
&lt;br /&gt;
For 2.6.25, you need two patches which can be easily backported ([http://article.gmane.org/gmane.linux.acpi.devel/31159],[http://article.gmane.org/gmane.linux.acpi.devel/31369]).&lt;br /&gt;
&lt;br /&gt;
Create {{path|/etc/udev/rules.d/ibm-ultrabay.rules}}:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ENV{BAY_EVENT}==&amp;quot;3&amp;quot;, ACTION==&amp;quot;change&amp;quot;, SUBSYSTEM==&amp;quot;scsi&amp;quot;, RUN+=&amp;quot;/usr/local/sbin/ultrabay_eject&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Model-specific notes===&lt;br /&gt;
See the table above for a list of ata_piix supported laptops and the bus ID to use.&lt;br /&gt;
&lt;br /&gt;
===HAL support===&lt;br /&gt;
&lt;br /&gt;
{{NOTE| Starting from HAL 0.5.11, you need to replace &amp;quot;storage.physical_device&amp;quot; with &amp;quot;info.parent&amp;quot;.}}&lt;br /&gt;
&lt;br /&gt;
Many programs, KDE included, rely on [[HAL]] to get notifications and information about device hotplugging. You need to tell HAL that devices connected the UltraBay port are hotpluggable. To do so, create the file {{path|/etc/hal/fdi/information/10-ultrabay.fdi}} as follows:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt; &amp;lt;!-- -*- SGML -*- --&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;deviceinfo version=&amp;quot;0.2&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;device&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- UltraBay Devices --&amp;gt;&lt;br /&gt;
    &amp;lt;match key=&amp;quot;storage.bus&amp;quot; string=&amp;quot;scsi&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;match key=&amp;quot;storage.physical_device&amp;quot; string=&amp;quot;/org/freedesktop/Hal/devices/pci_8086_2653_scsi_host_0_scsi_device_lun0&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;merge key=&amp;quot;storage.hotpluggable&amp;quot; type=&amp;quot;bool&amp;quot;&amp;gt;true&amp;lt;/merge&amp;gt;&lt;br /&gt;
      &amp;lt;/match&amp;gt;&lt;br /&gt;
    &amp;lt;/match&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/device&amp;gt;&lt;br /&gt;
&amp;lt;/deviceinfo&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The string &amp;quot;8086_2653&amp;quot; may need to be changed to match your ThinkPad model; see below.&lt;br /&gt;
&lt;br /&gt;
====Details====&lt;br /&gt;
&lt;br /&gt;
By default, HAL doesn't know that UltraBay devices are hotpluggable:&lt;br /&gt;
&lt;br /&gt;
 # PHYSDEV=/org/freedesktop/Hal/devices/pci_8086_2653_scsi_host_0_scsi_device_lun0&lt;br /&gt;
 # UDI=`hal-find-by-property --key storage.physical_device --string $PHYSDEV` || echo Failed&lt;br /&gt;
 # hal-get-property --udi $UDI --key block.device&lt;br /&gt;
 /dev/sdb&lt;br /&gt;
 # hal-get-property --udi $UDI --key storage.hotpluggable&lt;br /&gt;
 false&lt;br /&gt;
&lt;br /&gt;
After creating {{path|/etc/hal/fdi/information/10-ultrabay.fdi}} as above and re-plugging the device, it will get marked correctly:&lt;br /&gt;
&lt;br /&gt;
 # PHYSDEV=/org/freedesktop/Hal/devices/pci_8086_2653_scsi_host_0_scsi_device_lun0&lt;br /&gt;
 # UDI=`hal-find-by-property --key storage.physical_device --string $PHYSDEV` || echo Failed&lt;br /&gt;
 # hal-get-property --udi $UDI --key block.device&lt;br /&gt;
 /dev/sdb&lt;br /&gt;
 # hal-get-property --udi $UDI --key storage.hotpluggable&lt;br /&gt;
 true&lt;br /&gt;
&lt;br /&gt;
The string &amp;quot;8086_2653&amp;quot; gives the PCI ID of the [[Intel 82801FBM]] southbridge. If your model has a different southbridge, or the UltraBay is attached to a different port, then you can find the appropriate &amp;lt;tt&amp;gt;storage.physical_device&amp;lt;/tt&amp;gt; value by finding out the block device of the currently running UltraBay device (&amp;lt;tt&amp;gt;/dev/sdb&amp;lt;/tt&amp;gt; in the following example) and then running:&lt;br /&gt;
&lt;br /&gt;
 # DEVICE=/dev/sdb&lt;br /&gt;
 # UDI=`hal-find-by-property --key block.device --string $DEVICE` || echo Failed&lt;br /&gt;
 # hal-get-property --udi $UDI --key storage.physical_device&lt;br /&gt;
 /org/freedesktop/Hal/devices/pci_8086_2653_scsi_host_0_scsi_device_lun0&lt;br /&gt;
&lt;br /&gt;
If you have a different &amp;lt;tt&amp;gt;storage.physical_device&amp;lt;/tt&amp;gt; value, please report your findings.&lt;br /&gt;
&lt;br /&gt;
{| border=1&lt;br /&gt;
|+ Known South Bridge PCI IDs&lt;br /&gt;
! ID !! ThinkPad model !! South Bridge chip&lt;br /&gt;
|-&lt;br /&gt;
| 8086_248a || 2366-83U (T30), 2647-MG3 (T23)|| Intel 82801CAM IDE U100 (rev 2)&lt;br /&gt;
|-&lt;br /&gt;
| 8086_2653 || 2525FAG (X41), ? (T43) || Intel 82801FBM (ICH6-M)&lt;br /&gt;
|-&lt;br /&gt;
| 8086_24ca || 237358U (T40), 2373KXU (T42p) || Intel 82801DBM (ICH4-M)&lt;br /&gt;
|-&lt;br /&gt;
| 8086_27c4 || X60           || Intel 82801GBM (ICH7 Family)&lt;br /&gt;
|-&lt;br /&gt;
| 8086_27df || Z61p, T60, T60p || Intel 82801GBM/GHM (ICH7 Family)&lt;br /&gt;
|-&lt;br /&gt;
| 8086_2850 || T61, T61p || Intel 82801H (ICH8 Family)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==When using the &amp;lt;tt&amp;gt;ide-disk&amp;lt;/tt&amp;gt; driver==&lt;br /&gt;
The following applies if you use the &amp;lt;tt&amp;gt;ide-disk&amp;lt;/tt&amp;gt; driver for the UltraBay device.&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Note that essentially, you shouldn't be using this driver, and use ata_piix instead unless you're running an older kernel where ata_piix won't work for you&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hotswapping is supposed to be supported as well, using either hdparm/[http://packages.debian.org/unstable/admin/hotswap Debian hotswap] or [[lt_hotswap]] to (un)register IDE devices. The latter is the recommended method with kernels from 2.6, since it will leave DMA working. However, for recent models (R52, T43, X41, Z60 and later) no method is known to work while maintaining DMA support; see [[Problems with SATA and Linux]].&lt;br /&gt;
&lt;br /&gt;
Only IDE devices (HDD's, optical drives, zip drives) require special treatment - batteries, floppies and other devices can just be pulled from the bay, provided they are not mounted or in use at the time. However, you should still power them down first using the [[ibm-acpi]] eject function.&lt;br /&gt;
&lt;br /&gt;
The [[ibm-acpi]] kernel module has an eject function ({{cmdroot|echo eject &amp;gt; /proc/acpi/ibm/bay}}). This only manages the ACPI calls to power down the device and the bay. It does not actually unregister the device from the IDE driver. {{cmdroot|cat /proc/acpi/ibm/bay}} shows &amp;quot;unoccupied&amp;quot; unless an IDE device is present, but the eject function still works and should still be used.&lt;br /&gt;
&lt;br /&gt;
To unregister the device, you can either use the [http://packages.debian.org/unstable/admin/hotswap Debian hotswap] package, or [[lt_hotswap]]. Note that lt_hotswap doesn't seem to even build on recent (at 2.6.22 or newer, although it probably broke before 2.6.22) and on newer kernels, you should not build/load the old IDE PIIX (CONFIG_BLK_DEV_PIIX) and use the natively hotswapping ata_piix (CONFIG_ATA_PIIX) as explained on the top of this page.&lt;br /&gt;
&lt;br /&gt;
[http://packages.debian.org/unstable/admin/hotswap Debian hotswap] also allows the drive to be swapped as a normal user by default, which is useful. You should use &amp;lt;tt&amp;gt;hotswap&amp;lt;/tt&amp;gt; to unregister the device and then {{cmdroot|echo eject &amp;gt; /proc/acpi/ibm/bay}}. However, if you use this method on a 2.6 kernel, you will lose DMA support for the reinserted drive. This is due to kernel issues. This method was reported to work on a ThinkPad {{T23}} (kernels 2.6.8.1, 2.6.14.2 and 2.6.15-arch) and {{T42}} (kernel 2.6.13), but fails on a ThinkPad {{T43}} (kernel 2.6.14.3).&lt;br /&gt;
&lt;br /&gt;
[[lt_hotswap]] is now the recommended method to un- and reregister the IDE device. It installs as a kernel module and has support for automatically unregistering (if loaded with the auto_eject=1 option) the device when the eject event is generated by [[ibm-acpi]]. It will leave DMA support intact. It has supported to work on a ThinkPad {{T22}} and {{T40}} and should work with many other models (but not recent models which require the &amp;lt;tt&amp;gt;ata_piix&amp;lt;/tt&amp;gt; driver for disk DMA support). With the [[lt_hotswap]] kernel module loaded, run: {{cmdroot|modprobe -r ide_cd &amp;amp;&amp;amp; modprobe -r cdrom &amp;amp;&amp;amp; echo &amp;quot;MSTR eject&amp;quot; &amp;gt; /proc/acpi/lths}}&lt;br /&gt;
&lt;br /&gt;
===HAL support===&lt;br /&gt;
&lt;br /&gt;
HAL support also can also be configured To do so, create the file {{path|/etc/hal/fdi/information/10-ultrabay.fdi}} as follows:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt; &amp;lt;!-- -*- SGML -*- --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;deviceinfo version=&amp;quot;0.2&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;device&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- UltraBay Devices --&amp;gt;&lt;br /&gt;
    &amp;lt;match key=&amp;quot;storage.bus&amp;quot; string=&amp;quot;ide&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;match key=&amp;quot;storage.physical_device&amp;quot; string=&amp;quot;/org/freedesktop/Hal/devices/pci_8086_24ca_ide_1_0&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;merge key=&amp;quot;storage.hotpluggable&amp;quot; type=&amp;quot;bool&amp;quot;&amp;gt;true&amp;lt;/merge&amp;gt;&lt;br /&gt;
      &amp;lt;/match&amp;gt;&lt;br /&gt;
    &amp;lt;/match&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/device&amp;gt;&lt;br /&gt;
&amp;lt;/deviceinfo&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
For more details see HAL section for ata driver.&lt;br /&gt;
&lt;br /&gt;
==Other comments==&lt;br /&gt;
&lt;br /&gt;
If you are hot-swapping a hard disk on a disk tray, make sure the disk does not have a password set, otherwise it will not be recognized on reinsertion.&lt;br /&gt;
&lt;br /&gt;
[[Category:Scripts]]&lt;br /&gt;
[[Category:HOWTOs]]&lt;/div&gt;</summary>
		<author><name>Phoenix84</name></author>
		
	</entry>
	<entry>
		<id>https://www.thinkwiki.org/w/index.php?title=How_to_hotswap_Ultrabay_devices&amp;diff=42324</id>
		<title>How to hotswap Ultrabay devices</title>
		<link rel="alternate" type="text/html" href="https://www.thinkwiki.org/w/index.php?title=How_to_hotswap_Ultrabay_devices&amp;diff=42324"/>
		<updated>2009-03-27T05:37:49Z</updated>

		<summary type="html">&lt;p&gt;Phoenix84: /* Using the generic bay driver and udev */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The following discusses hotswap (AKA &amp;quot;hotplug&amp;quot;) of devices in the [[Ultrabay]].&lt;br /&gt;
&lt;br /&gt;
==Which driver?==&lt;br /&gt;
Since the following may be confusing for SATA ThinkPad owners, which are likely all the same for now, you have two busses and drivers: one SATA bus which works with the AHCI driver and one IDE bus for the Ultrabay for which you should pick &amp;lt;tt&amp;gt;ata_piix&amp;lt;/tt&amp;gt; ('''not''' piix/CONFIG_BLK_DEV_PIIX). See below for hotswapping.&lt;br /&gt;
&lt;br /&gt;
Debian users: at least up the the kernel released with Lenny, Debian applies a patch in the Debian kernel sources which prevents the use of &amp;lt;tt&amp;gt;ata_piix&amp;lt;/tt&amp;gt; with PATA devices (like the IDE bus for the Ultrabay). You will have to either use an upstream kernel or (re)patch the Debian kernel sources. &lt;br /&gt;
You may want to have a look at the following Debian bug reports as well: [http://bugs.debian.org/444182 #444182], [http://bugs.debian.org/463833 #463833].&lt;br /&gt;
&lt;br /&gt;
==Choosing the right driver: new style &amp;lt;tt&amp;gt;ata_piix&amp;lt;/tt&amp;gt; vs old style &amp;lt;tt&amp;gt;piix&amp;lt;/tt&amp;gt; together with &amp;lt;tt&amp;gt;ide-disk&amp;lt;/tt&amp;gt;==&lt;br /&gt;
For ICH5,6,7,8, systems, whether you have an older IDE only thinkpad, or a newer thinkpad like the T/Z61p, there is one SATA bus for the system hard drive and an IDE bus for the Ultrabay (even if your Ultrabay happens to have a SATA drive, as it'll be seen as an IDE device), you'll have two drivers to chose from for your ultrabay: the old IDE/&amp;lt;tt&amp;gt;piix&amp;lt;/tt&amp;gt;+&amp;lt;tt&amp;gt;ide-disk&amp;lt;/tt&amp;gt; driver, and the newer PATA (=IDE) support of the newer &amp;lt;tt&amp;gt;ata_piix&amp;lt;/tt&amp;gt; driver.&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;tt&amp;gt;piix&amp;lt;/tt&amp;gt;+&amp;lt;tt&amp;gt;ide-disk&amp;lt;/tt&amp;gt; are part of the old original IDE driver and your Ultrabay device will show up as &amp;lt;tt&amp;gt;/dev/hda&amp;lt;/tt&amp;gt;.&amp;lt;BR&amp;gt;&amp;lt;tt&amp;gt;ata-piix&amp;lt;/tt&amp;gt; is the new SATA/PATA (=IDE) driver that will cause your Ultrabay hard drive to show up as &amp;lt;tt&amp;gt;/dev/sda&amp;lt;/tt&amp;gt; and your CD-ROM as &amp;lt;tt&amp;gt;/dev/sr0&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The two things to know are: (1) you want to use &amp;lt;tt&amp;gt;ata_piix&amp;lt;/tt&amp;gt; and (2) if you build &amp;lt;tt&amp;gt;piix&amp;lt;/tt&amp;gt; in (CONFIG_BLK_DEV_PIIX enabled), or load it as a module, it'll take over the IDE bus and prevent ATA_PIIX from seeing your Ultrabay. You don't want that.&lt;br /&gt;
&lt;br /&gt;
The longer details are:&amp;lt;BR&amp;gt;&lt;br /&gt;
You don't want the &amp;lt;tt&amp;gt;piix&amp;lt;/tt&amp;gt;+&amp;lt;tt&amp;gt;ide-disk&amp;lt;/tt&amp;gt; combo because even as modules, you will not be able to unload &amp;lt;tt&amp;gt;piix&amp;lt;/tt&amp;gt; to reset the bus if there are issues swapping devices (with &amp;lt;tt&amp;gt;ata_piix&amp;lt;/tt&amp;gt;, even if you forget to unregister a drive before removing it, you can unload the module and reload it to reset the bus after the fact if you have a newer ThinkPad with a separate AHCI/SATA bus for the boot drive).&lt;br /&gt;
&lt;br /&gt;
As for hotswap, with &amp;lt;tt&amp;gt;piix&amp;lt;/tt&amp;gt;+&amp;lt;tt&amp;gt;ide-disk&amp;lt;/tt&amp;gt;, you can read the section below, but after more than one day of trying on 2.6.22.15 (as &amp;lt;tt&amp;gt;piix&amp;lt;/tt&amp;gt;+&amp;lt;tt&amp;gt;ide-disk&amp;lt;/tt&amp;gt; was taking over my IDE bus, and stopping me from using ata_piix before I removed it), I was not able to get hotswapping to work with piix+ide-disk (lt_hotswap would not even build on 2.6.22.15).&lt;br /&gt;
&lt;br /&gt;
hotswap just works with &amp;lt;tt&amp;gt;ata_pixx&amp;lt;/tt&amp;gt; on 2.6.22, and reportedly with anything newer than 2.6.18, so you want to get rid of &amp;lt;tt&amp;gt;piix&amp;lt;/tt&amp;gt;+&amp;lt;tt&amp;gt;ide-disk&amp;lt;/tt&amp;gt;.&lt;br /&gt;
There are several ways to do that:&lt;br /&gt;
* if &amp;lt;tt&amp;gt;piix&amp;lt;/tt&amp;gt; is built in your kernel (CONFIG_BLK_DEV_PIIX):&lt;br /&gt;
** rebuild your kernel with CONFIG_BLK_DEV_PIIX turned off.&lt;br /&gt;
** if you don't want to rebuild your kernel, try disabling the IDE bus grabbing by that driver with &amp;lt;tt&amp;gt;ide0=noprobe hda=noprobe hdb=noprobe&amp;lt;/tt&amp;gt; in your grub/lilo config (adjust the drive letters as appropriate, but note that this did not work for me on 2.6.22.15: the drive didn't show up on the &amp;lt;tt&amp;gt;piix&amp;lt;/tt&amp;gt; bus, but it didn't show up on the &amp;lt;tt&amp;gt;ata_piix&amp;lt;/tt&amp;gt; bus either).&lt;br /&gt;
* if &amp;lt;tt&amp;gt;piix&amp;lt;/tt&amp;gt; is built in as a module&lt;br /&gt;
** you can move out the module in {{path|/lib/modules/ver/kernel/drivers/ide/pci/piix.ko}} and reboot.&lt;br /&gt;
** or build a new kernel, again with CONFIG_BLK_DEV_PIIX turned off.&lt;br /&gt;
** or add &amp;lt;tt&amp;gt;options ide_core options=&amp;quot;ide0=noprobe hda=noprobe hdb=noprobe&amp;quot;&amp;lt;/tt&amp;gt; to your modprobe.conf is supposed to work too (but didn't work on 2.6.22.15, see comment above)&lt;br /&gt;
&lt;br /&gt;
Then, continue this document to see how to do hotswap with &amp;lt;tt&amp;gt;ata_piix&amp;lt;/tt&amp;gt; (if you are lucky enough to have a newer SATA ThinkPad where the &amp;lt;tt&amp;gt;ata_piix&amp;lt;/tt&amp;gt; driver only runs the Ultrabay, and you have a separate &amp;lt;tt&amp;gt;bus&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;ahci&amp;lt;/tt&amp;gt; driver for your main drive, it is recommended to have &amp;lt;tt&amp;gt;ata_piix&amp;lt;/tt&amp;gt; as a module (&amp;lt;tt&amp;gt;CONFIG_ATA_PIIX=m&amp;lt;/tt&amp;gt;) so that you can unload/reload it if your bus gets in a bad state after a failed hotswap)&lt;br /&gt;
&lt;br /&gt;
==When using the &amp;lt;tt&amp;gt;ata_piix&amp;lt;/tt&amp;gt; driver==&lt;br /&gt;
The following applies when using the &amp;lt;tt&amp;gt;ata_piix&amp;lt;/tt&amp;gt; driver, which is necessary for many recent ThinkPad models that use an [[Intel ICH6-M]] controller. See also [[Problems with SATA and Linux]]. &lt;br /&gt;
&lt;br /&gt;
Mainline kernels before 2.6.18 cannot reliably recognize newly (re-)inserted Ultrabay drives without a reboot. There are experimental hotplug patches against pre-2.6.18 mainline kernels [http://home-tj.org/wiki/index.php/Libata-tj-stable here].&lt;br /&gt;
&lt;br /&gt;
* Available hotplug patches&lt;br /&gt;
**[http://home-tj.org/files/libata-tj-stable/libata-tj-2.6.16.16-20060512.tar.bz2 Patch tarball against 2.6.16.16] ([http://lwn.net/Articles/183407/ Announce])&lt;br /&gt;
**[http://home-tj.org/files/libata-tj-stable/libata-tj-2.6.17-20060625-1.tar.bz2 Patch tarball against 2.6.17/2.6.17.1] ([http://article.gmane.org/gmane.linux.ide/11598 Announce])&lt;br /&gt;
**[http://home-tj.org/files/libata-tj-stable/libata-tj-2.6.17.4-20060710.tar.bz2 Patch tarball against 2.6.17.4]&lt;br /&gt;
**[http://whoopie.gmxhome.de/linux/patches/2.6.17.14-tj/00-libata-tj-2.6.17.4-20060710.patch Patch against 2.6.17.14]&lt;br /&gt;
&lt;br /&gt;
* Confirmed to work on the following laptops, with bus the following ID &lt;br /&gt;
**ThinkPad {{T23}}&lt;br /&gt;
**ThinkPad {{T30}}&lt;br /&gt;
**ThinkPad {{T43}}, {{T43p}}&lt;br /&gt;
**ThinkPad {{R52}}&lt;br /&gt;
**ThinkPad {{T60}} ID=4&lt;br /&gt;
**ThinkPad {{T61}} ID=0&lt;br /&gt;
**ThinkPad {{Z61p}} ID=4 (0-3:ahci, 5-6: ata_piix)&lt;br /&gt;
ID will typically be 1 if you only have an IDE bus (0 is boot drive, 1 is Ultrabay), and it'll be 4 if you have a SATA bus your system boots from (ID 0-3) and an IDE bus for your Ultrabay (ID 4-5).&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Note that even on a given laptop model the ID can vary depending on whether your kernel has drivers that configure your boot drive is using the old style IDE driver (which doesn't add IDs before your Ultrabay), or whether your boot drive is using the new style driver (which  adds IDs before your Ultrabay)&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hotplug just works with kernels newer than 2.6.18 ( or older kernels that were patched to support &amp;lt;tt&amp;gt;ata_piix&amp;lt;/tt&amp;gt; hotplug (don't try it otherwise!))&amp;lt;BR&amp;gt;&lt;br /&gt;
First, it is recommended you find the right SCSI ID for your drive to hotswap and unregister it before removing it (this works with all recent mainline kernels):&lt;br /&gt;
 {{cmdroot|echo 1 &amp;gt; /sys/class/scsi_device/$ID:0:0:0/device/delete}} &lt;br /&gt;
 {{cmdroot|echo eject &amp;gt;  /proc/acpi/ibm/bay}}&lt;br /&gt;
The drive can now be ejected (without this, your IDE bus may complain if you just yank a drive, but you can usually recover by unloading/reloading the &amp;lt;tt&amp;gt;ata_piix&amp;lt;/tt&amp;gt; module on a SATA laptop if your main drive is not on the &amp;lt;tt&amp;gt;ata_piix&amp;lt;/tt&amp;gt; bus)&lt;br /&gt;
&lt;br /&gt;
You can then issue the following after inserting an Ultrabay drive to rescan the port:&lt;br /&gt;
 {{cmdroot|echo 0 0 0 &amp;gt;  /sys/class/scsi_host/host$ID/scan}}&lt;br /&gt;
The inserted drive should now be recognized by the kernel, and appropriate {{path|/dev/*}} entries created automatically (e.g., by &amp;lt;tt&amp;gt;udev&amp;lt;/tt&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Ted T'so has also written this hotswap patch, which may or may not be needed for you, see [http://www.mail-archive.com/linux-acpi@vger.kernel.org/msg04716.html hotswap patch] and report back&lt;br /&gt;
&lt;br /&gt;
===Scripts for hotswapping===&lt;br /&gt;
&lt;br /&gt;
The following scripts and [[acpid]] daemon configuration files do the following:&lt;br /&gt;
* Automatically unmounts the relevant filesystems and power off the Ultrabay when the Ultrabay eject lever is released. Screams if some filesystem can't be unmounted.&lt;br /&gt;
* Rescans the Ultrabay port when then Ultrabay eject lever is pushed back in.&lt;br /&gt;
&lt;br /&gt;
They assumes you're using the &amp;lt;tt&amp;gt;ata_piix&amp;lt;/tt&amp;gt; driver with an appropriate kernel (see above).&lt;br /&gt;
&lt;br /&gt;
Create {{path|/usr/local/sbin/ultrabay_insert}} with permissions 755:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
echo 12 &amp;gt; /proc/acpi/ibm/beep&lt;br /&gt;
sync&lt;br /&gt;
echo 0 0 0 &amp;gt; /sys/class/scsi_host/host1/scan&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Create {{path|/usr/local/sbin/ultrabay_eject}} with permissions 755:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
ULTRABAY_SYSDIR='/sys/class/scsi_device/1:0:0:0/device'&lt;br /&gt;
shopt -s nullglob&lt;br /&gt;
&lt;br /&gt;
# Umount the filesystem(s) backed by the given major:minor device(s)&lt;br /&gt;
unmount_rdev() { perl - &amp;quot;$@&amp;quot; &amp;lt;&amp;lt;'EOPERL'  # let's do it in Perl&lt;br /&gt;
	for $major_minor (@ARGV) {&lt;br /&gt;
		$major_minor =~ m/^(\d+):(\d+)$/ or die;&lt;br /&gt;
		push(@tgt_rdevs, ($1&amp;lt;&amp;lt;8)|$2);&lt;br /&gt;
	}&lt;br /&gt;
        # Sort by reverse length of mount point, to unmount sub-directories first&lt;br /&gt;
        open MOUNTS,&amp;quot;&amp;lt;/proc/mounts&amp;quot; or die &amp;quot;$!&amp;quot;;&lt;br /&gt;
        @mounts=sort { length($b-&amp;gt;[1]) &amp;lt;=&amp;gt; length($a-&amp;gt;[1]) } map { [ split ] } &amp;lt;MOUNTS&amp;gt;;&lt;br /&gt;
        close MOUNTS;&lt;br /&gt;
        foreach $m (@mounts) {&lt;br /&gt;
                ($dev,$dir)=@$m;&lt;br /&gt;
		next unless -b $dev;  $rdev=(stat($dev))[6];&lt;br /&gt;
		next unless grep($_==$rdev, @tgt_rdevs);&lt;br /&gt;
		system(&amp;quot;umount&amp;quot;,&amp;quot;-v&amp;quot;,&amp;quot;$dir&amp;quot;)==0  or  $bad=1;&lt;br /&gt;
	}&lt;br /&gt;
	exit 1 if $bad;&lt;br /&gt;
EOPERL&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Get the UltraBay's /dev/foo block device node&lt;br /&gt;
ultrabay_dev_node() {&lt;br /&gt;
	UDEV_PATH=&amp;quot;`readlink -e &amp;quot;$ULTRABAY_SYSDIR/block:&amp;quot;*`&amp;quot; || return 1&lt;br /&gt;
	UDEV_NAME=&amp;quot;`udevinfo -q name -p $UDEV_PATH`&amp;quot; || return 1&lt;br /&gt;
	echo /dev/$UDEV_NAME&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
if [ -d $ULTRABAY_SYSDIR ]; then&lt;br /&gt;
	sync&lt;br /&gt;
	# Unmount filesystems backed by this device&lt;br /&gt;
	unmount_rdev `cat $ULTRABAY_SYSDIR/block\:*/dev     \&lt;br /&gt;
	                  $ULTRABAY_SYSDIR/block\:*/*/dev`  \&lt;br /&gt;
	|| {&lt;br /&gt;
		echo 10 &amp;gt; /proc/acpi/ibm/beep;  # error tone&lt;br /&gt;
		exit 1;&lt;br /&gt;
	}&lt;br /&gt;
        sync&lt;br /&gt;
        # Nicely power off the device&lt;br /&gt;
	DEVNODE=`ultrabay_dev_node` &amp;amp;&amp;amp; hdparm -Y $DEVNODE&lt;br /&gt;
        # Let HAL+KDE notice the unmount and let the disk spin down&lt;br /&gt;
	sleep 0.5&lt;br /&gt;
	# Unregister this SCSI device:&lt;br /&gt;
	sync&lt;br /&gt;
	echo 1 &amp;gt; $ULTRABAY_SYSDIR/delete&lt;br /&gt;
fi&lt;br /&gt;
sync&lt;br /&gt;
# We really need a 3 sec pause here otherwise the system will freeze..&lt;br /&gt;
sleep 3&lt;br /&gt;
# Turn off power to the UltraBay:&lt;br /&gt;
if [ -d /sys/devices/platform/bay.0 ]; then&lt;br /&gt;
	echo 1 &amp;gt; /sys/devices/platform/bay.0/eject&lt;br /&gt;
elif [ -e /proc/acpi/ibm/bay ]; then&lt;br /&gt;
	echo eject &amp;gt; /proc/acpi/ibm/bay&lt;br /&gt;
fi&lt;br /&gt;
# Tell the user we're OK&lt;br /&gt;
echo 12 &amp;gt; /proc/acpi/ibm/beep&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Use the modified version below if the above doesn't work for you (for kernels 2.6.25+ due to &amp;quot;ULTRABAY_SYSDIR/block\:*/dev&amp;quot; path change). It was tested on a Thinkpad X41 with Fedora 9 and kernel 2.6.25.11:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
ULTRABAY_SYSDIR='/sys/class/scsi_device/1:0:0:0/device'&lt;br /&gt;
shopt -s nullglob&lt;br /&gt;
&lt;br /&gt;
# Umount the filesystem(s) backed by the given major:minor device(s)&lt;br /&gt;
unmount_rdev() { perl - &amp;quot;$@&amp;quot; &amp;lt;&amp;lt;'EOPERL'  # let's do it in Perl&lt;br /&gt;
	for $major_minor (@ARGV) {&lt;br /&gt;
		$major_minor =~ m/^(\d+):(\d+)$/ or die;&lt;br /&gt;
		push(@tgt_rdevs, ($1&amp;lt;&amp;lt;8)|$2);&lt;br /&gt;
	}&lt;br /&gt;
        # Sort by reverse length of mount point, to unmount sub-directories first&lt;br /&gt;
        open MOUNTS,&amp;quot;&amp;lt;/proc/mounts&amp;quot; or die &amp;quot;$!&amp;quot;;&lt;br /&gt;
        @mounts=sort { length($b-&amp;gt;[1]) &amp;lt;=&amp;gt; length($a-&amp;gt;[1]) } map { [ split ] } &amp;lt;MOUNTS&amp;gt;;&lt;br /&gt;
        close MOUNTS;&lt;br /&gt;
        foreach $m (@mounts) {&lt;br /&gt;
                ($dev,$dir)=@$m;&lt;br /&gt;
		next unless -b $dev;  $rdev=(stat($dev))[6];&lt;br /&gt;
		next unless grep($_==$rdev, @tgt_rdevs);&lt;br /&gt;
		system(&amp;quot;umount&amp;quot;,&amp;quot;-v&amp;quot;,&amp;quot;$dir&amp;quot;)==0  or  $bad=1;&lt;br /&gt;
	}&lt;br /&gt;
	exit 1 if $bad;&lt;br /&gt;
EOPERL&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Get the UltraBay's /dev/foo block device node&lt;br /&gt;
ultrabay_dev_node() {&lt;br /&gt;
	UDEV_PATH=&amp;quot;`readlink -e &amp;quot;$ULTRABAY_SYSDIR/block/&amp;quot;*`&amp;quot; || return 1&lt;br /&gt;
	UDEV_NAME=&amp;quot;`udevinfo -q name -p $UDEV_PATH`&amp;quot; || return 1&lt;br /&gt;
	echo /dev/$UDEV_NAME&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
if [ -d $ULTRABAY_SYSDIR ]; then&lt;br /&gt;
	sync&lt;br /&gt;
	# Unmount filesystems backed by this device&lt;br /&gt;
	unmount_rdev `cat $ULTRABAY_SYSDIR/block/*/dev     \&lt;br /&gt;
	                  $ULTRABAY_SYSDIR/block/*/*/dev`  \&lt;br /&gt;
	|| {&lt;br /&gt;
		echo 10 &amp;gt; /proc/acpi/ibm/beep;  # error tone&lt;br /&gt;
		exit 1;&lt;br /&gt;
	}&lt;br /&gt;
        sync&lt;br /&gt;
        # Nicely power off the device&lt;br /&gt;
	DEVNODE=`ultrabay_dev_node` &amp;amp;&amp;amp; hdparm -Y $DEVNODE&lt;br /&gt;
        # Let HAL+KDE notice the unmount and let the disk spin down&lt;br /&gt;
	sleep 0.5&lt;br /&gt;
	# Unregister this SCSI device:&lt;br /&gt;
	sync&lt;br /&gt;
	echo 1 &amp;gt; $ULTRABAY_SYSDIR/delete&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# We really need a 3 sec pause here otherwise the system will freeze..&lt;br /&gt;
sleep 3&lt;br /&gt;
&lt;br /&gt;
# Turn off power to the UltraBay:&lt;br /&gt;
dock=$( /bin/grep ata_bay /sys/devices/platform/dock.?/type )&lt;br /&gt;
dock=${dock%%/type:ata_bay} # needed for 2.6.27 and later&lt;br /&gt;
if [ -n &amp;quot;$dock&amp;quot; -a -d &amp;quot;$dock&amp;quot; ]; then&lt;br /&gt;
        echo 1 &amp;gt; $dock/undock&lt;br /&gt;
elif [ -d /sys/devices/platform/bay.0 ]; then&lt;br /&gt;
	echo 1 &amp;gt; /sys/devices/platform/bay.0/eject&lt;br /&gt;
elif [ -e /proc/acpi/ibm/bay ]; then&lt;br /&gt;
	echo eject &amp;gt; /proc/acpi/ibm/bay&lt;br /&gt;
fi&lt;br /&gt;
# Tell the user we're OK&lt;br /&gt;
echo 12 &amp;gt; /proc/acpi/ibm/beep&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Create {{path|/etc/acpi/events/ultrabay-insert}}:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
event=ibm/bay MSTR 00000001 00000000&lt;br /&gt;
action=/usr/local/sbin/ultrabay_insert&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Create {{path|/etc/acpi/events/ultrabay-eject}}:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
event=ibm/bay MSTR 00000003 00000000&lt;br /&gt;
action=/usr/local/sbin/ultrabay_eject&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Restart &amp;lt;tt&amp;gt;acpid&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
If the &amp;lt;tt&amp;gt;ata_piix&amp;lt;/tt&amp;gt; driver is built in the kernel, it will catch bay events and you will see the&lt;br /&gt;
following message in your system log:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
thinkpad_acpi: another device driver is already handling bay events&lt;br /&gt;
thinkpad_acpi: disabling subdriver bay&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
You should load &amp;lt;tt&amp;gt;thinkpad_acpi&amp;lt;/tt&amp;gt; before &amp;lt;tt&amp;gt;ata_piix&amp;lt;/tt&amp;gt; if you want it to handle bay events.&lt;br /&gt;
&lt;br /&gt;
===Using the generic bay driver and udev===&lt;br /&gt;
&lt;br /&gt;
Starting from kernel 2.6.23-rc3, it's possible to use the generic &amp;lt;tt&amp;gt;bay&amp;lt;/tt&amp;gt; driver in combination with udev to hotswap. Please check if CONFIG_ACPI_BAY is enabled (module or built-in) in your kernel configuration.&lt;br /&gt;
&lt;br /&gt;
Create {{path|/etc/udev/rules.d/ibm-ultrabay.rules}}:&lt;br /&gt;
 ENV{BAY_EVENT}==&amp;quot;3&amp;quot;, KERNEL==&amp;quot;bay.0&amp;quot;, ACTION==&amp;quot;change&amp;quot;, SUBSYSTEM==&amp;quot;platform&amp;quot;, RUN+=&amp;quot;/usr/local/sbin/ultrabay_eject&amp;quot;&lt;br /&gt;
 ENV{BAY_EVENT}==&amp;quot;1&amp;quot;, KERNEL==&amp;quot;bay.0&amp;quot;, ACTION==&amp;quot;change&amp;quot;, SUBSYSTEM==&amp;quot;platform&amp;quot;, RUN+=&amp;quot;/usr/local/sbin/ultrabay_insert&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Starting with kernel 2.6.28, the &amp;lt;tt&amp;gt;bay&amp;lt;/tt&amp;gt; drivernel was remove from the mainline ker. The &amp;lt;tt&amp;gt;dock&amp;lt;/tt&amp;gt; driver replaced it completely. Make sure CONFIG_ACPI_DOCK is enabled in the kernel, and use the following udev rules:&lt;br /&gt;
&lt;br /&gt;
 ENV{EVENT}==&amp;quot;undock&amp;quot;, KERNEL==&amp;quot;dock.2&amp;quot;, ACTION==&amp;quot;change&amp;quot;, SUBSYSTEM==&amp;quot;platform&amp;quot;, RUN+=&amp;quot;/usr/local/sbin/ultrabay_eject&amp;quot;&lt;br /&gt;
 ENV{EVENT}==&amp;quot;dock&amp;quot;, KERNEL==&amp;quot;dock.2&amp;quot;, ACTION==&amp;quot;change&amp;quot;, SUBSYSTEM==&amp;quot;platform&amp;quot;, RUN+=&amp;quot;/usr/local/sbin/ultrabay_insert&amp;quot;&lt;br /&gt;
&lt;br /&gt;
However, the ultra_eject script needs to be changed, otherwise udev goes into an infinite event loop. It will send undock events every few seconds forever. That means as soon as the ultrabay is plugged in again, it will be immediately ejected. For kernels 2.6.28 and higher, the bay cannot be powered off using this method, so change the end of the script to read:&lt;br /&gt;
 # Turn off power to the UltraBay:&lt;br /&gt;
 if [ -d /sys/devices/platform/bay.0 ]; then&lt;br /&gt;
 	echo 1 &amp;gt; /sys/devices/platform/bay.0/eject&lt;br /&gt;
 elif [ -e /proc/acpi/ibm/bay ]; then&lt;br /&gt;
 	echo eject &amp;gt; /proc/acpi/ibm/bay&lt;br /&gt;
 fi&lt;br /&gt;
 # Tell the user we're OK&lt;br /&gt;
 echo 12 &amp;gt; /proc/acpi/ibm/beep&lt;br /&gt;
&lt;br /&gt;
This was tested on a T61p running Gentoo with tuxonice 2.6.28-r8 without any issues.&lt;br /&gt;
&lt;br /&gt;
===Using libata-acpi and udev===&lt;br /&gt;
&lt;br /&gt;
Starting from kernel 2.6.26-rc5, it's possible to use &amp;lt;tt&amp;gt;libata-acpi&amp;lt;/tt&amp;gt; in combination with udev to hotswap. Please check if CONFIG_ATA_ACPI is enabled in your kernel configuration.&lt;br /&gt;
&lt;br /&gt;
For 2.6.25, you need two patches which can be easily backported ([http://article.gmane.org/gmane.linux.acpi.devel/31159],[http://article.gmane.org/gmane.linux.acpi.devel/31369]).&lt;br /&gt;
&lt;br /&gt;
Create {{path|/etc/udev/rules.d/ibm-ultrabay.rules}}:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ENV{BAY_EVENT}==&amp;quot;3&amp;quot;, ACTION==&amp;quot;change&amp;quot;, SUBSYSTEM==&amp;quot;scsi&amp;quot;, RUN+=&amp;quot;/usr/local/sbin/ultrabay_eject&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Model-specific notes===&lt;br /&gt;
See the table above for a list of ata_piix supported laptops and the bus ID to use.&lt;br /&gt;
&lt;br /&gt;
===HAL support===&lt;br /&gt;
&lt;br /&gt;
{{NOTE| Starting from HAL 0.5.11, you need to replace &amp;quot;storage.physical_device&amp;quot; with &amp;quot;info.parent&amp;quot;.}}&lt;br /&gt;
&lt;br /&gt;
Many programs, KDE included, rely on [[HAL]] to get notifications and information about device hotplugging. You need to tell HAL that devices connected the UltraBay port are hotpluggable. To do so, create the file {{path|/etc/hal/fdi/information/10-ultrabay.fdi}} as follows:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt; &amp;lt;!-- -*- SGML -*- --&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;deviceinfo version=&amp;quot;0.2&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;device&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- UltraBay Devices --&amp;gt;&lt;br /&gt;
    &amp;lt;match key=&amp;quot;storage.bus&amp;quot; string=&amp;quot;scsi&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;match key=&amp;quot;storage.physical_device&amp;quot; string=&amp;quot;/org/freedesktop/Hal/devices/pci_8086_2653_scsi_host_0_scsi_device_lun0&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;merge key=&amp;quot;storage.hotpluggable&amp;quot; type=&amp;quot;bool&amp;quot;&amp;gt;true&amp;lt;/merge&amp;gt;&lt;br /&gt;
      &amp;lt;/match&amp;gt;&lt;br /&gt;
    &amp;lt;/match&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/device&amp;gt;&lt;br /&gt;
&amp;lt;/deviceinfo&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The string &amp;quot;8086_2653&amp;quot; may need to be changed to match your ThinkPad model; see below.&lt;br /&gt;
&lt;br /&gt;
====Details====&lt;br /&gt;
&lt;br /&gt;
By default, HAL doesn't know that UltraBay devices are hotpluggable:&lt;br /&gt;
&lt;br /&gt;
 # PHYSDEV=/org/freedesktop/Hal/devices/pci_8086_2653_scsi_host_0_scsi_device_lun0&lt;br /&gt;
 # UDI=`hal-find-by-property --key storage.physical_device --string $PHYSDEV` || echo Failed&lt;br /&gt;
 # hal-get-property --udi $UDI --key block.device&lt;br /&gt;
 /dev/sdb&lt;br /&gt;
 # hal-get-property --udi $UDI --key storage.hotpluggable&lt;br /&gt;
 false&lt;br /&gt;
&lt;br /&gt;
After creating {{path|/etc/hal/fdi/information/10-ultrabay.fdi}} as above and re-plugging the device, it will get marked correctly:&lt;br /&gt;
&lt;br /&gt;
 # PHYSDEV=/org/freedesktop/Hal/devices/pci_8086_2653_scsi_host_0_scsi_device_lun0&lt;br /&gt;
 # UDI=`hal-find-by-property --key storage.physical_device --string $PHYSDEV` || echo Failed&lt;br /&gt;
 # hal-get-property --udi $UDI --key block.device&lt;br /&gt;
 /dev/sdb&lt;br /&gt;
 # hal-get-property --udi $UDI --key storage.hotpluggable&lt;br /&gt;
 true&lt;br /&gt;
&lt;br /&gt;
The string &amp;quot;8086_2653&amp;quot; gives the PCI ID of the [[Intel 82801FBM]] southbridge. If your model has a different southbridge, or the UltraBay is attached to a different port, then you can find the appropriate &amp;lt;tt&amp;gt;storage.physical_device&amp;lt;/tt&amp;gt; value by finding out the block device of the currently running UltraBay device (&amp;lt;tt&amp;gt;/dev/sdb&amp;lt;/tt&amp;gt; in the following example) and then running:&lt;br /&gt;
&lt;br /&gt;
 # DEVICE=/dev/sdb&lt;br /&gt;
 # UDI=`hal-find-by-property --key block.device --string $DEVICE` || echo Failed&lt;br /&gt;
 # hal-get-property --udi $UDI --key storage.physical_device&lt;br /&gt;
 /org/freedesktop/Hal/devices/pci_8086_2653_scsi_host_0_scsi_device_lun0&lt;br /&gt;
&lt;br /&gt;
If you have a different &amp;lt;tt&amp;gt;storage.physical_device&amp;lt;/tt&amp;gt; value, please report your findings.&lt;br /&gt;
&lt;br /&gt;
{| border=1&lt;br /&gt;
|+ Known South Bridge PCI IDs&lt;br /&gt;
! ID !! ThinkPad model !! South Bridge chip&lt;br /&gt;
|-&lt;br /&gt;
| 8086_248a || 2366-83U (T30), 2647-MG3 (T23)|| Intel 82801CAM IDE U100 (rev 2)&lt;br /&gt;
|-&lt;br /&gt;
| 8086_2653 || 2525FAG (X41), ? (T43) || Intel 82801FBM (ICH6-M)&lt;br /&gt;
|-&lt;br /&gt;
| 8086_24ca || 237358U (T40), 2373KXU (T42p) || Intel 82801DBM (ICH4-M)&lt;br /&gt;
|-&lt;br /&gt;
| 8086_27c4 || X60           || Intel 82801GBM (ICH7 Family)&lt;br /&gt;
|-&lt;br /&gt;
| 8086_27df || Z61p, T60, T60p || Intel 82801GBM/GHM (ICH7 Family)&lt;br /&gt;
|-&lt;br /&gt;
| 8086_2850 || T61, T61p || Intel 82801H (ICH8 Family)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==When using the &amp;lt;tt&amp;gt;ide-disk&amp;lt;/tt&amp;gt; driver==&lt;br /&gt;
The following applies if you use the &amp;lt;tt&amp;gt;ide-disk&amp;lt;/tt&amp;gt; driver for the UltraBay device.&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Note that essentially, you shouldn't be using this driver, and use ata_piix instead unless you're running an older kernel where ata_piix won't work for you&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hotswapping is supposed to be supported as well, using either hdparm/[http://packages.debian.org/unstable/admin/hotswap Debian hotswap] or [[lt_hotswap]] to (un)register IDE devices. The latter is the recommended method with kernels from 2.6, since it will leave DMA working. However, for recent models (R52, T43, X41, Z60 and later) no method is known to work while maintaining DMA support; see [[Problems with SATA and Linux]].&lt;br /&gt;
&lt;br /&gt;
Only IDE devices (HDD's, optical drives, zip drives) require special treatment - batteries, floppies and other devices can just be pulled from the bay, provided they are not mounted or in use at the time. However, you should still power them down first using the [[ibm-acpi]] eject function.&lt;br /&gt;
&lt;br /&gt;
The [[ibm-acpi]] kernel module has an eject function ({{cmdroot|echo eject &amp;gt; /proc/acpi/ibm/bay}}). This only manages the ACPI calls to power down the device and the bay. It does not actually unregister the device from the IDE driver. {{cmdroot|cat /proc/acpi/ibm/bay}} shows &amp;quot;unoccupied&amp;quot; unless an IDE device is present, but the eject function still works and should still be used.&lt;br /&gt;
&lt;br /&gt;
To unregister the device, you can either use the [http://packages.debian.org/unstable/admin/hotswap Debian hotswap] package, or [[lt_hotswap]]. Note that lt_hotswap doesn't seem to even build on recent (at 2.6.22 or newer, although it probably broke before 2.6.22) and on newer kernels, you should not build/load the old IDE PIIX (CONFIG_BLK_DEV_PIIX) and use the natively hotswapping ata_piix (CONFIG_ATA_PIIX) as explained on the top of this page.&lt;br /&gt;
&lt;br /&gt;
[http://packages.debian.org/unstable/admin/hotswap Debian hotswap] also allows the drive to be swapped as a normal user by default, which is useful. You should use &amp;lt;tt&amp;gt;hotswap&amp;lt;/tt&amp;gt; to unregister the device and then {{cmdroot|echo eject &amp;gt; /proc/acpi/ibm/bay}}. However, if you use this method on a 2.6 kernel, you will lose DMA support for the reinserted drive. This is due to kernel issues. This method was reported to work on a ThinkPad {{T23}} (kernels 2.6.8.1, 2.6.14.2 and 2.6.15-arch) and {{T42}} (kernel 2.6.13), but fails on a ThinkPad {{T43}} (kernel 2.6.14.3).&lt;br /&gt;
&lt;br /&gt;
[[lt_hotswap]] is now the recommended method to un- and reregister the IDE device. It installs as a kernel module and has support for automatically unregistering (if loaded with the auto_eject=1 option) the device when the eject event is generated by [[ibm-acpi]]. It will leave DMA support intact. It has supported to work on a ThinkPad {{T22}} and {{T40}} and should work with many other models (but not recent models which require the &amp;lt;tt&amp;gt;ata_piix&amp;lt;/tt&amp;gt; driver for disk DMA support). With the [[lt_hotswap]] kernel module loaded, run: {{cmdroot|modprobe -r ide_cd &amp;amp;&amp;amp; modprobe -r cdrom &amp;amp;&amp;amp; echo &amp;quot;MSTR eject&amp;quot; &amp;gt; /proc/acpi/lths}}&lt;br /&gt;
&lt;br /&gt;
===HAL support===&lt;br /&gt;
&lt;br /&gt;
HAL support also can also be configured To do so, create the file {{path|/etc/hal/fdi/information/10-ultrabay.fdi}} as follows:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt; &amp;lt;!-- -*- SGML -*- --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;deviceinfo version=&amp;quot;0.2&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;device&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- UltraBay Devices --&amp;gt;&lt;br /&gt;
    &amp;lt;match key=&amp;quot;storage.bus&amp;quot; string=&amp;quot;ide&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;match key=&amp;quot;storage.physical_device&amp;quot; string=&amp;quot;/org/freedesktop/Hal/devices/pci_8086_24ca_ide_1_0&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;merge key=&amp;quot;storage.hotpluggable&amp;quot; type=&amp;quot;bool&amp;quot;&amp;gt;true&amp;lt;/merge&amp;gt;&lt;br /&gt;
      &amp;lt;/match&amp;gt;&lt;br /&gt;
    &amp;lt;/match&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/device&amp;gt;&lt;br /&gt;
&amp;lt;/deviceinfo&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
For more details see HAL section for ata driver.&lt;br /&gt;
&lt;br /&gt;
==Other comments==&lt;br /&gt;
&lt;br /&gt;
If you are hot-swapping a hard disk on a disk tray, make sure the disk does not have a password set, otherwise it will not be recognized on reinsertion.&lt;br /&gt;
&lt;br /&gt;
[[Category:Scripts]]&lt;br /&gt;
[[Category:HOWTOs]]&lt;/div&gt;</summary>
		<author><name>Phoenix84</name></author>
		
	</entry>
	<entry>
		<id>https://www.thinkwiki.org/w/index.php?title=How_to_hotswap_Ultrabay_devices&amp;diff=42323</id>
		<title>How to hotswap Ultrabay devices</title>
		<link rel="alternate" type="text/html" href="https://www.thinkwiki.org/w/index.php?title=How_to_hotswap_Ultrabay_devices&amp;diff=42323"/>
		<updated>2009-03-27T05:36:30Z</updated>

		<summary type="html">&lt;p&gt;Phoenix84: Added configuration changes for 2.6.28+ kernels.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The following discusses hotswap (AKA &amp;quot;hotplug&amp;quot;) of devices in the [[Ultrabay]].&lt;br /&gt;
&lt;br /&gt;
==Which driver?==&lt;br /&gt;
Since the following may be confusing for SATA ThinkPad owners, which are likely all the same for now, you have two busses and drivers: one SATA bus which works with the AHCI driver and one IDE bus for the Ultrabay for which you should pick &amp;lt;tt&amp;gt;ata_piix&amp;lt;/tt&amp;gt; ('''not''' piix/CONFIG_BLK_DEV_PIIX). See below for hotswapping.&lt;br /&gt;
&lt;br /&gt;
Debian users: at least up the the kernel released with Lenny, Debian applies a patch in the Debian kernel sources which prevents the use of &amp;lt;tt&amp;gt;ata_piix&amp;lt;/tt&amp;gt; with PATA devices (like the IDE bus for the Ultrabay). You will have to either use an upstream kernel or (re)patch the Debian kernel sources. &lt;br /&gt;
You may want to have a look at the following Debian bug reports as well: [http://bugs.debian.org/444182 #444182], [http://bugs.debian.org/463833 #463833].&lt;br /&gt;
&lt;br /&gt;
==Choosing the right driver: new style &amp;lt;tt&amp;gt;ata_piix&amp;lt;/tt&amp;gt; vs old style &amp;lt;tt&amp;gt;piix&amp;lt;/tt&amp;gt; together with &amp;lt;tt&amp;gt;ide-disk&amp;lt;/tt&amp;gt;==&lt;br /&gt;
For ICH5,6,7,8, systems, whether you have an older IDE only thinkpad, or a newer thinkpad like the T/Z61p, there is one SATA bus for the system hard drive and an IDE bus for the Ultrabay (even if your Ultrabay happens to have a SATA drive, as it'll be seen as an IDE device), you'll have two drivers to chose from for your ultrabay: the old IDE/&amp;lt;tt&amp;gt;piix&amp;lt;/tt&amp;gt;+&amp;lt;tt&amp;gt;ide-disk&amp;lt;/tt&amp;gt; driver, and the newer PATA (=IDE) support of the newer &amp;lt;tt&amp;gt;ata_piix&amp;lt;/tt&amp;gt; driver.&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;tt&amp;gt;piix&amp;lt;/tt&amp;gt;+&amp;lt;tt&amp;gt;ide-disk&amp;lt;/tt&amp;gt; are part of the old original IDE driver and your Ultrabay device will show up as &amp;lt;tt&amp;gt;/dev/hda&amp;lt;/tt&amp;gt;.&amp;lt;BR&amp;gt;&amp;lt;tt&amp;gt;ata-piix&amp;lt;/tt&amp;gt; is the new SATA/PATA (=IDE) driver that will cause your Ultrabay hard drive to show up as &amp;lt;tt&amp;gt;/dev/sda&amp;lt;/tt&amp;gt; and your CD-ROM as &amp;lt;tt&amp;gt;/dev/sr0&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The two things to know are: (1) you want to use &amp;lt;tt&amp;gt;ata_piix&amp;lt;/tt&amp;gt; and (2) if you build &amp;lt;tt&amp;gt;piix&amp;lt;/tt&amp;gt; in (CONFIG_BLK_DEV_PIIX enabled), or load it as a module, it'll take over the IDE bus and prevent ATA_PIIX from seeing your Ultrabay. You don't want that.&lt;br /&gt;
&lt;br /&gt;
The longer details are:&amp;lt;BR&amp;gt;&lt;br /&gt;
You don't want the &amp;lt;tt&amp;gt;piix&amp;lt;/tt&amp;gt;+&amp;lt;tt&amp;gt;ide-disk&amp;lt;/tt&amp;gt; combo because even as modules, you will not be able to unload &amp;lt;tt&amp;gt;piix&amp;lt;/tt&amp;gt; to reset the bus if there are issues swapping devices (with &amp;lt;tt&amp;gt;ata_piix&amp;lt;/tt&amp;gt;, even if you forget to unregister a drive before removing it, you can unload the module and reload it to reset the bus after the fact if you have a newer ThinkPad with a separate AHCI/SATA bus for the boot drive).&lt;br /&gt;
&lt;br /&gt;
As for hotswap, with &amp;lt;tt&amp;gt;piix&amp;lt;/tt&amp;gt;+&amp;lt;tt&amp;gt;ide-disk&amp;lt;/tt&amp;gt;, you can read the section below, but after more than one day of trying on 2.6.22.15 (as &amp;lt;tt&amp;gt;piix&amp;lt;/tt&amp;gt;+&amp;lt;tt&amp;gt;ide-disk&amp;lt;/tt&amp;gt; was taking over my IDE bus, and stopping me from using ata_piix before I removed it), I was not able to get hotswapping to work with piix+ide-disk (lt_hotswap would not even build on 2.6.22.15).&lt;br /&gt;
&lt;br /&gt;
hotswap just works with &amp;lt;tt&amp;gt;ata_pixx&amp;lt;/tt&amp;gt; on 2.6.22, and reportedly with anything newer than 2.6.18, so you want to get rid of &amp;lt;tt&amp;gt;piix&amp;lt;/tt&amp;gt;+&amp;lt;tt&amp;gt;ide-disk&amp;lt;/tt&amp;gt;.&lt;br /&gt;
There are several ways to do that:&lt;br /&gt;
* if &amp;lt;tt&amp;gt;piix&amp;lt;/tt&amp;gt; is built in your kernel (CONFIG_BLK_DEV_PIIX):&lt;br /&gt;
** rebuild your kernel with CONFIG_BLK_DEV_PIIX turned off.&lt;br /&gt;
** if you don't want to rebuild your kernel, try disabling the IDE bus grabbing by that driver with &amp;lt;tt&amp;gt;ide0=noprobe hda=noprobe hdb=noprobe&amp;lt;/tt&amp;gt; in your grub/lilo config (adjust the drive letters as appropriate, but note that this did not work for me on 2.6.22.15: the drive didn't show up on the &amp;lt;tt&amp;gt;piix&amp;lt;/tt&amp;gt; bus, but it didn't show up on the &amp;lt;tt&amp;gt;ata_piix&amp;lt;/tt&amp;gt; bus either).&lt;br /&gt;
* if &amp;lt;tt&amp;gt;piix&amp;lt;/tt&amp;gt; is built in as a module&lt;br /&gt;
** you can move out the module in {{path|/lib/modules/ver/kernel/drivers/ide/pci/piix.ko}} and reboot.&lt;br /&gt;
** or build a new kernel, again with CONFIG_BLK_DEV_PIIX turned off.&lt;br /&gt;
** or add &amp;lt;tt&amp;gt;options ide_core options=&amp;quot;ide0=noprobe hda=noprobe hdb=noprobe&amp;quot;&amp;lt;/tt&amp;gt; to your modprobe.conf is supposed to work too (but didn't work on 2.6.22.15, see comment above)&lt;br /&gt;
&lt;br /&gt;
Then, continue this document to see how to do hotswap with &amp;lt;tt&amp;gt;ata_piix&amp;lt;/tt&amp;gt; (if you are lucky enough to have a newer SATA ThinkPad where the &amp;lt;tt&amp;gt;ata_piix&amp;lt;/tt&amp;gt; driver only runs the Ultrabay, and you have a separate &amp;lt;tt&amp;gt;bus&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;ahci&amp;lt;/tt&amp;gt; driver for your main drive, it is recommended to have &amp;lt;tt&amp;gt;ata_piix&amp;lt;/tt&amp;gt; as a module (&amp;lt;tt&amp;gt;CONFIG_ATA_PIIX=m&amp;lt;/tt&amp;gt;) so that you can unload/reload it if your bus gets in a bad state after a failed hotswap)&lt;br /&gt;
&lt;br /&gt;
==When using the &amp;lt;tt&amp;gt;ata_piix&amp;lt;/tt&amp;gt; driver==&lt;br /&gt;
The following applies when using the &amp;lt;tt&amp;gt;ata_piix&amp;lt;/tt&amp;gt; driver, which is necessary for many recent ThinkPad models that use an [[Intel ICH6-M]] controller. See also [[Problems with SATA and Linux]]. &lt;br /&gt;
&lt;br /&gt;
Mainline kernels before 2.6.18 cannot reliably recognize newly (re-)inserted Ultrabay drives without a reboot. There are experimental hotplug patches against pre-2.6.18 mainline kernels [http://home-tj.org/wiki/index.php/Libata-tj-stable here].&lt;br /&gt;
&lt;br /&gt;
* Available hotplug patches&lt;br /&gt;
**[http://home-tj.org/files/libata-tj-stable/libata-tj-2.6.16.16-20060512.tar.bz2 Patch tarball against 2.6.16.16] ([http://lwn.net/Articles/183407/ Announce])&lt;br /&gt;
**[http://home-tj.org/files/libata-tj-stable/libata-tj-2.6.17-20060625-1.tar.bz2 Patch tarball against 2.6.17/2.6.17.1] ([http://article.gmane.org/gmane.linux.ide/11598 Announce])&lt;br /&gt;
**[http://home-tj.org/files/libata-tj-stable/libata-tj-2.6.17.4-20060710.tar.bz2 Patch tarball against 2.6.17.4]&lt;br /&gt;
**[http://whoopie.gmxhome.de/linux/patches/2.6.17.14-tj/00-libata-tj-2.6.17.4-20060710.patch Patch against 2.6.17.14]&lt;br /&gt;
&lt;br /&gt;
* Confirmed to work on the following laptops, with bus the following ID &lt;br /&gt;
**ThinkPad {{T23}}&lt;br /&gt;
**ThinkPad {{T30}}&lt;br /&gt;
**ThinkPad {{T43}}, {{T43p}}&lt;br /&gt;
**ThinkPad {{R52}}&lt;br /&gt;
**ThinkPad {{T60}} ID=4&lt;br /&gt;
**ThinkPad {{T61}} ID=0&lt;br /&gt;
**ThinkPad {{Z61p}} ID=4 (0-3:ahci, 5-6: ata_piix)&lt;br /&gt;
ID will typically be 1 if you only have an IDE bus (0 is boot drive, 1 is Ultrabay), and it'll be 4 if you have a SATA bus your system boots from (ID 0-3) and an IDE bus for your Ultrabay (ID 4-5).&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Note that even on a given laptop model the ID can vary depending on whether your kernel has drivers that configure your boot drive is using the old style IDE driver (which doesn't add IDs before your Ultrabay), or whether your boot drive is using the new style driver (which  adds IDs before your Ultrabay)&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hotplug just works with kernels newer than 2.6.18 ( or older kernels that were patched to support &amp;lt;tt&amp;gt;ata_piix&amp;lt;/tt&amp;gt; hotplug (don't try it otherwise!))&amp;lt;BR&amp;gt;&lt;br /&gt;
First, it is recommended you find the right SCSI ID for your drive to hotswap and unregister it before removing it (this works with all recent mainline kernels):&lt;br /&gt;
 {{cmdroot|echo 1 &amp;gt; /sys/class/scsi_device/$ID:0:0:0/device/delete}} &lt;br /&gt;
 {{cmdroot|echo eject &amp;gt;  /proc/acpi/ibm/bay}}&lt;br /&gt;
The drive can now be ejected (without this, your IDE bus may complain if you just yank a drive, but you can usually recover by unloading/reloading the &amp;lt;tt&amp;gt;ata_piix&amp;lt;/tt&amp;gt; module on a SATA laptop if your main drive is not on the &amp;lt;tt&amp;gt;ata_piix&amp;lt;/tt&amp;gt; bus)&lt;br /&gt;
&lt;br /&gt;
You can then issue the following after inserting an Ultrabay drive to rescan the port:&lt;br /&gt;
 {{cmdroot|echo 0 0 0 &amp;gt;  /sys/class/scsi_host/host$ID/scan}}&lt;br /&gt;
The inserted drive should now be recognized by the kernel, and appropriate {{path|/dev/*}} entries created automatically (e.g., by &amp;lt;tt&amp;gt;udev&amp;lt;/tt&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Ted T'so has also written this hotswap patch, which may or may not be needed for you, see [http://www.mail-archive.com/linux-acpi@vger.kernel.org/msg04716.html hotswap patch] and report back&lt;br /&gt;
&lt;br /&gt;
===Scripts for hotswapping===&lt;br /&gt;
&lt;br /&gt;
The following scripts and [[acpid]] daemon configuration files do the following:&lt;br /&gt;
* Automatically unmounts the relevant filesystems and power off the Ultrabay when the Ultrabay eject lever is released. Screams if some filesystem can't be unmounted.&lt;br /&gt;
* Rescans the Ultrabay port when then Ultrabay eject lever is pushed back in.&lt;br /&gt;
&lt;br /&gt;
They assumes you're using the &amp;lt;tt&amp;gt;ata_piix&amp;lt;/tt&amp;gt; driver with an appropriate kernel (see above).&lt;br /&gt;
&lt;br /&gt;
Create {{path|/usr/local/sbin/ultrabay_insert}} with permissions 755:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
echo 12 &amp;gt; /proc/acpi/ibm/beep&lt;br /&gt;
sync&lt;br /&gt;
echo 0 0 0 &amp;gt; /sys/class/scsi_host/host1/scan&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Create {{path|/usr/local/sbin/ultrabay_eject}} with permissions 755:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
ULTRABAY_SYSDIR='/sys/class/scsi_device/1:0:0:0/device'&lt;br /&gt;
shopt -s nullglob&lt;br /&gt;
&lt;br /&gt;
# Umount the filesystem(s) backed by the given major:minor device(s)&lt;br /&gt;
unmount_rdev() { perl - &amp;quot;$@&amp;quot; &amp;lt;&amp;lt;'EOPERL'  # let's do it in Perl&lt;br /&gt;
	for $major_minor (@ARGV) {&lt;br /&gt;
		$major_minor =~ m/^(\d+):(\d+)$/ or die;&lt;br /&gt;
		push(@tgt_rdevs, ($1&amp;lt;&amp;lt;8)|$2);&lt;br /&gt;
	}&lt;br /&gt;
        # Sort by reverse length of mount point, to unmount sub-directories first&lt;br /&gt;
        open MOUNTS,&amp;quot;&amp;lt;/proc/mounts&amp;quot; or die &amp;quot;$!&amp;quot;;&lt;br /&gt;
        @mounts=sort { length($b-&amp;gt;[1]) &amp;lt;=&amp;gt; length($a-&amp;gt;[1]) } map { [ split ] } &amp;lt;MOUNTS&amp;gt;;&lt;br /&gt;
        close MOUNTS;&lt;br /&gt;
        foreach $m (@mounts) {&lt;br /&gt;
                ($dev,$dir)=@$m;&lt;br /&gt;
		next unless -b $dev;  $rdev=(stat($dev))[6];&lt;br /&gt;
		next unless grep($_==$rdev, @tgt_rdevs);&lt;br /&gt;
		system(&amp;quot;umount&amp;quot;,&amp;quot;-v&amp;quot;,&amp;quot;$dir&amp;quot;)==0  or  $bad=1;&lt;br /&gt;
	}&lt;br /&gt;
	exit 1 if $bad;&lt;br /&gt;
EOPERL&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Get the UltraBay's /dev/foo block device node&lt;br /&gt;
ultrabay_dev_node() {&lt;br /&gt;
	UDEV_PATH=&amp;quot;`readlink -e &amp;quot;$ULTRABAY_SYSDIR/block:&amp;quot;*`&amp;quot; || return 1&lt;br /&gt;
	UDEV_NAME=&amp;quot;`udevinfo -q name -p $UDEV_PATH`&amp;quot; || return 1&lt;br /&gt;
	echo /dev/$UDEV_NAME&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
if [ -d $ULTRABAY_SYSDIR ]; then&lt;br /&gt;
	sync&lt;br /&gt;
	# Unmount filesystems backed by this device&lt;br /&gt;
	unmount_rdev `cat $ULTRABAY_SYSDIR/block\:*/dev     \&lt;br /&gt;
	                  $ULTRABAY_SYSDIR/block\:*/*/dev`  \&lt;br /&gt;
	|| {&lt;br /&gt;
		echo 10 &amp;gt; /proc/acpi/ibm/beep;  # error tone&lt;br /&gt;
		exit 1;&lt;br /&gt;
	}&lt;br /&gt;
        sync&lt;br /&gt;
        # Nicely power off the device&lt;br /&gt;
	DEVNODE=`ultrabay_dev_node` &amp;amp;&amp;amp; hdparm -Y $DEVNODE&lt;br /&gt;
        # Let HAL+KDE notice the unmount and let the disk spin down&lt;br /&gt;
	sleep 0.5&lt;br /&gt;
	# Unregister this SCSI device:&lt;br /&gt;
	sync&lt;br /&gt;
	echo 1 &amp;gt; $ULTRABAY_SYSDIR/delete&lt;br /&gt;
fi&lt;br /&gt;
sync&lt;br /&gt;
# We really need a 3 sec pause here otherwise the system will freeze..&lt;br /&gt;
sleep 3&lt;br /&gt;
# Turn off power to the UltraBay:&lt;br /&gt;
if [ -d /sys/devices/platform/bay.0 ]; then&lt;br /&gt;
	echo 1 &amp;gt; /sys/devices/platform/bay.0/eject&lt;br /&gt;
elif [ -e /proc/acpi/ibm/bay ]; then&lt;br /&gt;
	echo eject &amp;gt; /proc/acpi/ibm/bay&lt;br /&gt;
fi&lt;br /&gt;
# Tell the user we're OK&lt;br /&gt;
echo 12 &amp;gt; /proc/acpi/ibm/beep&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Use the modified version below if the above doesn't work for you (for kernels 2.6.25+ due to &amp;quot;ULTRABAY_SYSDIR/block\:*/dev&amp;quot; path change). It was tested on a Thinkpad X41 with Fedora 9 and kernel 2.6.25.11:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
ULTRABAY_SYSDIR='/sys/class/scsi_device/1:0:0:0/device'&lt;br /&gt;
shopt -s nullglob&lt;br /&gt;
&lt;br /&gt;
# Umount the filesystem(s) backed by the given major:minor device(s)&lt;br /&gt;
unmount_rdev() { perl - &amp;quot;$@&amp;quot; &amp;lt;&amp;lt;'EOPERL'  # let's do it in Perl&lt;br /&gt;
	for $major_minor (@ARGV) {&lt;br /&gt;
		$major_minor =~ m/^(\d+):(\d+)$/ or die;&lt;br /&gt;
		push(@tgt_rdevs, ($1&amp;lt;&amp;lt;8)|$2);&lt;br /&gt;
	}&lt;br /&gt;
        # Sort by reverse length of mount point, to unmount sub-directories first&lt;br /&gt;
        open MOUNTS,&amp;quot;&amp;lt;/proc/mounts&amp;quot; or die &amp;quot;$!&amp;quot;;&lt;br /&gt;
        @mounts=sort { length($b-&amp;gt;[1]) &amp;lt;=&amp;gt; length($a-&amp;gt;[1]) } map { [ split ] } &amp;lt;MOUNTS&amp;gt;;&lt;br /&gt;
        close MOUNTS;&lt;br /&gt;
        foreach $m (@mounts) {&lt;br /&gt;
                ($dev,$dir)=@$m;&lt;br /&gt;
		next unless -b $dev;  $rdev=(stat($dev))[6];&lt;br /&gt;
		next unless grep($_==$rdev, @tgt_rdevs);&lt;br /&gt;
		system(&amp;quot;umount&amp;quot;,&amp;quot;-v&amp;quot;,&amp;quot;$dir&amp;quot;)==0  or  $bad=1;&lt;br /&gt;
	}&lt;br /&gt;
	exit 1 if $bad;&lt;br /&gt;
EOPERL&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Get the UltraBay's /dev/foo block device node&lt;br /&gt;
ultrabay_dev_node() {&lt;br /&gt;
	UDEV_PATH=&amp;quot;`readlink -e &amp;quot;$ULTRABAY_SYSDIR/block/&amp;quot;*`&amp;quot; || return 1&lt;br /&gt;
	UDEV_NAME=&amp;quot;`udevinfo -q name -p $UDEV_PATH`&amp;quot; || return 1&lt;br /&gt;
	echo /dev/$UDEV_NAME&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
if [ -d $ULTRABAY_SYSDIR ]; then&lt;br /&gt;
	sync&lt;br /&gt;
	# Unmount filesystems backed by this device&lt;br /&gt;
	unmount_rdev `cat $ULTRABAY_SYSDIR/block/*/dev     \&lt;br /&gt;
	                  $ULTRABAY_SYSDIR/block/*/*/dev`  \&lt;br /&gt;
	|| {&lt;br /&gt;
		echo 10 &amp;gt; /proc/acpi/ibm/beep;  # error tone&lt;br /&gt;
		exit 1;&lt;br /&gt;
	}&lt;br /&gt;
        sync&lt;br /&gt;
        # Nicely power off the device&lt;br /&gt;
	DEVNODE=`ultrabay_dev_node` &amp;amp;&amp;amp; hdparm -Y $DEVNODE&lt;br /&gt;
        # Let HAL+KDE notice the unmount and let the disk spin down&lt;br /&gt;
	sleep 0.5&lt;br /&gt;
	# Unregister this SCSI device:&lt;br /&gt;
	sync&lt;br /&gt;
	echo 1 &amp;gt; $ULTRABAY_SYSDIR/delete&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# We really need a 3 sec pause here otherwise the system will freeze..&lt;br /&gt;
sleep 3&lt;br /&gt;
&lt;br /&gt;
# Turn off power to the UltraBay:&lt;br /&gt;
dock=$( /bin/grep ata_bay /sys/devices/platform/dock.?/type )&lt;br /&gt;
dock=${dock%%/type:ata_bay} # needed for 2.6.27 and later&lt;br /&gt;
if [ -n &amp;quot;$dock&amp;quot; -a -d &amp;quot;$dock&amp;quot; ]; then&lt;br /&gt;
        echo 1 &amp;gt; $dock/undock&lt;br /&gt;
elif [ -d /sys/devices/platform/bay.0 ]; then&lt;br /&gt;
	echo 1 &amp;gt; /sys/devices/platform/bay.0/eject&lt;br /&gt;
elif [ -e /proc/acpi/ibm/bay ]; then&lt;br /&gt;
	echo eject &amp;gt; /proc/acpi/ibm/bay&lt;br /&gt;
fi&lt;br /&gt;
# Tell the user we're OK&lt;br /&gt;
echo 12 &amp;gt; /proc/acpi/ibm/beep&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Create {{path|/etc/acpi/events/ultrabay-insert}}:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
event=ibm/bay MSTR 00000001 00000000&lt;br /&gt;
action=/usr/local/sbin/ultrabay_insert&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Create {{path|/etc/acpi/events/ultrabay-eject}}:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
event=ibm/bay MSTR 00000003 00000000&lt;br /&gt;
action=/usr/local/sbin/ultrabay_eject&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Restart &amp;lt;tt&amp;gt;acpid&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
If the &amp;lt;tt&amp;gt;ata_piix&amp;lt;/tt&amp;gt; driver is built in the kernel, it will catch bay events and you will see the&lt;br /&gt;
following message in your system log:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
thinkpad_acpi: another device driver is already handling bay events&lt;br /&gt;
thinkpad_acpi: disabling subdriver bay&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
You should load &amp;lt;tt&amp;gt;thinkpad_acpi&amp;lt;/tt&amp;gt; before &amp;lt;tt&amp;gt;ata_piix&amp;lt;/tt&amp;gt; if you want it to handle bay events.&lt;br /&gt;
&lt;br /&gt;
===Using the generic bay driver and udev===&lt;br /&gt;
&lt;br /&gt;
Starting from kernel 2.6.23-rc3, it's possible to use the generic &amp;lt;tt&amp;gt;bay&amp;lt;/tt&amp;gt; driver in combination with udev to hotswap. Please check if CONFIG_ACPI_BAY is enabled (module or built-in) in your kernel configuration.&lt;br /&gt;
&lt;br /&gt;
Create {{path|/etc/udev/rules.d/ibm-ultrabay.rules}}:&lt;br /&gt;
 ENV{BAY_EVENT}==&amp;quot;3&amp;quot;, KERNEL==&amp;quot;bay.0&amp;quot;, ACTION==&amp;quot;change&amp;quot;, SUBSYSTEM==&amp;quot;platform&amp;quot;, RUN+=&amp;quot;/usr/local/sbin/ultrabay_eject&amp;quot;&lt;br /&gt;
 ENV{BAY_EVENT}==&amp;quot;1&amp;quot;, KERNEL==&amp;quot;bay.0&amp;quot;, ACTION==&amp;quot;change&amp;quot;, SUBSYSTEM==&amp;quot;platform&amp;quot;, RUN+=&amp;quot;/usr/local/sbin/ultrabay_insert&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Starting with kernel 2.6.28, the &amp;lt;tt&amp;gt;bay&amp;lt;/tt&amp;gt; drivernel was remove from the mainline ker. The &amp;lt;tt&amp;gt;dock&amp;lt;/tt&amp;gt; driver replaced it completely. Make sure CONFIG_ACPI_DOCK is enabled in the kernel, and use the following udev rules:&lt;br /&gt;
&lt;br /&gt;
 ENV{EVENT}==&amp;quot;undock&amp;quot;, KERNEL==&amp;quot;dock.2&amp;quot;, ACTION==&amp;quot;change&amp;quot;, SUBSYSTEM==&amp;quot;platform&amp;quot;, RUN+=&amp;quot;/usr/local/sbin/ultrabay_eject&amp;quot;&lt;br /&gt;
 ENV{EVENT}==&amp;quot;dock&amp;quot;, KERNEL==&amp;quot;dock.2&amp;quot;, ACTION==&amp;quot;change&amp;quot;, SUBSYSTEM==&amp;quot;platform&amp;quot;, RUN+=&amp;quot;/usr/local/sbin/ultrabay_insert&amp;quot;&lt;br /&gt;
&lt;br /&gt;
However, the ultra_eject script needs to be changed, otherwise udev goes into an infinite event loop. It will send undock events every few seconds forever. That means as soon as the ultra is plugged in again, it will be immediately ejected. For kernels 2.6.28 and higher, the bay cannot be powered off using this method, so change the end of the script to read:&lt;br /&gt;
 # Turn off power to the UltraBay:&lt;br /&gt;
 if [ -d /sys/devices/platform/bay.0 ]; then&lt;br /&gt;
 	echo 1 &amp;gt; /sys/devices/platform/bay.0/eject&lt;br /&gt;
 elif [ -e /proc/acpi/ibm/bay ]; then&lt;br /&gt;
 	echo eject &amp;gt; /proc/acpi/ibm/bay&lt;br /&gt;
 fi&lt;br /&gt;
 # Tell the user we're OK&lt;br /&gt;
 echo 12 &amp;gt; /proc/acpi/ibm/beep&lt;br /&gt;
&lt;br /&gt;
This was tested on a T61p running Gentoo with tuxonice 2.6.28-r8 without any issues.&lt;br /&gt;
&lt;br /&gt;
===Using libata-acpi and udev===&lt;br /&gt;
&lt;br /&gt;
Starting from kernel 2.6.26-rc5, it's possible to use &amp;lt;tt&amp;gt;libata-acpi&amp;lt;/tt&amp;gt; in combination with udev to hotswap. Please check if CONFIG_ATA_ACPI is enabled in your kernel configuration.&lt;br /&gt;
&lt;br /&gt;
For 2.6.25, you need two patches which can be easily backported ([http://article.gmane.org/gmane.linux.acpi.devel/31159],[http://article.gmane.org/gmane.linux.acpi.devel/31369]).&lt;br /&gt;
&lt;br /&gt;
Create {{path|/etc/udev/rules.d/ibm-ultrabay.rules}}:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ENV{BAY_EVENT}==&amp;quot;3&amp;quot;, ACTION==&amp;quot;change&amp;quot;, SUBSYSTEM==&amp;quot;scsi&amp;quot;, RUN+=&amp;quot;/usr/local/sbin/ultrabay_eject&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Model-specific notes===&lt;br /&gt;
See the table above for a list of ata_piix supported laptops and the bus ID to use.&lt;br /&gt;
&lt;br /&gt;
===HAL support===&lt;br /&gt;
&lt;br /&gt;
{{NOTE| Starting from HAL 0.5.11, you need to replace &amp;quot;storage.physical_device&amp;quot; with &amp;quot;info.parent&amp;quot;.}}&lt;br /&gt;
&lt;br /&gt;
Many programs, KDE included, rely on [[HAL]] to get notifications and information about device hotplugging. You need to tell HAL that devices connected the UltraBay port are hotpluggable. To do so, create the file {{path|/etc/hal/fdi/information/10-ultrabay.fdi}} as follows:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt; &amp;lt;!-- -*- SGML -*- --&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;deviceinfo version=&amp;quot;0.2&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;device&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- UltraBay Devices --&amp;gt;&lt;br /&gt;
    &amp;lt;match key=&amp;quot;storage.bus&amp;quot; string=&amp;quot;scsi&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;match key=&amp;quot;storage.physical_device&amp;quot; string=&amp;quot;/org/freedesktop/Hal/devices/pci_8086_2653_scsi_host_0_scsi_device_lun0&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;merge key=&amp;quot;storage.hotpluggable&amp;quot; type=&amp;quot;bool&amp;quot;&amp;gt;true&amp;lt;/merge&amp;gt;&lt;br /&gt;
      &amp;lt;/match&amp;gt;&lt;br /&gt;
    &amp;lt;/match&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/device&amp;gt;&lt;br /&gt;
&amp;lt;/deviceinfo&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The string &amp;quot;8086_2653&amp;quot; may need to be changed to match your ThinkPad model; see below.&lt;br /&gt;
&lt;br /&gt;
====Details====&lt;br /&gt;
&lt;br /&gt;
By default, HAL doesn't know that UltraBay devices are hotpluggable:&lt;br /&gt;
&lt;br /&gt;
 # PHYSDEV=/org/freedesktop/Hal/devices/pci_8086_2653_scsi_host_0_scsi_device_lun0&lt;br /&gt;
 # UDI=`hal-find-by-property --key storage.physical_device --string $PHYSDEV` || echo Failed&lt;br /&gt;
 # hal-get-property --udi $UDI --key block.device&lt;br /&gt;
 /dev/sdb&lt;br /&gt;
 # hal-get-property --udi $UDI --key storage.hotpluggable&lt;br /&gt;
 false&lt;br /&gt;
&lt;br /&gt;
After creating {{path|/etc/hal/fdi/information/10-ultrabay.fdi}} as above and re-plugging the device, it will get marked correctly:&lt;br /&gt;
&lt;br /&gt;
 # PHYSDEV=/org/freedesktop/Hal/devices/pci_8086_2653_scsi_host_0_scsi_device_lun0&lt;br /&gt;
 # UDI=`hal-find-by-property --key storage.physical_device --string $PHYSDEV` || echo Failed&lt;br /&gt;
 # hal-get-property --udi $UDI --key block.device&lt;br /&gt;
 /dev/sdb&lt;br /&gt;
 # hal-get-property --udi $UDI --key storage.hotpluggable&lt;br /&gt;
 true&lt;br /&gt;
&lt;br /&gt;
The string &amp;quot;8086_2653&amp;quot; gives the PCI ID of the [[Intel 82801FBM]] southbridge. If your model has a different southbridge, or the UltraBay is attached to a different port, then you can find the appropriate &amp;lt;tt&amp;gt;storage.physical_device&amp;lt;/tt&amp;gt; value by finding out the block device of the currently running UltraBay device (&amp;lt;tt&amp;gt;/dev/sdb&amp;lt;/tt&amp;gt; in the following example) and then running:&lt;br /&gt;
&lt;br /&gt;
 # DEVICE=/dev/sdb&lt;br /&gt;
 # UDI=`hal-find-by-property --key block.device --string $DEVICE` || echo Failed&lt;br /&gt;
 # hal-get-property --udi $UDI --key storage.physical_device&lt;br /&gt;
 /org/freedesktop/Hal/devices/pci_8086_2653_scsi_host_0_scsi_device_lun0&lt;br /&gt;
&lt;br /&gt;
If you have a different &amp;lt;tt&amp;gt;storage.physical_device&amp;lt;/tt&amp;gt; value, please report your findings.&lt;br /&gt;
&lt;br /&gt;
{| border=1&lt;br /&gt;
|+ Known South Bridge PCI IDs&lt;br /&gt;
! ID !! ThinkPad model !! South Bridge chip&lt;br /&gt;
|-&lt;br /&gt;
| 8086_248a || 2366-83U (T30), 2647-MG3 (T23)|| Intel 82801CAM IDE U100 (rev 2)&lt;br /&gt;
|-&lt;br /&gt;
| 8086_2653 || 2525FAG (X41), ? (T43) || Intel 82801FBM (ICH6-M)&lt;br /&gt;
|-&lt;br /&gt;
| 8086_24ca || 237358U (T40), 2373KXU (T42p) || Intel 82801DBM (ICH4-M)&lt;br /&gt;
|-&lt;br /&gt;
| 8086_27c4 || X60           || Intel 82801GBM (ICH7 Family)&lt;br /&gt;
|-&lt;br /&gt;
| 8086_27df || Z61p, T60, T60p || Intel 82801GBM/GHM (ICH7 Family)&lt;br /&gt;
|-&lt;br /&gt;
| 8086_2850 || T61, T61p || Intel 82801H (ICH8 Family)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==When using the &amp;lt;tt&amp;gt;ide-disk&amp;lt;/tt&amp;gt; driver==&lt;br /&gt;
The following applies if you use the &amp;lt;tt&amp;gt;ide-disk&amp;lt;/tt&amp;gt; driver for the UltraBay device.&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Note that essentially, you shouldn't be using this driver, and use ata_piix instead unless you're running an older kernel where ata_piix won't work for you&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hotswapping is supposed to be supported as well, using either hdparm/[http://packages.debian.org/unstable/admin/hotswap Debian hotswap] or [[lt_hotswap]] to (un)register IDE devices. The latter is the recommended method with kernels from 2.6, since it will leave DMA working. However, for recent models (R52, T43, X41, Z60 and later) no method is known to work while maintaining DMA support; see [[Problems with SATA and Linux]].&lt;br /&gt;
&lt;br /&gt;
Only IDE devices (HDD's, optical drives, zip drives) require special treatment - batteries, floppies and other devices can just be pulled from the bay, provided they are not mounted or in use at the time. However, you should still power them down first using the [[ibm-acpi]] eject function.&lt;br /&gt;
&lt;br /&gt;
The [[ibm-acpi]] kernel module has an eject function ({{cmdroot|echo eject &amp;gt; /proc/acpi/ibm/bay}}). This only manages the ACPI calls to power down the device and the bay. It does not actually unregister the device from the IDE driver. {{cmdroot|cat /proc/acpi/ibm/bay}} shows &amp;quot;unoccupied&amp;quot; unless an IDE device is present, but the eject function still works and should still be used.&lt;br /&gt;
&lt;br /&gt;
To unregister the device, you can either use the [http://packages.debian.org/unstable/admin/hotswap Debian hotswap] package, or [[lt_hotswap]]. Note that lt_hotswap doesn't seem to even build on recent (at 2.6.22 or newer, although it probably broke before 2.6.22) and on newer kernels, you should not build/load the old IDE PIIX (CONFIG_BLK_DEV_PIIX) and use the natively hotswapping ata_piix (CONFIG_ATA_PIIX) as explained on the top of this page.&lt;br /&gt;
&lt;br /&gt;
[http://packages.debian.org/unstable/admin/hotswap Debian hotswap] also allows the drive to be swapped as a normal user by default, which is useful. You should use &amp;lt;tt&amp;gt;hotswap&amp;lt;/tt&amp;gt; to unregister the device and then {{cmdroot|echo eject &amp;gt; /proc/acpi/ibm/bay}}. However, if you use this method on a 2.6 kernel, you will lose DMA support for the reinserted drive. This is due to kernel issues. This method was reported to work on a ThinkPad {{T23}} (kernels 2.6.8.1, 2.6.14.2 and 2.6.15-arch) and {{T42}} (kernel 2.6.13), but fails on a ThinkPad {{T43}} (kernel 2.6.14.3).&lt;br /&gt;
&lt;br /&gt;
[[lt_hotswap]] is now the recommended method to un- and reregister the IDE device. It installs as a kernel module and has support for automatically unregistering (if loaded with the auto_eject=1 option) the device when the eject event is generated by [[ibm-acpi]]. It will leave DMA support intact. It has supported to work on a ThinkPad {{T22}} and {{T40}} and should work with many other models (but not recent models which require the &amp;lt;tt&amp;gt;ata_piix&amp;lt;/tt&amp;gt; driver for disk DMA support). With the [[lt_hotswap]] kernel module loaded, run: {{cmdroot|modprobe -r ide_cd &amp;amp;&amp;amp; modprobe -r cdrom &amp;amp;&amp;amp; echo &amp;quot;MSTR eject&amp;quot; &amp;gt; /proc/acpi/lths}}&lt;br /&gt;
&lt;br /&gt;
===HAL support===&lt;br /&gt;
&lt;br /&gt;
HAL support also can also be configured To do so, create the file {{path|/etc/hal/fdi/information/10-ultrabay.fdi}} as follows:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt; &amp;lt;!-- -*- SGML -*- --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;deviceinfo version=&amp;quot;0.2&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;device&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- UltraBay Devices --&amp;gt;&lt;br /&gt;
    &amp;lt;match key=&amp;quot;storage.bus&amp;quot; string=&amp;quot;ide&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;match key=&amp;quot;storage.physical_device&amp;quot; string=&amp;quot;/org/freedesktop/Hal/devices/pci_8086_24ca_ide_1_0&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;merge key=&amp;quot;storage.hotpluggable&amp;quot; type=&amp;quot;bool&amp;quot;&amp;gt;true&amp;lt;/merge&amp;gt;&lt;br /&gt;
      &amp;lt;/match&amp;gt;&lt;br /&gt;
    &amp;lt;/match&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/device&amp;gt;&lt;br /&gt;
&amp;lt;/deviceinfo&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
For more details see HAL section for ata driver.&lt;br /&gt;
&lt;br /&gt;
==Other comments==&lt;br /&gt;
&lt;br /&gt;
If you are hot-swapping a hard disk on a disk tray, make sure the disk does not have a password set, otherwise it will not be recognized on reinsertion.&lt;br /&gt;
&lt;br /&gt;
[[Category:Scripts]]&lt;br /&gt;
[[Category:HOWTOs]]&lt;/div&gt;</summary>
		<author><name>Phoenix84</name></author>
		
	</entry>
	<entry>
		<id>https://www.thinkwiki.org/w/index.php?title=List_of_DMI_IDs&amp;diff=40489</id>
		<title>List of DMI IDs</title>
		<link rel="alternate" type="text/html" href="https://www.thinkwiki.org/w/index.php?title=List_of_DMI_IDs&amp;diff=40489"/>
		<updated>2009-01-07T18:19:32Z</updated>

		<summary type="html">&lt;p&gt;Phoenix84: /* T series */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|style=&amp;quot;vertical-align:top;padding-right:20px;width:10px;white-space:nowrap;&amp;quot; | __TOC__&lt;br /&gt;
|style=&amp;quot;vertical-align:top&amp;quot; |&lt;br /&gt;
This page maintains a database of [http://en.wikipedia.org/wiki/Desktop_Management_Interface DMI] information which can be used to identify ThinkPad models. It is intended as an aid for driver development.&lt;br /&gt;
{{HELP|We need more information about older models, especially those released before 2004. Please [[#Adding_entries|add your model]] to the database.}}&lt;br /&gt;
{{NOTE|If your ThinkPad is not using the [[BIOS Upgrade Downloads|latest BIOS]], and you would be willing to [[BIOS Upgrade|upgrade your BIOS]], please add your ThinkPad to this table twice: '''before''' and '''after''' the BIOS upgrade.  This information helps us a great deal, so your contribution would be very appreciated.}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==DMI ID database==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size: 80%&amp;quot;&amp;gt;&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;2&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Model&lt;br /&gt;
! &amp;lt;tt&amp;gt;system-&amp;lt;br /&amp;gt;manufa&amp;lt;br /&amp;gt;cturer&amp;lt;/tt&amp;gt;&lt;br /&gt;
! &amp;lt;tt&amp;gt;system-&amp;lt;br /&amp;gt;product-&amp;lt;br /&amp;gt;name&amp;lt;/tt&amp;gt;&lt;br /&gt;
! &amp;lt;tt&amp;gt;system-&amp;lt;br /&amp;gt;version&amp;lt;/tt&amp;gt;&lt;br /&gt;
! &amp;lt;tt&amp;gt;baseboard-&amp;lt;br /&amp;gt;manufa&amp;lt;br /&amp;gt;cturer&amp;lt;/tt&amp;gt;&lt;br /&gt;
! &amp;lt;tt&amp;gt;baseboard-&amp;lt;br /&amp;gt;product-&amp;lt;br /&amp;gt;name&amp;lt;/tt&amp;gt;&lt;br /&gt;
! &amp;lt;tt&amp;gt;baseboard-&amp;lt;br /&amp;gt;version&amp;lt;/tt&amp;gt;&lt;br /&gt;
! &amp;lt;tt&amp;gt;chassis-&amp;lt;br /&amp;gt;manufa&amp;lt;br /&amp;gt;cturer&amp;lt;/tt&amp;gt;&lt;br /&gt;
! &amp;lt;tt&amp;gt;chassis-&amp;lt;br /&amp;gt;version&amp;lt;/tt&amp;gt;&lt;br /&gt;
! &amp;lt;tt&amp;gt;bios-&amp;lt;br /&amp;gt;vendor&amp;lt;/tt&amp;gt;&lt;br /&gt;
! &amp;lt;tt&amp;gt;bios-&amp;lt;br /&amp;gt;version&amp;lt;/tt&amp;gt;&lt;br /&gt;
! &amp;lt;tt&amp;gt;bios-&amp;lt;br /&amp;gt;release-&amp;lt;br /&amp;gt;date&amp;lt;/tt&amp;gt;&lt;br /&gt;
! Embedded controller&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
! colspan=14 style=&amp;quot;text-align:center;background:#efefef;&amp;quot; |&lt;br /&gt;
====Numbered series====&lt;br /&gt;
|-&lt;br /&gt;
| {{240X}} 2609-61U&lt;br /&gt;
|| IBM || 260961U || Not Available || IBM || 2609BS1 || Not Available || IBM || Not Available || IBM || 1.03.09  || 12/21/1999 &lt;br /&gt;
||&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| {{570E}} 2644-5AU&lt;br /&gt;
|| IBM || 26445AU || Not Available || IBM || 26445AU || Not Available || IBM || Not Available || IBM || IUET25WW || 12/11/1999&lt;br /&gt;
||&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| {{600E}} 2645-5AU&lt;br /&gt;
|| IBM || 26455AU || Not Available || IBM || 26455AU || Not Available || IBM || Not Available || IBM || INET36WW || 11/20/1999&lt;br /&gt;
||&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| {{600X}} 2645-5FU&lt;br /&gt;
|| IBM || 26455FU || Not Available || IBM || 26455FU || Not Available || IBM || Not Available || IBM || INET55WW || 11/30/1999&lt;br /&gt;
||&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
! colspan=14 style=&amp;quot;text-align:center;background:#efefef;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
====A series====&lt;br /&gt;
|-&lt;br /&gt;
| {{A21m}} 2628-FSG&lt;br /&gt;
|| IBM || 2628FSG || Not Available || IBM || 2628FSG || Not Available || IBM || Not Available || IBM || KXET24WW (1.02b) || 12/19/2000 &lt;br /&gt;
|| &lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| {{A21m}} 2628-FSG&lt;br /&gt;
|| IBM || 2628FSG || Not Available || IBM || 2628FSG || Not Available || IBM || Not Available || IBM || KXET36WW (1.09 ) || 05/08/2003 &lt;br /&gt;
||&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| {{A21m}} 2628-GTU&lt;br /&gt;
|| IBM || 2628GTU || Not Available || IBM || 2628GTU || Not Available || IBM || Not Available || IBM || KXET29WW (1.03d) || 03/21/2001 &lt;br /&gt;
||&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| {{A22p}} 2629-USG&lt;br /&gt;
|| IBM || 2629USG || Not Available || IBM || 2629USG || Not Available || IBM || Not Available || IBM || KYET36WW (1.09a) || 10/17/2002 &lt;br /&gt;
||&lt;br /&gt;
|| {{WARN|Outdated BIOS}}&lt;br /&gt;
|-&lt;br /&gt;
| {{A22p}} 2629-A2G&lt;br /&gt;
|| IBM || 2629A2G || Not Available || IBM || 2629A2G || Not Available || IBM || Not Available || IBM || KYET38WW (1.11 ) || 05/20/2004 &lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| {{A31}} 2652-PBU&lt;br /&gt;
|| IBM || 2652PBU || Not Available || IBM || 2652PBU || Not Available || IBM || Not Available || IBM || 1NET15WW (1.09 ) || 04/06/2005&lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;Handle 0x0026, DMI type 11, 5 byte   String 1: IBM ThinkPad Embedded Controller -[1NHT04WW-1.01    ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| {{A31p}} 2653-RNG&lt;br /&gt;
|| IBM || 2653RNG || Not Available || IBM || 2653RNG || Not Available || IBM || Not Available || IBM || 1NET16WW (1.10 ) || 10/19/2006 &lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;Handle 0x0026, DMI type 11, 5 byte	String 1: IBM ThinkPad Embedded Controller -[1NHT08WW-1.05    ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| {{A31p}} 2653-H6U&lt;br /&gt;
|| IBM || 2653H6U || Not Available || IBM || 2653H6U || Not Available || IBM || Not Available || IBM || 1GET31WW (1.03 ) || 07/23/2002&lt;br /&gt;
||&lt;br /&gt;
|| {{WARN|Missing EC string, extremely outdated BIOS}}{{HELP|We need a report to know if the latest BIOS fixes the missing EC string}}&lt;br /&gt;
|-&lt;br /&gt;
! colspan=14 style=&amp;quot;text-align:center;background:#efefef;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
====G series====&lt;br /&gt;
|-&lt;br /&gt;
| {{G41}} 2881-75M&lt;br /&gt;
|| IBM || 288175M || ThinkPad G41 || IBM || 288175M || Not Available || IBM || Not Available || IBM || 1XET47WW (1.06 ) || 01/14/2005&lt;br /&gt;
||&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
! colspan=14 style=&amp;quot;text-align:center;background:#efefef;&amp;quot; |&lt;br /&gt;
====R series====&lt;br /&gt;
|-&lt;br /&gt;
| {{R40}} 2681-5UU&lt;br /&gt;
|| IBM || 26815UU || Not Available || IBM || 26815UU || Not Available || IBM || Not Available || IBM || 1OET57WW (1.23 ) || 03/23/2005 &lt;br /&gt;
||&lt;br /&gt;
|| {{WARN|Outdated BIOS}}&lt;br /&gt;
|-&lt;br /&gt;
| {{R40}} 2681-HSG&lt;br /&gt;
|| IBM || 2681HSG || Not Available || IBM || 2681HSG || Not Available || IBM || Not Available || IBM || 1OET61WW (1.27 ) || 06/29/2006&lt;br /&gt;
||&lt;br /&gt;
|| {{WARN|Outdated BIOS}}&lt;br /&gt;
|-&lt;br /&gt;
| {{R40}} 2722-B3G&lt;br /&gt;
|| IBM || 2722B3G || Not Available || IBM || 2722B3G || Not Available || IBM || Not Available || IBM || 1PET62WW (1.30 ) || 09/29/2005&lt;br /&gt;
||&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| {{R40}} 2897-B4U&lt;br /&gt;
|| IBM || 2897B4U || Not Available || IBM || 2897B4U || Not Available || IBM || Not Available || IBM || 1PET52WW (1.20 ) || 03/03/2004&lt;br /&gt;
||&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| {{R40e}} 2684-L8G&lt;br /&gt;
|| IBM || 2897B4U || Not Available || IBM || 2897B4U || Not Available || IBM || Not Available || IBM || 1SET62WW (1.30 ) || 07/09/2004&lt;br /&gt;
||&lt;br /&gt;
|| {{WARN|Outdated BIOS}}&lt;br /&gt;
|-&lt;br /&gt;
| {{R50}} 1829-7QG&lt;br /&gt;
|| IBM || 0123456 || ThinkPad R50  || IBM || 0123456 || Not Available || IBM || Not Available || IBM || 1RETDPWW (3.21 ) || 06/02/2006&lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;Handle 0x0029, DMI type 11, 5 byte   String 1: IBM ThinkPad Embedded Controller -[1RHT71WW-3.04    ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
|{{R50e}} 1834-JAG&lt;br /&gt;
|| IBM || 1834JAG || ThinkPad R50e || IBM || 1834JAG || Not Available || IBM || Not Available || IBM || 1WET82WW (2.02 ) || 02/21/2005&lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;Handle 0x0022, DMI type 11, 5 byte   String 1: IBM ThinkPad Embedded Controller -[1VHT28WW-1.04    ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
|{{R50p}} 1832-2AG&lt;br /&gt;
|| IBM || 18322AG || ThinkPad R50p || IBM || 18322AG || Not Available || IBM || Not Available || IBM || 1RETC2WW (3.03 ) || 04/07/2004 &lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;Handle 0x0029, DMI type 11, 5 bytes  String 1: IBM ThinkPad Embedded Controller -[1RHT66WW-3.00a   ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| {{R51}} 1829-DRG&lt;br /&gt;
|| IBM || 1829DRG || ThinkPad R51 || IBM || 1829DRG || Not Available || IBM || Not Available || IBM || 1RETC2WW (3.03 ) || 04/07/2004&lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;Handle 0x0029, DMI type 11, 5 byte   String 1: IBM ThinkPad Embedded Controller -[1RHT66WW-3.00a   ]-&amp;lt;/nowiki&amp;gt; &lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| {{R51}} 1829-9MG&lt;br /&gt;
|| IBM || 18299MG || ThinkPad R51 || IBM || 18299MG || Not Available || IBM || Not Available || IBM || 1RETDOWW (3.20 ) || 02/27/2006&lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;     String 1: IBM ThinkPad Embedded Controller -[1RHT71WW-3.04    ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| {{R51}} 1829-L7G&lt;br /&gt;
|| IBM || 1829L7G || ThinkPad R51 || IBM || 1829L7G || Not Available || IBM || Not Available || IBM || 1RETDNWW (3.19 ) || 10/13/2005&lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;     String 1: IBM ThinkPad Embedded Controller -[1RHT70WW-3.03    ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|- &lt;br /&gt;
| {{R51}} [[1830-DG4]]&lt;br /&gt;
|| IBM || 1830DG4 || ThinkPad R51 || IBM || 1830DG4 || Not Available || IBM || Not Available || IBM || 1RETDPWW (3.21 ) || 06/02/2006 &lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;Handle 0x0029, DMI type 11, 5 byte	String 1: IBM ThinkPad Embedded Controller -[1RHT71WW-3.04    ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| {{R51}} [[1830-DG4]]&lt;br /&gt;
|| IBM || 1830DG4 || ThinkPad R51 || IBM || 1830DG4 || Not Available || IBM || Not Available || IBM || 1RETDRWW (3.23 ) || 06/18/2007&lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;Handle 0x0029, DMI type 11, 5 byte   String 1: IBM ThinkPad Embedded Controller -[1RHT71WW-3.04    ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| {{R51}} 1836-GEU&lt;br /&gt;
|| IBM || 1836GEU || ThinkPad R51 || IBM || 1836GEU || Not Available || IBM || Not Available || IBM || 1RETDLWW  (3.17 ) || 07/27/2005&lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;Handle 0x0029, DMI type 11, 5 bytes. String 1: IBM ThinkPad Embedded Controller -[1RHT71WW-3.04    ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| {{R51}} 2883-ELU&lt;br /&gt;
|| IBM || 2883ELU || ThinkPad R51 || IBM || 2883ELU || Not Available || IBM || Not Available || IBM || 1VET69WW (1.27 ) || 03/03/2006&lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;     String 1: IBM ThinkPad Embedded Controller -[1VHT28WW-1.04    ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| {{R52}} 1846-AQG&lt;br /&gt;
|| IBM || 1846AQG || ThinkPad H || IBM || 1846AQG || Not Available || IBM || Not Available || IBM || 76ET58WW (1.18 ) || 07/19/2005 &lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;Handle 0x0029, DMI type 11, 5 bytes	String 1: IBM ThinkPad Embedded Controller -[76HT14WW-1.04    ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|| {{NOTE|Weird system version, this bug is known fixed in latest BIOS}}&lt;br /&gt;
|-&lt;br /&gt;
| {{R52}} 1846-AQG&lt;br /&gt;
|| IBM || 1846AQG || ThinkPad R52p || IBM || 1846AQG || Not Available || IBM || Not Available || IBM || 76ET68WW (1.28 ) || 11/15/2006&lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;Handle 0x0029, DMI type 11, 5 byte   String 1: IBM ThinkPad Embedded Controller -[76HT16WW-1.06    ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| {{R52}} 1846-AQG&lt;br /&gt;
|| IBM || 1846AQG || ThinkPad R52p || IBM || 1846AQG || Not Available || IBM || Not Available || IBM || 76ET69WW (1.29 ) || 12/06/2006&lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;Handle 0x0029, DMI type 11, 5 byte   String 1: IBM ThinkPad Embedded Controller -[76HT16WW-1.06    ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| {{R52}} 1847-CTO&lt;br /&gt;
|| IBM || 1847W15 || ThinkPad R52 || IBM || 1847W15 || Not Available || IBM || Not Available || IBM || 76ET69WW (1.29 ) || 12/06/2006&lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;Handle 0x0029, DMI type 11, 5 byte   String 1: IBM ThinkPad Embedded Controller -[76HT16WW-1.06    ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| {{R52}} 1847-W62&lt;br /&gt;
|| IBM || 1847W62 || ThinkPad .    || IBM || 1847W62 || Not Available || IBM || Not Available || IBM || 76ET58WW (1.18 ) || 07/19/2005 &lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;Handle 0x0029, DMI type 11, 5 byte   String 1: IBM ThinkPad Embedded Controller -[76HT14WW-1.04    ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|| {{NOTE|Weird system version, this bug is known fixed in latest BIOS}}&lt;br /&gt;
|-&lt;br /&gt;
| {{R52}} 1847-W62&lt;br /&gt;
|| IBM || 1847W62 || ThinkPad R52  || IBM || 1847W62 || Not Available || IBM || Not Available || IBM || 76ET65WW (1.25 ) || 05/18/2006 &lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;Handle 0x0029, DMI type 11, 5 byte   String 1: IBM ThinkPad Embedded Controller -[76HT16WW-1.06    ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| {{R52}} 1858-6MM&lt;br /&gt;
|| IBM || 18586MM || ThinkPad R52 || IBM || 18586MM || Not Available || IBM || Not Available || IBM || 70ET40WW (1.04 ) || 06/02/2005&lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;Handle 0x0029, DMI type 11, 5 bytes  String 1: IBM ThinkPad Embedded Controller -[70HT26WW-1.03    ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| {{R52}} 1858-6SM&lt;br /&gt;
|| IBM || 18586SM || ThinkPad R52 || IBM || 18586SM || Not Available || IBM || Not Available || IBM || 70ET57WW (1.17 ) || 07/15/2005 &lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;Handle 0x0029, DMI type 11, 5 byte   String 1: IBM ThinkPad Embedded Controller -[70HT26WW-1.03    ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| {{R52}} 1846-4CG&lt;br /&gt;
|| IBM || 18464CG || ThinkPad R52 || IBM || 18464CG || Not Available || IBM || Not Available || IBM || 76ET65WW (1.25 ) || 05/18/2006&lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;Handle 0x0029, DMI type 11, 5 byte   String 1: IBM ThinkPad Embedded Controller -[76HT15WW-1.05    ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| {{R52}} 1846-4CG&lt;br /&gt;
|| IBM || 18464CG || ThinkPad R52 || IBM || 18464CG || Not Available || IBM || Not Available || IBM || 76ET58WW (1.18 ) || 07/19/2005&lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;Handle 0x0029, DMI type 11, 5 byte   String 1: IBM ThinkPad Embedded Controller -[76HT16WW-1.06    ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| {{R52}} 1846-B5G&lt;br /&gt;
|| IBM || 1846B5G || ThinkPad H    || IBM || 1846B5G || Not Available || IBM || Not Available || IBM || 76ET58WW (1.18 ) || 07/19/2005 &lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;Handle 0x0029, DMI type 11, 5 bytes  String 1: IBM ThinkPad Embedded Controller -[76HT14WW-1.04    ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| {{R60e}} 0657-4TG&lt;br /&gt;
|| LENOVO || 06574TG || ThinkPad R60e || LENOVO || 06574TG || Not Available || LENOVO || Not Available || LENOVO || 7EET18WW (1.04 ) || 07/28/2006&lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;Handle 0x0026, DMI type 11, 5 bytes  String 1: IBM ThinkPad Embedded Controller -[7EHT13WW-1.05    ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| {{R60}} 9456-6FG&lt;br /&gt;
|| LENOVO || 94566FG || ThinkPad R60 || LENOVO || 94566FG || Not Available || LENOVO || Not Available || LENOVO || 7CET50WW (1.05 ) || 07/28/2006&lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;Handle 0x0026, DMI type 11, 5 byte   String 1: IBM ThinkPad Embedded Controller -[7CHT19WW-1.07    ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| {{R60}} 9456-6FG&lt;br /&gt;
|| LENOVO || 94566FG || ThinkPad R60 || LENOVO || 94566FG || Not Available || LENOVO || Not Available || LENOVO || 7CETB7WW (2.07 ) || 11/13/2006 &lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;Handle 0x0026, DMI type 11, 5 byte	String 1: IBM ThinkPad Embedded Controller -[7CHT21WW-1.09    ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| {{R60}} 9461-54G&lt;br /&gt;
|| LENOVO || 946154G || ThinkPad R60 || LENOVO || 946154G || Not Available || LENOVO || Not Available || LENOVO || 7CET50WW (1.05 ) || 07/28/2006 &lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;Handle 0x0026, DMI type 11, 5 byte   String 1: IBM ThinkPad Embedded Controller -[7CHT19WW-1.07    ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| {{R60}} 9461-54G&lt;br /&gt;
|| LENOVO || 946154G || ThinkPad R60 || LENOVO || 946154G || Not Available || LENOVO || Not Available || LENOVO || 7CETC1WW (2.11 ) || 01/09/2007 &lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;Handle 0x0026, DMI type 11, 5 byte   String 1: IBM ThinkPad Embedded Controller -[7CHT21WW-1.09    ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|| {{NOTE|With this bios version the brightness control buttons don't work for kernel &amp;lt; 2.6.20}}&lt;br /&gt;
|-&lt;br /&gt;
| {{R60}} 9460MR2&lt;br /&gt;
|| LENOVO || 9460MR2 || ThinkPad R60 || LENOVO || 9460MR2 || Not Available || LENOVO || Not Available || LENOVO || 7CETC6WW (2.16 ) || 04/18/2007 &lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;Handle 0x0026, DMI type 11, 5 bytes  String 1: IBM ThinkPad Embedded Controller -[7CHT21WW-1.09    ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| {{R60}} 9461-DXG&lt;br /&gt;
|| LENOVO || 9461DXG || ThinkPad R60 || LENOVO || 9461DXG || Not Available || LENOVO || Not Available || LENOVO || 7CETB6WW (2.06 ) || 10/16/2006&lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;Handle 0x0026, DMI type 11, 5 byte   String 1: IBM ThinkPad Embedded Controller -[7CHT21WW-1.09    ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| {{R60}} 9461-DXG&lt;br /&gt;
|| LENOVO || 9461DXG || ThinkPad R60 || LENOVO || 9461DXG || Not Available || LENOVO || Not Available || LENOVO || 7CETD2WW (2.22 ) || 05/28/2008 || &amp;lt;nowiki&amp;gt;Handle 0x0026, DMI type 11, 5 byte	String 1: IBM ThinkPad Embedded Controller -[7CHT22WW-1.10    ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| {{R60}} 9462-GAG&lt;br /&gt;
|| LENOVO || 9462GAG || ThinkPad R60 || LENOVO || 9462GAG || Not Available || LENOVO || Not Available || LENOVO || 7CETB5WW (2.05 ) || 10/13/2006&lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;Handle 0x0026, DMI type 11, 5 byte   String 1: IBM ThinkPad Embedded Controller -[7CHT21WW-1.09    ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| {{R61}} 8918-5QG&lt;br /&gt;
|| LENOVO || 89185QG || ThinkPad R61 || LENOVO || 89185QG || Not Available || LENOVO || Not Available || LENOVO || 7KETA7WW (2.07 ) || 12/06/2007&lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;Handle 0x0028, DMI type 11, 5 bytes String 1: IBM ThinkPad Embedded Controller -[7KHT24WW-1.08    ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| {{R61}} 8919-W4P&lt;br /&gt;
|| LENOVO || 8919W4P || ThinkPad R61 || LENOVO || 8919W4P || Not Available || LENOVO || Not Available || LENOVO || 7KET76WW (1.26 ) || 10/18/2007&lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;Handle 0x0028, DMI type 11, 5 byte   String 1: IBM ThinkPad Embedded Controller -[7KHT22WW-1.06    ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|| {{NOTE|According to the sticker on the bottom of the notebook as well as according to Lenovo web it is 8919-CTO subtype}}&lt;br /&gt;
|-&lt;br /&gt;
| {{R61}} 8919-W6X&lt;br /&gt;
|| LENOVO || 8919W6X || ThinkPad R61 || LENOVO || 8919W6X || Not Available || LENOVO || Not Available || LENOVO || 7KET71WW (1.21 ) || 08/22/2007 &lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;Handle 0x0028, DMI type 11, 5 byte   String 1: IBM ThinkPad Embedded Controller -[7KHT22WW-1.06    ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|| LENOVO || 8919W6X || ThinkPad R61 || LENOVO || 8919W6X || Not Available || LENOVO || Not Available || LENOVO || 7KETB9WW (2.19 ) || 06/05/2008 &lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;Handle 0x0028, DMI type 11, 5 byte	String 1: IBM ThinkPad Embedded Controller -[7KHT24WW-1.08    ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| {{R61}} 8919-DFG&lt;br /&gt;
|| LENOVO || 8918DFG || ThinkPad R61 || LENOVO || 8918DFG || Not Available || LENOVO || Not Available || LENOVO || 7KETA9WW (2.09 ) || 12/27/2007&lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;Handle 0x0028, DMI type 11, 5 byte   String 1: IBM ThinkPad Embedded Controller -[7KHT24WW-1.08    ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| {{R61}} 8943-DMG&lt;br /&gt;
|| LENOVO || 8943DMG || ThinkPad R61 || LENOVO || 8943DMG || Not Available || LENOVO || Not Available || LENOVO || 7QET34WW (1.16 ) || 03/24/2008&lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;Handle 0x0028, DMI type 11, 5 byte	String 1: IBM ThinkPad Embedded Controller -[7QHT15WW-1.00    ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| {{R61}} 7733-1ES&lt;br /&gt;
|| LENOVO || 77331ES || ThinkPad R61 || LENOVO || 77331ES || Not Available || LENOVO || Not Available || LENOVO || 7LETB0WW (2.10 ) || 01/21/2008&lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;Handle 0x0028, DMI type 11, 5 byte   String 1: IBM ThinkPad Embedded Controller -[7KHT24WW-1.08    ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| {{R61}} 7733-1ES&lt;br /&gt;
|| LENOVO || 77331ES || ThinkPad R61 || LENOVO || 77331ES || Not Available || LENOVO || Not Available || LENOVO || 7LETB4WW (2.14 ) || 03/24/2008 &lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;Handle 0x0028, DMI type 11, 5 byte   String 1: IBM ThinkPad Embedded Controller -[7KHT24WW-1.08    ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| {{R61i}} 7650-D7G&lt;br /&gt;
|| LENOVO || 7650D7G || ThinkPad R61e || LENOVO || 7650D7G || Not Available || LENOVO || Not Available || LENOVO || 7PETB0WW (2.10 ) || 01/21/2008 &lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;Handle 0x0028, DMI type 11, 5 byte	String 1: IBM ThinkPad Embedded Controller -[7KHT24WW-1.08    ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| {{R400}} 7439-A85&lt;br /&gt;
|| LENOVO || 7439A85 || ThinkPad R400 || LENOVO || 7439A85 || Not Available || LENOVO || Not Available || LENOVO || 7UET45WW (1.15 ) || 09/08/2008&lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;Handle 0x0028, DMI type 11, 5 byte   String 1: IBM ThinkPad Embedded Controller -[7VHT12WW-1.01    ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
! colspan=14 style=&amp;quot;text-align:center;background:#efefef;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
====S series====&lt;br /&gt;
|-&lt;br /&gt;
| {{s30}} 2639-4WJ&lt;br /&gt;
|| IBM || 26394WJ || Not Available || IBM || 2609BS1 || Not Available || IBM || Not Available || IBM || 18ET45WW (1.45) || 07/10/2001&lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
! colspan=14 style=&amp;quot;text-align:center;background:#efefef;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
====SL series====&lt;br /&gt;
|-&lt;br /&gt;
| {{SL500}} 2746-3ZG&lt;br /&gt;
|| LENOVO.                        || 27463ZG || ThinkPad SL500 || LENOVO                        || BOXSTER    || LENOVO 6AET42WW || LENOVO                        || LENOVO 6AET42WW || LENOVO || 6AET42WW || 08/04/2008 &lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|| {{WARN|IdeaPad EC and BIOS.  This is an IdeaPad in disguise.}}&lt;br /&gt;
|-&lt;br /&gt;
| {{SL500}} 2746-4CG&lt;br /&gt;
|| LENOVO.                        || 27464CG || ThinkPad SL500 || LENOVO                        || BOXSTER    || LENOVO 6AET41WW || LENOVO                        || LENOVO 6AET41WW || LENOVO || 6AET41WW || 07/10/2008 &lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|| {{WARN|IdeaPad EC and BIOS.  This is an IdeaPad in disguise.}}&lt;br /&gt;
|-&lt;br /&gt;
! colspan=14 style=&amp;quot;text-align:center;background:#efefef;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
====T series====&lt;br /&gt;
|-&lt;br /&gt;
| {{T20}} 2647-UC2&lt;br /&gt;
|| IBM || 2647UC2 || Not Available || IBM || 2647UC2 || Not Available || IBM || Not Available || IBM || IYET45WW (1.08a) || 12/21/1999&lt;br /&gt;
||&lt;br /&gt;
|| {{WARN|Very outdated BIOS}}&lt;br /&gt;
|-&lt;br /&gt;
| {{T21}} 2647-8AU&lt;br /&gt;
|| IBM || 26478AU || Not Available || IBM || 26478AU || Not Available || IBM || Not Available || IBM || KZET34WW (1.16 ) || 04/28/2004&lt;br /&gt;
||&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| {{T22}} 2647-4EG&lt;br /&gt;
|| IBM || 26474EG || Not Available || IBM || 26474EG || Not Available || IBM || Not Available || IBM || 16ET31WW (1.11 ) || 03/20/2003 &lt;br /&gt;
||&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| {{T22}} 2647-8EU&lt;br /&gt;
|| IBM || 26478EU || Not Available || IBM || 26478EU || Not Available || IBM || Not Available || IBM || 16ET32WW (1.12 ) || 04/27/2004&lt;br /&gt;
||&lt;br /&gt;
||&lt;br /&gt;
|- &lt;br /&gt;
| {{T23}} 2647-4MG&lt;br /&gt;
|| IBM || 26474MG || Not Available || IBM || 26474MG || Not Available || IBM || Not Available || IBM || 1AET58WW (1.14a) || 09/11/2002 &lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|- &lt;br /&gt;
| {{T23}} 2647-4MG&lt;br /&gt;
|| IBM || 26474MG || Not Available || IBM || 26474MG || Not Available || IBM || Not Available || IBM || 1AET64WW (1.20 ) || 10/18/2006 &lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;Handle 0x0024, DMI type 11, 5 byte   String 1: IBM ThinkPad Embedded Controller -[1AHT23WW-1.06a   ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|- &lt;br /&gt;
| {{T23}} 2647-4NU&lt;br /&gt;
|| IBM || 26474NU || Not Available || IBM || 26474NU || Not Available || IBM || Not Available || IBM || 1AET62WW (1.18 ) || 07/06/2004&lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;Handle 0x0024, DMI type 11, 5 bytes  String 1: IBM ThinkPad Embedded Controller -[1AHT23WW-1.06a   ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| {{T23}} 2647-8MG&lt;br /&gt;
|| IBM || 26478MG || Not Available || IBM || 26478MG || Not Available || IBM || Not Available || IBM || 1AET56WW (1.13 ) || 07/02/2002&lt;br /&gt;
||&lt;br /&gt;
|| {{NOTE|Missing EC string, this bug is known to be fixed in latest BIOS}}&lt;br /&gt;
|-&lt;br /&gt;
| {{T23}} 2647-8MG&lt;br /&gt;
|| IBM || 26478MG || Not Available || IBM || 26478MG || Not Available || IBM || Not Available || IBM || 1AET62WW (1.18 ) || 07/06/2004&lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;Handle 0x0024, DMI type 11, 5 bytes  String 1: IBM ThinkPad Embedded Controller -[1AHT23WW-1.06a]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| {{T30}} 2366-85G&lt;br /&gt;
|| IBM || 236685G || Not Available || IBM || 236685G || Not Available || IBM || Not Available || IBM || 1IET69WW (2.08 ) || 06/11/2004 &lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;     String 1: IBM ThinkPad Embedded Controller -[1IHT18WW-1.05    ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| {{T30}} 2366-GU1&lt;br /&gt;
|| IBM || 2366GU1 || Not Available || IBM || 2366GU1 || Not Available || IBM || Not Available || IBM || 1IET69WW (2.08 ) || 06/11/2004&lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;Handle 0x0024, DMI type 11, 5 bytes  String 1: IBM ThinkPad Embedded Controller -[1IHT19WW-1.06    ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| {{T30}} 2366-JBU&lt;br /&gt;
|| IBM || 2366JBU || Not Available || IBM || 2366JBU || Not Available || IBM || Not Available || IBM || 1IET71WW (2.10 ) || 06/16/2006&lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;Handle 0x0024, DMI type 11, 5 byte   String 1: IBM ThinkPad Embedded Controller -[1IHT20WW-1.07    ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| {{T40}} 2378-D2U&lt;br /&gt;
|| IBM || 2378D2U || ThinkPad T40 || IBM || 2378D2U || Not Available || IBM || Not Available || IBM || 1RETC2WW (3.03 ) || 04/07/2004&lt;br /&gt;
|| &lt;br /&gt;
|| {{NOTE|Missing EC string, this bug is known to be fixed in latest BIOS}}&lt;br /&gt;
|-&lt;br /&gt;
| {{T40p}} 2373-G1G&lt;br /&gt;
|| IBM || 2373G1G || ThinkPad T40p || IBM || 2373G1G || Not Available || IBM || Not Available || IBM || 1RETDPWW (3.21 ) || 06/02/2006&lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;     String 1: IBM ThinkPad Embedded Controller -[1RHT71WW-3.04    ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| {{T41}} 2373-9FG&lt;br /&gt;
|| IBM || 23739FG || ThinkPad T41  || IBM || 23739FG || Not Available || IBM || Not Available || IBM || 1RETDPWW (3.21 ) || 06/02/2006&lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;Handle 0x0029, DMI type 11, 5 byte   String 1: IBM ThinkPad Embedded Controller -[1RHT71WW-3.04    ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|| &lt;br /&gt;
|- &lt;br /&gt;
| {{T41}} 2373-W63&lt;br /&gt;
|| IBM || 2373W63 || ThinkPad T41  || IBM || 2373W63 || Not Available || IBM || Not Available || IBM || 1RETDPWW (3.21 ) || 06/02/2006&lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;Handle 0x0029, DMI type 11, 5 byte   String 1: IBM ThinkPad Embedded Controller -[1RHT71WW-3.04    ]-&amp;lt;/nowiki&amp;gt; &lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| {{T41}} 2373-XNX&lt;br /&gt;
|| IBM || 2373XNX || ThinkPad T41  || IBM || 2373XNX || Not Available || IBM || Not Available || IBM || 1RETDOWW (3.20 ) || 02/27/2006&lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;     String 1: IBM ThinkPad Embedded Controller -[1RHT71WW-3.04    ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| {{T41}} 2373-2FG&lt;br /&gt;
|| IBM || 23732FG || ThinkPad T41 || IBM || 23732FG || Not Available || IBM || Not Available || IBM || 1RET84WW (2.11 ) || 10/30/2003&lt;br /&gt;
||&lt;br /&gt;
|| {{NOTE|Missing EC string, this bug is known to be fixed in latest BIOS}}&lt;br /&gt;
|-&lt;br /&gt;
| {{T41}} 2374-312&lt;br /&gt;
|| IBM || 2374312 || ThinkPad T41  || IBM || 2374312 || Not Available || IBM || Not Available || IBM || 1RETDRWW (3.23 ) || 06/18/2007 &lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;Handle 0x0029, DMI type 11, 5 byte   String 1: IBM ThinkPad Embedded Controller -[1RHT71WW-3.04    ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| {{T41}} 2379-DJU&lt;br /&gt;
|| IBM || 2379DJU || ThinkPad T41  || IBM || 2379DJU || Not Available || IBM || Not Available || IBM || 1RETDPWW (3.21 ) || 06/02/2006 &lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;Handle 0x0029, DMI type 11, 5 byte   String 1: IBM ThinkPad Embedded Controller -[1RHT71WW-3.04    ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| {{T41p}} 2373-GHG &lt;br /&gt;
|| IBM || 2373GHG || ThinkPad T41p || IBM || 2373GHG || Not Available || IBM || Not Available || IBM || 1RETDIWW (3.14 ) || 01/20/2005&lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;Handle 0x0029, DMI type 11, 5 byte   String 1: IBM ThinkPad Embedded Controller -[1RHT71WW-3.04    ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| {{T41p}} 2373-GEG&lt;br /&gt;
|| IBM || 2373GEG || ThinkPad T41p || IBM || 2373GEG || Not Available || IBM || Not Available || IBM || 1RETDNWW (3.19 ) || 10/13/2005&lt;br /&gt;
|| &amp;lt;nowiki&amp;gt; Handle 0x0029, DMI type 11, 5 byte   String 1: IBM ThinkPad Embedded Controller -[1RHT71WW-3.04    ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| {{T41p}} 2373-GJJ&lt;br /&gt;
|| IBM || 2373GJJ || ThinkPad T41p || IBM || 2373GJJ || Not Available || IBM || Not Available || IBM || 1RETDOWW (3.20 ) || 02/27/2006 &lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;Handle 0x0029, DMI type 11, 5 byte   String 1: IBM ThinkPad Embedded Controller -[1RHT71WW-3.04    ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| {{T42}} 2373-FWG&lt;br /&gt;
|| IBM || 2373FWG || ThinkPad T42 || IBM || 2373FWG || Not Available || IBM || Not Available || IBM || 1RETDHWW (3.13 ) || 10/29/2004&lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;     String 1: IBM ThinkPad Embedded Controller -[1RHT71WW-3.04    ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| {{T42}} 2373-M1G&lt;br /&gt;
|| IBM || 2373M1G || ThinkPad T42 || IBM || 2373M1G || Not Available || IBM || Not Available || IBM || 1RETDPWW (3.21 ) || 06/02/2006 &lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;     String 1: IBM ThinkPad Embedded Controller -[1RHT71WW-3.04    ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|- &lt;br /&gt;
| {{T42}} 2374-WEH&lt;br /&gt;
|| IBM || 2374WEH || ThinkPad T42 || IBM || 2374WEH || Not Available || IBM || Not Available || IBM || 1RETDPWW (3.21 ) || 06/02/2006&lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;Handle 0x0029, DMI type 11, 5 byte   String 1: IBM ThinkPad Embedded Controller -[1RHT71WW-3.04    ]-&amp;lt;/nowiki&amp;gt; &lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| {{T42}} 2378-FVU&lt;br /&gt;
|| IBM || 2378FVU || ThinkPad T42 || IBM || 2378FVU || Not Available || IBM || Not Available || IBM || 1RETDPWW (3.21 ) || 06/02/2006 &lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;Handle 0x0029, DMI type 11, 5 byte	String 1: IBM ThinkPad Embedded Controller -[1RHT71WW-3.04    ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| {{T42p}} 2373-KXU&lt;br /&gt;
|| IBM || 2373KXU || ThinkPad T42p || IBM || 2373KXU || Not Available || IBM || Not Available || IBM || 1RETDPWW (3.21 ) || 06/02/2006&lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;Handle 0x0029, DMI type 11, 5 byte   String 1: IBM ThinkPad Embedded Controller -[1RHT71WW-3.04    ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| {{T42p}} 2373-KUU&lt;br /&gt;
|| IBM || 2373KUU || ThinkPad T42p || IBM || 2373KUU || Not Available || IBM || Not Available || IBM || 1RETDMWW (3.18 ) || 09/15/2005&lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;     String 1: IBM ThinkPad Embedded Controller -[1RHT71WW-3.04    ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| {{T42p}} 2373-GYG&lt;br /&gt;
|| IBM || 2373GYG || ThinkPad T42p || IBM || 2373GYG || Not Available || IBM || Not Available || IBM || 1RETDOWW (3.20 ) || 02/27/2006 &lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;     String 1: IBM ThinkPad Embedded Controller -[1RHT71WW-3.04    ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| {{T42p}} 2374-CP5&lt;br /&gt;
|| IBM || 2374CP5 || ThinkPad T42p || IBM || 2374CP5 || Not Available || IBM || Not Available || IBM || 1RETDPWW (3.21 ) || 06/02/2006 &lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;Handle 0x0029, DMI type 11, 5 byte	String 1: IBM ThinkPad Embedded Controller -[1RHT71WW-3.04    ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| {{T42p}} 2379-DYU&lt;br /&gt;
|| IBM || 2379DYU || ThinkPad T42p || IBM || 2379DYU || Not Available || IBM || Not Available || IBM || 1RETDPWW (3.21 ) || 06/02/2006&lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;Handle 0x0029, DMI type 11, 5 bytes  String 1: IBM ThinkPad Embedded Controller -[1RHT71WW-3.04    ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| {{T42p}} 2372-Q2G&lt;br /&gt;
|| IBM || 2373Q2G || ThinkPad T42p || IBM || 2373Q2G || Not Available || IBM || Not Available || IBM || 1RETDPWW (3.21 ) || 06/02/2006&lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;Handle 0x0029, DMI type 11, 5 byte   String 1: IBM ThinkPad Embedded Controller -[1RHT71WW-3.04    ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| {{T43}} 1871-4AG&lt;br /&gt;
|| IBM || 18714AG || ThinkPad T43 || IBM || 18714AG || Not Available || IBM || Not Available || IBM || 70ET64WW (1.24 ) || 02/13/2006 &lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;Handle 0x0029, DMI type 11, 5 byte   String 1: IBM ThinkPad Embedded Controller -[70HT27WW-1.04    ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| {{T43}} 1871-F1G&lt;br /&gt;
|| IBM || 1871F1G || ThinkPad T43 || IBM || 1871F1G || Not Available || IBM || Not Available || IBM || 70ET61WW (1.21 ) || 11/01/2005&lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;Handle 0x0029, DMI type 11, 5 byte   String 1: IBM ThinkPad Embedded Controller -[70HT26WW-1.03    ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| {{T43}} 2686-DGU&lt;br /&gt;
|| IBM || 2686DGU || ThinkPad T43 || IBM || 2686DGU || Not Available || IBM || Not Available || IBM || 1YET62WW (1.27 ) || 05/18/2006&lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;Handle 0x0029, DMI type 11, 5 bytes  String 1: IBM ThinkPad Embedded Controller -[1YHT29WW-1.06    ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| {{T43}} 2669-WE5&lt;br /&gt;
|| IBM || 2669WE5 || ThinkPad T43 || IBM || 2669WE5 || Not Available || IBM || Not Available || IBM || 1YET56WW (1.21 ) || 07/06/2005 &lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;String 1: IBM ThinkPad Embedded Controller -[1YHT26WW-1.03    ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|| {{NOTE|User reports this is really a 2669-CEU with 1GB RAM + BlueTooth, and not a 2669-WE5 (unverified if this makes sense)}}&lt;br /&gt;
|-&lt;br /&gt;
| {{T43p}} 2668-G2G&lt;br /&gt;
|| IBM || 2668G2G || ThinkPad T43p || IBM || 2668G2G || Not Available || IBM || Not Available || IBM || 1YET47WW (1.08 ) || 06/09/2005 &lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;     String 1: IBM ThinkPad Embedded Controller -[1YHT26WW-1.03    ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| {{T43p}} 2687-D5U&lt;br /&gt;
|| IBM || 2687D5U || ThinkPad T43p || IBM || 2687D5U || Not Available || IBM || Not Available || IBM || 1YET59WW (1.24 ) || 11/07/2005&lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;Handle 0x0029, DMI type 11, 5 byte   String 1: IBM ThinkPad Embedded Controller -[1YHT26WW-1.03    ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| {{T60}} 1951-24G&lt;br /&gt;
|| LENOVO || 195124G || ThinkPad T60 || LENOVO || 195124G || Not Available || LENOVO || Not Available || LENOVO || 79ET65WW (1.09a) || 07/27/2006&lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;Handle 0x0026, DMI type 11, 5 byte   String 1: IBM ThinkPad Embedded Controller -[79HT48WW-1.05b   ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| {{T60}} 1952-W5R&lt;br /&gt;
|| LENOVO || 1952W5R || ThinkPad T60 || LENOVO || 1952W5R || Not Available || LENOVO || Not Available || LENOVO || 79ET61WW (1.06 ) || 05/24/2006&lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;Handle 0x0026, DMI type 11, 5 byte   String 1: IBM ThinkPad Embedded Controller -[79HT45WW-1.04    ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| {{T60}} 1952-W5R&lt;br /&gt;
|| LENOVO || 1952W5R || ThinkPad T60 || LENOVO || 1952W5R || Not Available || LENOVO || Not Available || LENOVO || 79ETD2WW (2.12 ) || 04/12/2007&lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;Handle 0x0026, DMI type 11, 5 byte   String 1: IBM ThinkPad Embedded Controller -[79HT50WW-1.07    ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| {{T60}} 2007-49G&lt;br /&gt;
|| LENOVO || 200749G || ThinkPad T60 || LENOVO || 200749G || Not Available || LENOVO || Not Available || LENOVO || 79ET62WW (1.07 ) || 06/12/2006 &lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;     String 1: IBM ThinkPad Embedded Controller -[79HT45WW-1.04    ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| {{T60}} 2007-77G&lt;br /&gt;
|| LENOVO || 200777G || ThinkPad T60 || LENOVO || 200777G || Not Available || LENOVO || Not Available || LENOVO || 79ETD1WW (2.11 ) || 03/15/2007&lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;Handle 0x0026, DMI type 11, 5 byte   String 1: IBM ThinkPad Embedded Controller -[79HT50WW-1.07    ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| {{T60}} 1951-CA2&lt;br /&gt;
|| LENOVO || 1951CA2 || ThinkPad T60 || LENOVO || 1951CA2 || Not Available || LENOVO || Not Available || LENOVO || 79ETD9WW (2.19 ) || 09/19/2007&lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;Handle 0x0026, DMI type 11, 5 byte   String 1: IBM ThinkPad Embedded Controller -[79HT50WW-1.07    ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| {{T60}} 2007-BF3&lt;br /&gt;
|| LENOVO || 2007BF3 || ThinkPad T60 || LENOVO || 2007BF3 || Not Available || LENOVO || Not Available || LENOVO || 79ETD7WW (2.17 ) || 08/23/2007&lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;Handle 0x0026, DMI type 11, 5 byte   String 1: IBM ThinkPad Embedded Controller -[79HT50WW-1.07    ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| {{T60p}} 2007-83U&lt;br /&gt;
|| LENOVO || 200783U || ThinkPad T60p || LENOVO || 200783U || Not Available || LENOVO || Not Available || LENOVO || 79ET60WW (1.05a) || 04/18/2006&lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;     String 1: IBM ThinkPad Embedded Controller -[79HT43WW-1.02    ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| {{T60p}} 2007-93G&lt;br /&gt;
|| LENOVO || 200793G || ThinkPad T60p || LENOVO || 200793G || Not Available || LENOVO || Not Available || LENOVO || 79ET62WW (1.07 ) || 06/12/2006&lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;Handle 0x0026, DMI type 11, 5 bytes  String 1: IBM ThinkPad Embedded Controller -[79HT45WW-1.04    ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| {{T60p}} 2007-93U&lt;br /&gt;
|| LENOVO || 200793U || ThinkPad T60p || LENOVO || 200793U || Not Available || LENOVO || Not Available || LENOVO || 79ET66WW (1.10 ) || 08/02/2006&lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;Handle 0x0026, DMI type 11, 5 byte   String 1: IBM ThinkPad Embedded Controller -[79HT48WW-1.05b   ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| {{T60p}} 2007-93U&lt;br /&gt;
|| LENOVO || 200793U || ThinkPad T60p || LENOVO || 200793U || Not Available || LENOVO || Not Available || LENOVO || 79ET67WW (1.11 ) || 08/29/2006&lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;Handle 0x0026, DMI type 11, 5 byte   String 1: IBM ThinkPad Embedded Controller -[79HT48WW-1.05b   ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| {{T60p}} 2007-93U&lt;br /&gt;
|| LENOVO || 200793U || ThinkPad T60p || LENOVO || 200793U || Not Available || LENOVO || Not Available || LENOVO || 79ETC3WW (2.03 ) || 11/10/2006&lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;Handle 0x0026, DMI type 11, 5 byte	String 1: IBM ThinkPad Embedded Controller -[79HT50WW-1.07    ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| {{T60p}} 2007-ZK4&lt;br /&gt;
|| LENOVO || 2007ZK4 || ThinkPad T60p || LENOVO || 2007ZK4 || Not Available || LENOVO || Not Available || LENOVO || 79ETD3WW (2.13 ) || 04/30/2007&lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;Handle 0x0026, DMI type 11, 5 byte   String 1: IBM ThinkPad Embedded Controller -[79HT50WW-1.07    ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| {{T60p}} 2613-ESU&lt;br /&gt;
|| LENOVO || 2613ESU || ThinkPad T60p || LENOVO || 2613ESU || Not Available || LENOVO || Not Available || LENOVO || 79ET67WW (1.11 ) || 08/29/2006&lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;Handle 0x0026, DMI type 11, 5 byte   String 1: IBM ThinkPad Embedded Controller -[79HT48WW-1.05b   ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| {{T60p}} 2623-DDU&lt;br /&gt;
|| LENOVO || 2623DDU || ThinkPad T60p || LENOVO || 2623DDU || Not Available || LENOVO || Not Available || LENOVO || 79ETC3WW (2.03 ) || 11/10/2006 &lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;Handle 0x0026, DMI type 11, 5 byte   String 1: IBM ThinkPad Embedded Controller -[79HT50WW-1.07    ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| {{T61}} 6457-W2C&lt;br /&gt;
|| LENOVO || 6457W2C || ThinkPad T61 || LENOVO || 6457W2C || Not Available || LENOVO || Not Available || LENOVO || 7LETB0WW (2.10 ) || 01/21/2008 &lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;Handle 0x0028, DMI type 11, 5 byte	String 1: IBM ThinkPad Embedded Controller -[7KHT24WW-1.08    ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| {{T61}} 6460-EBG&lt;br /&gt;
|| LENOVO || 6460EBG || ThinkPad T61 || LENOVO || 6460EBG || Not Available || LENOVO || Not Available || LENOVO || 7LETB7WW (2.17 ) || 04/25/2008&lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;Handle 0x0028, DMI type 11, 5 byte   String 1: IBM ThinkPad Embedded Controller -[7KHT24WW-1.08    ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| {{T61}} 6460-EBG&lt;br /&gt;
| LENOVO || 6460EBG || ThinkPad T61 || LENOVO || 6460EBG || Not Available || LENOVO || Not Available || LENOVO || 7LETC4WW (2.24 ) || 08/15/2008&lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;Handle 0x0028, DMI type 11, 5 byte   String 1: IBM ThinkPad Embedded Controller -[7KHT24WW-1.08    ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| {{T61}} 6465-CTO&lt;br /&gt;
|| LENOVO || 6465CTO || ThinkPad T61 || LENOVO || 6465CTO || Not Available || LENOVO || Not Available || LENOVO || 7LETB2WW (2.12 ) || 02/20/2008&lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;Handle 0x0028, DMI type 11, 5 byte   String 1: IBM ThinkPad Embedded Controller -[7KHT24WW-1.08    ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| {{T61}} 7662-XDU&lt;br /&gt;
|| LENOVO || 7662XDU || ThinkPad T61 || LENOVO || 7662XDU || 7662XDU|| LENOVO || Not Available || LENOVO || 7LET37WW (1.07 ) || 04/17/2007 &lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;Handle 0x0028, DMI type 11, 5 bytes   String 1: IBM ThinkPad Embedded Controller -[7KHT19WW-1.03    ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|| {{WARN|BIOS and EC firmware have different IDs}}&lt;br /&gt;
|-&lt;br /&gt;
| {{T61}} 7661-A56&lt;br /&gt;
|| LENOVO || 7661A56 || ThinkPad T61 || LENOVO || 7661A56 || Not Available || LENOVO || Not Available || LENOVO || 7LET39WW (1.09 ) || 05/14/2007 &lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;Handle 0x0028, DMI type 11, 5 byte	String 1: IBM ThinkPad Embedded Controller -[7KHT21WW-1.05    ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| {{T61}} 8897-CTO&lt;br /&gt;
|| LENOVO || 8897CTO || ThinkPad T61 || LENOVO || 8897CTO || Not Available || LENOVO || Not Available || LENOVO || 7LET52WW (1.22 ) || 08/27/2007&lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;Handle 0x0028, DMI type 11, 5 byte   String 1: IBM ThinkPad Embedded Controller -[7KHT22WW-1.06    ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| {{T61}} 8897-CTO&lt;br /&gt;
|| LENOVO || 8897CTO || ThinkPad T61 || LENOVO || 8897CTO || Not Available || LENOVO || Not Available || LENOVO || 7LET56WW (1.26 ) || 10/18/2007 &lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;Handle 0x0028, DMI type 11, 5 byte   String 1: IBM ThinkPad Embedded Controller -[7KHT22WW-1.06    ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|| &lt;br /&gt;
|- &lt;br /&gt;
| {{T61p}} 6459-A12&lt;br /&gt;
|| LENOVO || 6459A12 || ThinkPad T61p || LENOVO || 6459A12 || Not Available || LENOVO || Not Available || LENOVO || 7LET56WW (1.26 ) || 10/18/2007&lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;Handle 0x0028, DMI type 11, 5 byte   String 1: IBM ThinkPad Embedded Controller -[7KHT22WW-1.06    ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| {{T61p}} 6459-CTO&lt;br /&gt;
|| LENOVO || 6459CTO || ThinkPad T61p || LENOVO || 6459CTO || Not Available || LENOVO || Not Available || LENOVO || 7LETB9WW (2.19 ) || 06/06/2008&lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;Handle 0x0028, DMI type 11, 5 byte   String 1: IBM ThinkPad Embedded Controller -[7KHT24WW-1.08    ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|| &lt;br /&gt;
|- | {{T500}} 2055-A81&lt;br /&gt;
|| LENOVO || 2055A81 || ThinkPad T500 || LENOVO || 2055A81 || Not Available || LENOVO || Not Available || LENOVO || 6FET50WW (1.20 ) || 10/30/2008 &lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;Handle 0x0028, DMI type 11, 5 byte	String 1: IBM ThinkPad Embedded Controller -[7VHT12WW-1.01    ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| {{T500}} 2055-45G&lt;br /&gt;
|| LENOVO || 205545G || ThinkPad T500 || LENOVO || 205545G || Not Available || LENOVO || Not Available || LENOVO || 6FET49WW (1.19 ) || 10/17/2008&lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;Handle 0x0028, DMI type 11, 5 byte   String 1: IBM ThinkPad Embedded Controller -[7VHT12WW-1.01    ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|| &lt;br /&gt;
|- &lt;br /&gt;
! colspan=14 style=&amp;quot;text-align:center;background:#efefef;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
====X series====&lt;br /&gt;
|-&lt;br /&gt;
| {{X20}} 266231G&lt;br /&gt;
|| IBM || 266231G || Not Available || IBM || 266231G || Not Available || IBM || Not Available || IBM || IZET9DWW (2.25 ) || 04/17/2003&lt;br /&gt;
||&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
|| 266232G || IBM || 266232G || Not Available || IBM || 266232G || Not Available || IBM || Not Available || IBM || IZET9AWW (2.22 ) || 09/11/2002&lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| {{X23}} 2662EBG&lt;br /&gt;
|| IBM || 2662EBG || Not Available || IBM || 2662EBG || Not Available || IBM || Not Available || IBM || 1DET70WW (1.32 ) || 06/10/2003&lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| {{X24}} 2662-MPU&lt;br /&gt;
|| IBM || 62MPUFX || Not Available || IBM || 62MPUFX || Not Available || IBM || Not Available || IBM || 1DET67WW (1.29 ) || 12/18/2002&lt;br /&gt;
||&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| {{X30}} 2672-42G&lt;br /&gt;
|| IBM || 267242G || Not Available || IBM || 267242G || Not Available || IBM || Not Available || IBM || 1KET48WW (1.09 ) || 06/16/2006&lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;Handle 0x0026, DMI type 11, 5 byte   String 1: IBM ThinkPad Embedded Controller -[1KHT18WW-1.06    ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|- &lt;br /&gt;
| {{X30}} 2672-4HU&lt;br /&gt;
|| IBM || 26724HU || Not Available || IBM || 26724HU || Not Available || IBM || Not Available || IBM || 1KET48WW (1.09 ) || 06/16/2006&lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;Handle 0x0026, DMI type 11, 5 byte   String 1: IBM ThinkPad Embedded Controller -[1KHT18WW-1.06    ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| {{X30}} 2672-PG3&lt;br /&gt;
|| IBM || 2672PG3 || Not Available || IBM || 2672PG3 || Not Available || IBM || Not Available || IBM || 1KET48WW (1.09 ) || 06/16/2006&lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;Handle 0x0026, DMI type 11, 5 byte   String 1: IBM ThinkPad Embedded Controller -[1KHT18WW-1.06    ]-&amp;lt;/nowiki&amp;gt; &lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| {{X31}} 2672-JXU&lt;br /&gt;
|| IBM || 2672JXU || ThinkPad X31 || IBM || 2672JXU || Not Available || IBM || Not Available || IBM || 1QET97WW (3.02 ) || 09/22/2005 &lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;Handle 0x0026, DMI type 11, 5 byte   String 1: IBM ThinkPad Embedded Controller -[1QHT23WW-1.08    ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| {{X31}} 2672-FG2&lt;br /&gt;
|| IBM || 2672FG2 || ThinkPad X31 || IBM || 2672FG2 || Not Available || IBM || Not Available || IBM || 1QET73WW (2.11 ) || 02/13/2004 &lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;Handle 0x0026, DMI type 11, 5 byte	String 1: IBM ThinkPad Embedded Controller -[1QHT16WW-1.03    ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| {{X31}} 2672-FG2&lt;br /&gt;
|| IBM || 2672FG2 || ThinkPad X31 || IBM || 2672FG2 || Not Available || IBM || Not Available || IBM || 1QET97WW (3.02 ) || 09/22/2005 &lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;Handle 0x0026, DMI type 11, 5 byte	String 1: IBM ThinkPad Embedded Controller -[1QHT23WW-1.08    ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| {{X32}} 2884-A3U&lt;br /&gt;
|| IBM || 2884A3U || ThinkPad X32 || IBM || 2884A3U || Not Available || IBM || Not Available || IBM || 1QET94WW (3.00d) || 01/23/2005&lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;Handle 0x0026, DMI type 11, 5 byte   String 1: IBM ThinkPad Embedded Controller -[1QHT22WW-1.07b   ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| {{X32}} 2673-M4U&lt;br /&gt;
|| IBM || 2673M4U || ThinkPad X32 || IBM || 2673M4U || Not Available || IBM || Not Available || IBM || 1QET97WW (3.02 ) || 09/22/2005&lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;Handle 0x0026, DMI type 11, 5 byte   String 1: IBM ThinkPad Embedded Controller -[1QHT23WW-1.08    ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| {{X40}} 2386-H4G&lt;br /&gt;
|| IBM || 2386H4G || ThinkPad X40 || IBM || 2386H4G || Not Available || IBM || Not Available || IBM || 1UET92WW (1.42 ) || 09/16/2004 &lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;Handle 0x0024, DMI type 11, 5 bytes  String 1: IBM ThinkPad Embedded Controller -[1UHT82WW-1.32    ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| {{X40}} 2371-Y29&lt;br /&gt;
|| IBM || 2371Y29 || ThinkPad X40 || IBM || 2371Y29 || Not Available || IBM || Not Available || IBM || 1UETD3WW (2.08 ) || 12/21/2006 &lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;Handle 0x0024, DMI type 11, 5 byte   String 1: IBM ThinkPad Embedded Controller -[1UHTA6WW-1.56    ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| {{X40}} 2371-W9F&lt;br /&gt;
|| IBM || 2371W9F || ThinkPad X40 || IBM || 2371W9F || Not Available || IBM || Not Available || IBM || 1UETC8WW (2.03 ) || 09/28/2005 &lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;Handle 0x0024, DMI type 11, 5 byte	String 1: IBM ThinkPad Embedded Controller -[1UHTB2WW-1.62    ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| {{X40}} 2371-W9F&lt;br /&gt;
|| IBM || 2371W9F || ThinkPad X40 || IBM || 2371W9F || Not Available || IBM || Not Available || IBM || 1UETD3WW (2.08 ) || 12/21/2006 &lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;Handle 0x0024, DMI type 11, 5 byte	String 1: IBM ThinkPad Embedded Controller -[1UHTB2WW-1.62    ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| {{X41}} 2525-HU1&lt;br /&gt;
|| IBM || 2525HU1 || ThinkPad X41 || IBM || 2525HU1 || Not Available || IBM || Not Available || IBM || 74ET48WW (1.17a) || 06/07/2005&lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;Handle 0x0025, DMI type 11, 5 bytes  String 1: IBM ThinkPad Embedded Controller -[74HT25WW-1.00    ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| {{X41t}} 1869-CLG&lt;br /&gt;
|| IBM || 1869CLG || ThinkPad X41 Tablet || IBM || 1869CLG || Not Available || IBM || Not Available || IBM || 75ET56WW (2.02 ) || 03/14/2006&lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;Handle 0x0025, DMI type 11, 5 byte   String 1: IBM ThinkPad Embedded Controller -[75HT19WW-1.01    ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| {{X60}} 1709-47U&lt;br /&gt;
|| LENOVO || 170947U || ThinkPad X60 || LENOVO || 170947U || Not Available || LENOVO || Not Available || LENOVO || 7BET44WW (1.04 ) || 03/13/2006&lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;     String 1: IBM ThinkPad Embedded Controller -[7BHT29WW-1.02    ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| {{X60}} 1709-GDJ&lt;br /&gt;
|| LENOVO || 1709GDJ || ThinkPad X60 || LENOVO || 1709GDJ || Not Available || LENOVO || Not Available || LENOVO || 7BETC2WW (2.03 ) || 10/16/2006 &lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;Handle 0x0026, DMI type 11, 5 byte   String 1: IBM ThinkPad Embedded Controller -[7BHT36WW-1.09    ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| {{X60}} 1706-B69&lt;br /&gt;
|| LENOVO || 1706B69 || ThinkPad X60 || LENOVO || 1706B69 || Not Available || LENOVO || Not Available || LENOVO || 7BETC8WW (2.09 ) || 03/14/2007 &lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;Handle 0x0026, DMI type 11, 5 byte	String 1: IBM ThinkPad Embedded Controller -[7BHT37WW-1.10    ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| {{X60s}} 1702-55G&lt;br /&gt;
|| LENOVO || 170255G || ThinkPad X60s || LENOVO || 170255G || Not Available || LENOVO || Not Available || LENOVO || 7BET44WW (1.04 ) || 03/13/2006&lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;     String 1: IBM ThinkPad Embedded Controller -[7BHT29WW-1.02    ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| {{X60s}} 1702-5FG&lt;br /&gt;
|| LENOVO || 17025FG || ThinkPad X60s || LENOVO || 17025FG || Not Available || LENOVO || Not Available || LENOVO || 7BET49WW (1.09 ) || 07/27/2006&lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;Handle 0x0026, DMI type 11, 5 byte   String 1: IBM ThinkPad Embedded Controller -[7BHT34WW-1.07    ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| {{X60s}} 1704-56G&lt;br /&gt;
|| LENOVO || 170456G || ThinkPad X60s || LENOVO || 170456G || Not Available || LENOVO || Not Available || LENOVO || 7BET43WW (1.03 ) || 02/13/2006 &lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;Handle 0x0026, DMI type 11, 5 bytes  String 1: IBM ThinkPad Embedded Controller -[7BHT28WW-1.01    ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| {{X60s}} 1704-5UG&lt;br /&gt;
|| LENOVO || 17045UG || ThinkPad X60s || LENOVO || 17045UG || Not Available || LENOVO || Not Available || LENOVO || 7BETD2WW (2.13 ) || 08/10/2007&lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;Handle 0x0026, DMI type 11, 5 byte   String 1: IBM ThinkPad Embedded Controller -[7BHT40WW-1.13    ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| {{X60t}} 6365-CTO&lt;br /&gt;
|| LENOVO || 6365CTO || ThinkPad X60 Tablet || LENOVO || 6365CTO || Not Available || LENOVO || Not Available || LENOVO || 7JET25WW (1.10 ) || 08/17/2007 &lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;Handle 0x0023, DMI type 11, 5 byte   String 1: IBM ThinkPad Embedded Controller -[7JHT13WW-1.04    ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| {{X60t}} 6363-J3G&lt;br /&gt;
|| LENOVO || 6363J3G || ThinkPad X60 Tablet || LENOVO || 6363J3G || Not Available || LENOVO || Not Available || LENOVO || 7JET28WW (1.13 ) || 03/31/2008&lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;Handle 0x0023, DMI type 11, 5 byte   String 1: IBM ThinkPad Embedded Controller -[7JHT13WW-1.04    ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|| A mean bitch to set up, nothing really worked out of the box :(&lt;br /&gt;
|-&lt;br /&gt;
| {{X60t}} 6363A7G&lt;br /&gt;
|| LENOVO || 6363A7G || ThinkPad X60 Tablet || LENOVO || 6363A7G || Not Available || LENOVO || Not Available || LENOVO || 7JET19WW (1.04 ) || 12/14/2006 &lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;Handle 0x0023, DMI type 11, 5 byte   String 1: IBM ThinkPad Embedded Controller -[7JHT12WW-1.03    ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| {{X61}} 7675-4KU&lt;br /&gt;
|| LENOVO || 76754KU || ThinkPad X61 || LENOVO || 76754KU || Not Available || LENOVO || Not Available || LENOVO || 7NET30WW (1.11 ) || 11/15/2007&lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;Handle 0x001F, DMI type 11, 5 byte   String 1: IBM ThinkPad Embedded Controller -[7MHT24WW-1.02    ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| {{X61}} 7675-7KU&lt;br /&gt;
|| LENOVO || 76757KU || ThinkPad X61 || LENOVO || 76757KU || Not Available || LENOVO || Not Available || LENOVO || 7NETB1WW (2.11 ) || 03/24/2008&lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;Handle 0x001F, DMI type 11, 5 bytes   IBM ThinkPad Embedded Controller -[7MHT25WW-1.03    ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| {{X61t}} 7762-95G&lt;br /&gt;
|| LENOVO || 776295G || ThinkPad X61 Tablet || LENOVO || 776295G || Not Available || LENOVO || Not Available || LENOVO || 7SET22WW (1.08 ) || 11/15/2007 &lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;Handle 0x001F, DMI type 11, 5 byte	String 1: IBM ThinkPad Embedded Controller -[7RHT16WW-1.02    ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| {{X61t}} 7764-CTO&lt;br /&gt;
|| LENOVO || 7764CTO || ThinkPad X61 Tablet || LENOVO || 7764CTO || Not Available || LENOVO || Not Available || LENOVO || 7SET18WW (1.04 ) || 07/03/2007&lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;Handle 0x001F, DMI type 11, 5 byte   String 1: IBM ThinkPad Embedded Controller -[7RHT16WW-1.02    ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| {{X200s}}&lt;br /&gt;
|| LENOVO || 74695HG || ThinkPad X200s || LENOVO || 74695HG || Not Available || LENOVO || Not Available || LENOVO || 6DET33WW (1.10 ) || 10/27/2008 &lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;Handle 0x001D, DMI type 11, 5 byte	String 1: IBM ThinkPad Embedded Controller -[7XHT21WW-1.03    ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| {{X200}} Tablet 7449-F9U&lt;br /&gt;
|| LENOVO || 7449F9U || ThinkPad X200 Tablet || LENOVO || 7449F9U || Not Available || LENOVO || Not Available || LENOVO || 7WET24WW (1.02 ) || 09/09/2008 &lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;Handle 0x001D, DMI type 11, 5 byte	String 1: IBM ThinkPad Embedded Controller -[7WHT14WW-1.01    ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| {{X300}} 6478-14G&lt;br /&gt;
|| LENOVO || 647814G || ThinkPad X300 || LENOVO || 647814G || Not Available || LENOVO || Not Available || LENOVO || 7TET23WW (1.00d) || 01/17/2008 &lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;Handle 0x0022, DMI type 11, 5 byte	String 1: IBM ThinkPad Embedded Controller -[7THT15WW-1.00c   ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| {{X300}} 6478-18M&lt;br /&gt;
|| LENOVO || 647818M || ThinkPad X300 || LENOVO || 647818M || Not Available || LENOVO || Not Available || LENOVO || 7TET26WW (1.02a) || 02/27/2008 &lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;Handle 0x0022, DMI type 11, 5 byte	String 1: IBM ThinkPad Embedded Controller -[7THT15WW-1.00c   ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| {{X301}} 2777-CTO&lt;br /&gt;
|| LENOVO || 2777CTO || ThinkPad X301 || LENOVO || 2777CTO || Not Available || LENOVO || Not Available || LENOVO || 6EET19WW (1.00g) || 07/30/2008 &lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;Handle 0x0028, DMI type 11, 5 byte	String 1: IBM ThinkPad Embedded Controller -[6EHT07WW-1.00b   ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| {{X301}} 2777-CTO&lt;br /&gt;
|| LENOVO || 2777CTO || ThinkPad X301 || LENOVO || 2777CTO || Not Available || LENOVO || Not Available || LENOVO || 6EET21WW (1.02 ) || 10/09/2008 &lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;Handle 0x0028, DMI type 11, 5 byte	String 1: IBM ThinkPad Embedded Controller -[6EHT09WW-1.02    ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|| &lt;br /&gt;
|- &lt;br /&gt;
! colspan=14 style=&amp;quot;text-align:center;background:#efefef;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
====Z series====&lt;br /&gt;
|-&lt;br /&gt;
| {{Z60t}} 2511-FEU&lt;br /&gt;
|| IBM || 2511FEU || ThinkPad Z60t || IBM || 2511FEU || Not Available || IBM || Not Available || IBM || 77ET42WW (1.05 ) || 11/19/2005&lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;     String 1: IBM ThinkPad Embedded Controller -[77HT28WW-1.02    ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| {{Z60t}} 2511-FFG&lt;br /&gt;
|| IBM || 2511FFG || ThinkPad Z60t || IBM || 2511FFG || Not Available || IBM || Not Available || IBM || 77ET64WW (1.24 ) || 02/27/2007 &lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;Handle 0x0029, DMI type 11, 5 byte   String 1: IBM ThinkPad Embedded Controller -[77HT57WW-1.17    ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|- &lt;br /&gt;
| {{Z60m}} 2529-ETG&lt;br /&gt;
|| IBM || 2529ETG || ThinkPad Z60m || IBM || 2529ETG || Not Available || IBM || Not Available || IBM || 77ET59WW (1.19 ) || 04/24/2006&lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;Handle 0x0029, DMI type 11, 5 bytes  String 1: IBM ThinkPad Embedded Controller -[77HT54WW-1.14    ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| {{Z60m}} 2529-ETG&lt;br /&gt;
|| IBM || 2529ETG || ThinkPad Z60m || IBM || 2529ETG || Not Available || IBM || Not Available || IBM || 77ET64WW (1.24 ) || 02/27/2007 &lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;Handle 0x0029, DMI type 11, 5 byte	String 1: IBM ThinkPad Embedded Controller -[77HT58WW-1.18    ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| {{Z60m}} 2529-FBG&lt;br /&gt;
|| IBM || 2529FBG || ThinkPad Z60m || IBM || 2529FBG || Not Available || IBM || Not Available || IBM || 77ET62WW (1.22 ) || 11/21/2006 &lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;Handle 0x0029, DMI type 11, 5 byte   String 1: IBM ThinkPad Embedded Controller -[77HT58WW-1.18    ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|- &lt;br /&gt;
| {{Z60m}} 2529-FKG&lt;br /&gt;
|| IBM || 2529FKG || ThinkPad Z60m || IBM || 2529FKG || Not Available || IBM || Not Available || IBM || 77ET42WW (1.05 ) || 11/19/2005&lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;String 1: IBM ThinkPad Embedded Controller -[77HT28WW-1.02    ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| {{Z61m}} 9453-A11&lt;br /&gt;
|| LENOVO || 9453A11 || ThinkPad Z61m || LENOVO || 9453A11 || Not Available || LENOVO || Not Available || LENOVO || 7FET48WW (1.08 ) || 05/26/2006&lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;String 1: IBM ThinkPad Embedded Controller -[7FHT21WW-1.03    ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| {{Z61m}} 9452-8QG&lt;br /&gt;
|| LENOVO || 94528QG || ThinkPad Z61m || LENOVO || 94528QG || Not Available || LENOVO || Not Available || LENOVO || 7FETA4WW (2.22 ) || 10/19/2007&lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;Handle 0x0026, DMI type 11, 5 byte   String 1: IBM ThinkPad Embedded Controller -[7FHT26WW-1.08    ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|| &lt;br /&gt;
|- &lt;br /&gt;
| {{Z61m}} 9452-W5Q&lt;br /&gt;
|| LENOVO || 9452W5Q || ThinkPad Z61m || LENOVO || 9452W5Q || Not Available || LENOVO || Not Available || LENOVO || 7FETA6WW (2.24 ) || 03/13/2008&lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;Handle 0x0026, DMI type 11, 5 byte   String 1: IBM ThinkPad Embedded Controller -[7FHT26WW-1.08    ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| {{Z61m}} 9543-A11&lt;br /&gt;
|| LENOVO || 9453A11 || ThinkPad Z61m || LENOVO || 9453A11 || Not Available || LENOVO || Not Available || LENOVO || 7FET53WW (1.13 ) || 07/27/2006&lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;Handle 0x0026, DMI type 11, 5 byte   String 1: IBM ThinkPad Embedded Controller -[7FHT23WW-1.05    ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| {{Z61m}} 9543-A11&lt;br /&gt;
|| LENOVO || 9453A11 || ThinkPad Z61m || LENOVO || 9453A11 || Not Available || LENOVO || Not Available || LENOVO || 7FET93WW (2.11 ) || 11/10/2006&lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;Handle 0x0026, DMI type 11, 5 byte   String 1: IBM ThinkPad Embedded Controller -[7FHT26WW-1.08    ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| {{Z61m}} 9453-A11&lt;br /&gt;
|| LENOVO || 9453A11 || ThinkPad Z61m || LENOVO || 9453A11 || Not Available || LENOVO || Not Available || LENOVO || 7FET53WW (1.13 ) || 07/27/2006&lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;Handle 0x0026, DMI type 11, 5 byte   String 1: IBM ThinkPad Embedded Controller -[7FHT23WW-1.05    ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| {{Z61p}} 9453-A12&lt;br /&gt;
|| LENOVO || 9453A12 || ThinkPad Z61p || LENOVO || 9453A12 || Not Available || LENOVO || Not Available || LENOVO || 7FET45WW (1.05 ) || 04/20/2006&lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;Handle 0x0026, DMI type 11, 5 bytes  String 1: IBM ThinkPad Embedded Controller -[7FHT19WW-1.01    ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| {{Z61p}} 9450-3AU&lt;br /&gt;
|| LENOVO || 94503AU || ThinkPad Z61p || LENOVO || 94503AU || Not Available || LENOVO || Not Available || LENOVO || 7FET53WW (1.13 ) || 07/27/2006&lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;Handle 0x0026, DMI type 11, 5 byte   String 1: IBM ThinkPad Embedded Controller -[7FHT23WW-1.05    ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| {{Z61t}} 9440-2CU&lt;br /&gt;
|| LENOVO || 94402CU || ThinkPad Z61t || LENOVO || 94402CU || Not Available || LENOVO || Not Available || LENOVO || 7FET50WW (1.10 ) || 06/20/2006 &lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;Handle 0x0026, DMI type 11, 5 byte   String 1: IBM ThinkPad Embedded Controller -[7FHT22WW-1.04    ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| {{Z61t}} 9443-4GG&lt;br /&gt;
|| LENOVO || 94434GG || ThinkPad Z61t || LENOVO || 94434GG || Not Available || LENOVO || Not Available || LENOVO || 7FET96WW (2.14 ) || 12/25/2006 &lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;Handle 0x0026, DMI type 11, 5 byte   String 1: IBM ThinkPad Embedded Controller -[7FHT26WW-1.08    ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| {{Z61t}} 9440-CTO&lt;br /&gt;
|| LENOVO || 9440CTO || ThinkPad Z61t || LENOVO || 9440CTO || Not Available || LENOVO || Not Available || LENOVO || 7FET99WW (2.17 ) || 04/17/2007 &lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;Handle 0x0026, DMI type 11, 5 byte	String 1: IBM ThinkPad Embedded Controller -[7FHT26WW-1.08    ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| {{Z61t}} 9440-CTO&lt;br /&gt;
|| LENOVO || 9440CTO || ThinkPad Z61t || LENOVO || 9440CTO || Not Available || LENOVO || Not Available || LENOVO || 7FETA0WW (2.18 ) || 05/17/2007 &lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;Handle 0x0026, DMI type 11, 5 byte	String 1: IBM ThinkPad Embedded Controller -[7FHT26WW-1.08    ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| {{Z61t}} 9440-CTO&lt;br /&gt;
|| LENOVO || 9440CTO || ThinkPad Z61t || LENOVO || 9440CTO || Not Available || LENOVO || Not Available || LENOVO || 7FETA7WW (2.25 ) || 06/03/2008 &lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;Handle 0x0026, DMI type 11, 5 byte	String 1: IBM ThinkPad Embedded Controller -[7FHT26WW-1.08    ]-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
! colspan=14 style=&amp;quot;text-align:center;background:#efefef;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
====Lenovo 3000 series====&lt;br /&gt;
|-&lt;br /&gt;
| [[:Category:Lenovo 3000| Lenovo 3000]] N200 TY2BAFR&lt;br /&gt;
|| LENOVO || 0769BAG || 3000 N200 || LENOVO || IEL10 || REFERENCE || No Enclosure || N/A || LENOVO || 68ET24WW || 08/15/2007 &lt;br /&gt;
|| &amp;lt;nowiki&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|| {{WARN|Non-ThinkPad EC firmware and BIOS}}&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Adding entries==&lt;br /&gt;
&lt;br /&gt;
Click the &amp;quot;Edit&amp;quot; link on the appropriate series above and add an entry of the following form:&lt;br /&gt;
:&amp;lt;tt&amp;gt;| &amp;lt;/tt&amp;gt;&amp;lt;i&amp;gt;description of your model&amp;lt;/i&amp;gt;&lt;br /&gt;
:&amp;lt;i&amp;gt;data line 1&amp;lt;/i&amp;gt;&lt;br /&gt;
:&amp;lt;i&amp;gt;data line 2&amp;lt;/i&amp;gt;&lt;br /&gt;
:&amp;lt;tt&amp;gt;||&amp;lt;/tt&amp;gt;&lt;br /&gt;
:&amp;lt;tt&amp;gt;|-&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where the two data lines are generated by the following &amp;lt;tt&amp;gt;bash&amp;lt;/tt&amp;gt; command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
for X in system-{manufacturer,product-name,version} \&lt;br /&gt;
  baseboard-{manufacturer,product-name,version} \&lt;br /&gt;
  chassis-{manufacturer,version} bios-{vendor,version,release-date}; do \&lt;br /&gt;
  echo -n &amp;quot;|| `sudo /usr/sbin/dmidecode -s $X` &amp;quot;; done; \&lt;br /&gt;
  sudo /usr/sbin/dmidecode | perl -0777 -ne \&lt;br /&gt;
  'm/\n(.*).\n.*\n(.*Embedded Cont.*)\n/i; print &amp;quot;\n|| &amp;lt;nowiki&amp;gt;&amp;lt;&amp;lt;/nowiki&amp;gt;nowiki&amp;gt;$1$2&amp;lt;/nowiki&amp;gt;\n&amp;quot;'&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you can, please also test [[tp_smapi]] and update its [[tp_smapi#Model-specific_status|model-specific status table]].&lt;br /&gt;
&lt;br /&gt;
==Software using ThinkPad DMI IDs==&lt;br /&gt;
* [[HDAPS]] driver whitelist&lt;br /&gt;
* [[tp_smapi]] driver whitelist&lt;br /&gt;
* [[ibm-acpi]]/thinkpad-acpi driver quirk list&lt;/div&gt;</summary>
		<author><name>Phoenix84</name></author>
		
	</entry>
</feed>