<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN" "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
<article>

<articleinfo>
	<title>Debian GNU/Linux on the IBM Thinkpad G40</title>
	<author>
		<firstname>David</firstname>
		<surname>Härdeman</surname>
		<email>david@2gen.com</email>
	</author>
</articleinfo>

<para>
	<mediaobject>
		<imageobject>
			<imagedata fileref="../../images/documents/debian.svg" format="SVG" align="center"/>
		</imageobject>
		<imageobject>
			<imagedata fileref="../../images/documents/debian.pdf" format="EPS" align="center"/>
		</imageobject>
		<imageobject>
			<imagedata fileref="../../images/documents/debian.png" format="PNG" align="center"/>
		</imageobject>
	</mediaobject>
</para>

<section id="introduction">
	<title>Introduction</title>

	<para>
This is an updated version of this page if you are for some reason looking for the old version, drop me a note.
	</para>
	<para>
		I had an <acronym><trademark>IBM</trademark></acronym> <productname>ThinkPad 390E</productname> previously. After a few years of faithful service, being carried back and forth to different job sites and enduring abuse such as falling off a bike, coffee in the keyboard and other small incidents, it was a miracle it worked at all. However, it's age was beginning to show. The computer felt very, very slow on occasions (300MHz <productname>Pentium II</productname>), and the hard drive (4<acronym>GB</acronym>) was really cramped with two <acronym>OS</acronym>'s, applications and personal data. Add to that a keyboard where the <keycap>X</keycap> key wasn't always working, the battery was dead (meaning the computer always needed a power cable connection), a screen that varied wildly in intensity and a <acronym>CD-ROM</acronym> that refused to spit out the <acronym>CD</acronym> sometimes. It all added up to the decision that it was about time to get a new laptop.
	</para>
	<para>
		Said and done, I decided that I wanted a ThinkPad since the previous one had been very faithful to me and they are virtually indestructible. I chose the G40 series because it offered a good price/performance ratio and included most of the hardware which I required. The G40's are equipped with a regular (non-mobile edition) Pentium 4 processor which means higher energy consumption and greater cooling requirements, but a lower price tag. The laptop has an air intake on top and one on the bottom and an exhaust on the side. It also has a track-point (essentially a small one-finger joystick), a feature which I have grown fond of while using my previous laptop (enough so to find touchpads quite awkward).
	</para>
	<para>
		I am running Debian Unstable (and Windows XP) on this laptop right now. Since I had to spend some time getting everything up and running, I decided to document what I did on this page both for the benefit of others and as a support for my own memory. I generally expect the reader to be used to basic concepts such as installing modules, installing software etc. If not, I suggest you read up on these issues first.
	</para>
	<para>
		The kernel I'm currently running is the latest 2.6.X kernel (2.6.11 at the time of writing) and the <filename>.config</filename> file can be found in the <link linkend='files'>files section</link> of this page. It's a pretty modular config that works well for me. Now, let's get on with the interesting stuff...
	</para>
</section>

<section id='hardware'>
	<title>Hardware</title>
	<para>
		This is a list of the hardware that can be found in my Thinkpad G40, there are some variations between different models, i.e. some G40's have builtin WiFi cards and the processor speed and memory size is customizable, but the differences shouldn't be huge.
	</para>
	<itemizedlist>
		<listitem><para>2.8 GHz Intel Pentium 4 CPU</para></listitem>
		<listitem><para>256MB RAM<footnote><para>I've since upgraded to 1GB of memory</para></footnote></para></listitem>
		<listitem><para>Intel 82852/855GM graphics chipset</para></listitem>
		<listitem><para>15&quot; internal LCD screen and an external VGA connector</para></listitem>
		<listitem><para>Two cardbus slots driven by a TI PCI1410 controller</para></listitem>
		<listitem><para>Broadcom BCM5901 100Mbps NIC</para></listitem>
		<listitem><para>Integrated 1.44&quot; FDD</para></listitem>
		<listitem><para>One 37GB ATA HD controlled by an Intel ICH4 chipset</para></listitem>
		<listitem><para>Integrated DVD/CD-RW combination</para></listitem>
		<listitem><para>Intel AC97 Modem</para></listitem>
		<listitem><para>Intel AC97 Audio</para></listitem>
		<listitem><para>Four USB 2.0 ports</para></listitem>
		<listitem><para>One LPT port and one PS/2 port for an external mouse <emphasis>or</emphasis> keyboard</para></listitem>
	</itemizedlist>
	<para>
		This is the output from <application>lspci</application>:
	</para>
	<screen>
00:00.0 Host bridge: Intel Corp. 82852/855GM Host Bridge (rev 01)
00:00.1 System peripheral: Intel Corp.: Unknown device 3584 (rev 01)
00:00.3 System peripheral: Intel Corp.: Unknown device 3585 (rev 01)
00:02.0 VGA compatible controller: Intel Corp. 82852/855GM Integrated Graphics Device (rev 01)
00:02.1 Display controller: Intel Corp. 82852/855GM Integrated Graphics Device (rev 01)
00:1d.0 USB Controller: Intel Corp. 82801DB USB (Hub #1) (rev 01)
00:1d.1 USB Controller: Intel Corp. 82801DB USB (Hub #2) (rev 01)
00:1d.2 USB Controller: Intel Corp. 82801DB USB (Hub #3) (rev 01)
00:1d.7 USB Controller: Intel Corp. 82801DB USB2 (rev 01)
00:1e.0 PCI bridge: Intel Corp. 82801BAM/CAM PCI Bridge (rev 81)
00:1f.0 ISA bridge: Intel Corp. 82801DBM LPC Interface Controller (rev 01)
00:1f.1 IDE interface: Intel Corp. 82801DBM Ultra ATA Storage Controller (rev 01)
00:1f.3 SMBus: Intel Corp. 82801DB/DBM SMBus Controller (rev 01)
00:1f.5 Multimedia audio controller: Intel Corp. 82801DB AC'97 Audio Controller (rev 01)
00:1f.6 Modem: Intel Corp. 82801DB AC'97 Modem Controller (rev 01)
02:00.0 Ethernet controller: Broadcom Corporation: Unknown device 170d (rev 01)
02:01.0 CardBus bridge: Texas Instruments PCI1410 PC card Cardbus Controller (rev 02)
	</screen>
</section>

<section id='acpi'>
	<title>ACPI</title>
	
	<para>
		ACPI is working out of the box on kernels 2.4.23 and 2.6.0-test10 or later which means quieter operation, working suspend-to-ram (see the <link linkend="suspend">suspend section</link> for details), battery status information and much more.
	</para>
</section>

<section id='dri'>
	<title>DRI</title>
	<para>
		DRI, or Direct Rendering Infrastructure, is a technique to speed up access to graphics hardware in order to benefit bandwidth-hungry 3D applications under XFree86. In order to get this working on the 855GM	chipset a few things are needed. The kernel needs DRM (Direct Rendering Manager) support for the chipset and the X server needs to be set up to take advantage of this.
	</para>
	<para>
		First of all, the kernel. Both recent 2.4 and 2.6 kernels have DRM support for the 855GM chipset using the <filename>i830</filename> driver (note that AGP support needs to be enabled in the kernel to be able to use this driver). Additionally, the 2.6 kernel has the <filename>i915</filename> driver, which is used by more recent X servers, such as the latest X.Org server (make sure you use the right one as DRI might silently fail otherwise). In my case, I still use XFree86 4.3.0, which expects the <filename>i830</filename> driver. 
	</para>
	<para>
		Second of all, XFree86. You need 4.3.0 or later (which of course includes the X.Org server). Then configure the X server to use the <filename>i810</filename> module, add glx and dri modules as well as a DRI section to the config file. A link to my XF86Config-4 file can be found in the <link linkend='files'>files section</link> (you probably want to change the keyboard to be non-swedish), it also shows how to support external mice and the internal track-point simultaneously.
	</para>
	<warning>
		<para>
		There were some occasional errors when using the <filename>i830</filename> kernel driver with earlier 2.4 kernels (verified with kernel 2.4.21). When using DRI with this module, a switch from X to console mode would occasionally kill X and display an error message similar to this one: <computeroutput>[drm:i830_wait_ring] *ERROR* space: 65520 wanted 65528, [drm:i830_wait_ring] *ERROR lockup</computeroutput>. The errors have been fixed in later kernels (I do not know exactly which), so make sure to run a recent version.
		</para>
	</warning>
	<para>
		Once the kernel and XFree86 are set up, you should be good to go. Start the X server, open an xterm and type <command>glxinfo | grep rendering</command>. Hopefully you will get a positive message stating that direct rendering is enabled. If you are having troubles getting DRI to work, I can only refer you to the documentation on the <ulink url="http://dri.sourceforge.net/">DRI web site</ulink>.
	</para>
	<para>
		These are the (not very impressive) results of running glxgears with DRI enabled:
	</para>
	<screen>
(david@hansolo:~)$ glxinfo | grep rendering
direct rendering: Yes
(david@hansolo:~)$ glxgears /* Windowed mode */
2657 frames in 5.0 seconds = 531.400 FPS
2791 frames in 5.0 seconds = 558.200 FPS
2792 frames in 5.0 seconds = 558.400 FPS
(david@hansolo:~)$ glxgears /* Full screen mode */
378 frames in 5.0 seconds = 75.600 FPS
378 frames in 5.0 seconds = 75.600 FPS
378 frames in 5.0 seconds = 75.600 FPS
	</screen>
	<caution>
		<para>
		I've been told that in order to actually get any hardware acceleration using DRI, you need to be running X with a display depth of 16 bits, not 24 as you'll get with the X config file provided below in the <link linkend='files'>files section</link>.
		</para>
	</caution>
	<para>
		Under Windows XP it is possible to use the internal LCD in combination with an external CRT in dual-head mode. With dual-head I mean &quot;desktop-of-twice-the-size&quot; and not having duplicate views of the same thing. This feature is unfortunately not supported in XFree86 though, the log files mention &quot;pipe A&quot; and &quot;pipe B&quot; but they're not actually used for anything. Using the keyboard, one can switch between internal, external or &quot;copied-to-both&quot;, but not dual-head. It's been indicated to me on the XFree86	mailing list that it's not supported right now and it's not known if it ever will. The discussion on the X.Org mailing list has been a bit more positive so far, but it still remains to be seen whether any progress will be made (details can be found in the <ulink url="https://bugs.freedesktop.org/show_bug.cgi?id=1064">X.Org bug tracking system</ulink>).
	</para>
	<para>
		In 2.4 kernels there is a specific frame-buffer driver for the 855GM chipset of the G40 laptop. This frame-buffer driver is not present in the 2.6 kernel and after asking David Dawes (the author of the driver) I got the reply that he does not have the access to the hardware anymore and that he has heard no interest from someone else to port the 2.4 driver to 2.6. Thus it seems like 855GM owners will be stuck with the VESA frame-buffer driver for now.
	</para>
	<para>
		It should also be noted that Intel has made a driver of their own which might improve performance and enable more features of the card. I haven't tried it and their website creates horrible URLs so if you're interested, you'll have to find it yourself by searching <ulink url="http://downloadfinder.intel.com/">their website</ulink> (thanks to Daemon Bernstein for the tip).
	</para>

</section>

<section id='usb'>
	<title>USB</title>
	<para>
		This is too easy. <command>modprobe uhci-hcd; modprobe ehci-hcd</command>. Works just fine. I've tried around ten different USB devices and all work flawlessly. Note that the <filename>uhci-hcd</filename> module is named <filename>hcd-uhci</filename> in kernel 2.4.
	</para>
</section>

<section id='storage'>
	<title>Storage</title>
	<para>
		The computer came pre-configured with a large FAT32 partition. This is where Windows XP is installed and the first time Windows XP is booted it will spend some time converting this to NTFS. The second partition is used for &quot;system restore&quot;, meaning that the first partition is wiped and Windows XP reinstalled. A cute feature that IBM has devised in order to avoid having to ship CD-ROM's with the OS.
	</para>
	<para>
		I promptly wiped both partitions and created new partitions for Windows XP and Linux. I could have resized the partitions using Partition Magic, but the install of Windows XP that the computer came with was so littered with utility programs and other stuff that I would never use that I opted for a clean reinstall instead. I've also heard from others that you can receive &quot;Rescue CD's&quot; by calling IBM customer support and telling them that the system restore partition is damaged in some way.
	</para>
	<warning>
		<para>
		If you do wipe the &quot;system restore&quot; partition (or break/replace the HD), you <emphasis>cannot</emphasis> use the	Windows XP serial printed on the bottom of the machine to reinstall Windows XP from normal installation CD's. Only the Windows XP install CD's provided by IBM works with the serial number. If your machine is still under warranty, you can get the CD's for free, but if it is no longer under warranty, you will have the pleasure of paying cirka 55 EUR in order to get the install media for an OS you've already paid for. You've been warned.
		</para>
	</warning>
	<para>
		The CD-RW/DVD combination works without a problem. I've tried watching DVD's using <application>mplayer</application> or <application>xine</application> and burning some CD-R:s using <application>xcdroast</application>. No problems at all.
	</para>
</section>

<section id='audio'>
	<title>Audio</title>
	<para>
		Very easy, I used the ALSA driver in the 2.6 kernels. The following command <command>modprobe snd_intel8x0; modprobe snd_mixer_oss; modprobe snd_pcm_oss</command> should be all you need. You might also want to install the Debian ALSA packages such as <application>alsa-base</application> which does some nice things for you like make sure that <application>hotplug</application> doesn't load oss drivers for the card. If you want to use the volume up/down/mute buttons, see the <link linkend='keyboard'>keyboard section</link>.
	</para>
</section>

<section id='suspend'>
	<title>Suspend</title>
	<para>
		Both suspend-to-ram (S3) and suspend-to-disk (S4) works with a recent kernel (tested with 2.6.10).
	</para>
	<para>
		For suspend-to-ram, the only problem to overcome was that the monitor remains powered off after the computer resumes from a suspension. This is easilly solved by installing the <application>vbetool</application> and <application>acpid</application> packages, and some scripting. I've personally set things up so that closing the lid of the computer triggers a suspend-to-ram.
	</para>
	<para>
		The script which accomplishes this is split into two parts, the first is placed at <filename>/etc/acpi/events/lidbtn</filename> with the following contents:
	</para>
	<example>
	  <title>Specifying to acpid which script to run when the lid is closed</title>
	  <programlisting><textobject><textdata fileref="../../files/thinkpad/lidbtn"/></textobject></programlisting>
	</example>
	<para>
		This means that when the lid is closed, <application>acpid</application> executes the <filename>/etc/acpi/lidbtn.sh</filename> script which performs the following:
	</para>
	<example>
	  <title>/etc/acpi/lidbtn.sh</title>
	  <programlisting><textobject><textdata fileref="../../files/thinkpad/lidbtn.sh"/></textobject></programlisting>
	</example>
	<para>
		This script changes to a text console, as required by <application>vbetool</application>, saves the current state of the video card to <filename>/etc/acpi/vbestate</filename> and then continues to suspend. On resume, which happends when the computer is opened again and the "Fn" key is pressed, the script continues executing where it left off, restores the vbe state, ensures that the system clock is correct (it seems to drift when suspended) and then switches back to the console where X is usually running.
	</para>
	<para>
		Suspend-to-disk needs a similar setup to that of suspend-to-ram, first you need to make sure that the kernel is compiled with swsusp support (swsusp2 also seems to be working fine, but I haven't spent lots of time with it as swsusp does everything I need). Then install <application>acpid</application> and create the file <filename>/etc/acpi/events/sleepbtn</filename> as follows:
	</para>
	<example>
	  <title>Specifying to acpid which script to run when the sleep (Fn + F4) button is pressed</title>
	  <programlisting><textobject><textdata fileref="../../files/thinkpad/sleepbtn"/></textobject></programlisting>
	</example>
	<para>
		This means that when the sleep button <keycombo action='simul'><keycap>Fn</keycap><keycap>F4</keycap></keycombo> is pressed, <application>acpid</application> executes the <filename>/etc/acpi/sleepbtn.sh</filename> script which has the following contents:
	</para>
	<example>
	  <title>/etc/acpi/sleepbtn.sh</title>
	  <programlisting><textobject><textdata fileref="../../files/thinkpad/sleepbtn.sh"/></textobject></programlisting>
	</example>
	<para>
		This script unloads any troublesome modules (in my case, a binary-only WLAN driver), and then performs a suspend-to-disk. Before it all works, you must also make sure that you have a swap partition (not file), and that you pass the <parameter>resume</parameter>=<replaceable>partition</replaceable> command to your kernel (eg. <parameter>resume</parameter>=<filename class='devicefile'>/dev/hda2</filename>) every time you boot (which you probably want to do by editing the config files for <application>LILO</application> or <application>GRUB</application>). Once this is all complete, and you've rebooted with the correct kernel parameters, pressing <keycombo action='simul'><keycap>Fn</keycap><keycap>F4</keycap></keycombo> should suspend the computer to disk.
	</para>
	<para>
		I've added links to the four files which are needed under <filename class='directory'>/etc/acpi</filename> below so that you can download them.
	</para>
	<para>
		Further, you might want to install the <application>laptop-mode-tools</application> package to have the <application>laptop-mode</application> mode of more recent kernels automatically enabled when you are on battery power (depending on how you configure it in <filename>/etc/laptop-mode/laptop-mode.conf</filename>). <application>laptop-mode</application> can keep your harddrive spun down for as much as 10 minutes at a time, saving writes in memory, and then writing it out to disc all in one go, which should conserve power (at the risk of losing more data upon a crash). See the documentation of the package, and the comments in the config file for more details.
	</para>
	<para>
		Jean Sébastien reported that the <application>vbetool</application> trick doesn't work reliably with DRI and that all problems can be avoided by using <parameter>acpi_sleep</parameter>=<literal>s3_bios</literal> as	a boot parameter instead.
	</para>
</section>

<section id='network'>
	<title>Network</title>
	<para>
		When I first got the computer, the <filename>tg3</filename> driver included in the 2.4/2.6 kernels did not work with the integrated Broadcom 5901 NIC, which meant that I had to use the driver available from <ulink url="http://www.broadcom.com/support/downloaddrivers.php">Broadcom's website</ulink>. I was never quite happy with this situation though, it's always a hassle to have yet another external dependency to remember when compiling a new kernel and the Broadcom driver module was almost 75% larger than the in-kernel one which made me a bit uneasy.
	</para>
	<para>
		Fortunately, as kernel development continued, the <filename>tg3</filename> driver improved, and with recent kernels (verified with 2.6.10), the integrated NIC works beautifully.
	</para>
	<para>
		Some versions of the G40/G41 come pre-equipped with an integrated WLAN card. It is based on an Atheros chipset so you will have to use the proprietary <ulink url="http://madwifi.org/">madwifi driver</ulink> if you have one of these models (ndiswrapper probably works as well). Thanks to &quot;rv&quot; for the tip.
	</para>
</section>

<section id='keyboard'>
	<title>Keyboard</title>
	<para>
		Some functions can be accessed using the <keycap>Fn</keycap> key. Screen brightness can be controlled using <keycombo action='simul'><keycap>Fn</keycap><keycap>Home</keycap></keycombo> and <keycombo action='simul'><keycap>Fn</keycap><keycap>End</keycap></keycombo>. Internal/External/Both displays can be cycled trough using <keycombo action='simul'><keycap>Fn</keycap><keycap>F7</keycap></keycombo>. Those combinations work without any extra effort (though the tpb package below adds on-screen-display support for the brightness level). <keycombo action='simul'><keycap>Fn</keycap><keycap>F4</keycap></keycombo>, lid close and the power button are reported as acpi events (which can be acted upon using acpid as detailed in the <link linkend='suspend'>suspend section</link>).
	</para>
	<para>
		Additionally there are two keys located by the keypad, tentatively called forward and backward. These keys generate regular keyboard scancodes, so they can be assigned to actions using the regular keyboard shortcuts application under GNOME (and I assume there is something similar for KDE).
	</para>
	<para>
		Finally, the keyboard has four non-standard buttons: &quot;Access IBM&quot; (which is the same as the &quot;Thinkpad&quot; button on some other models), volume up, volume down and mute. The buttons can be handled by including nvram support in the kernel and installing the <application>tpb</application> (ThinkPad Buttons) package (can also be found <ulink url="http://savannah.nongnu.org/projects/tpb/">here</ulink> if your distribution doesn't carry it). Edit <filename>/etc/tpdrc</filename> to your liking and everything should be good to go. Audio and brightness should now be tunable using special keys and the changes should also be displayed on screen in X using the libosd package.
	</para>
</section>

<section id='modem'>
	<title>Modem</title>
	<para>
		While I've never used the internal modem myself, and probably never will, I have received confirmation from &quot;rv&quot; &lt;herve add-at-sign-here hawaii dot edu&gt; that the modem does work with version 2.9.2 (and presumably later) of the <ulink url="http://linmodems.technion.ac.il/packages/smartlink/">smartlink</ulink> driver.
	</para>
	<para>
		The following sites might also be interesting: First of all, the <ulink url="http://linmodems.technion.ac.il/">Linmodems homepage</ulink> which, among other things, hosts the <ulink url="http://linmodems.technion.ac.il/packages/smartlink/">Smartlink</ulink> driver. Secondly, the <ulink url="http://pctelcompdb.sourceforge.net/viewdetails.php?id_no=144">Unofficial PCTel Winmodem</ulink> website seems to give the modem two thumbs up. There are also some other end user reports <ulink url="http://seehuhn.de/comp/toshiba.html#modem">here</ulink> and <ulink url="http://www.vgcomputing.com.au/lrtecras1.html#Modem">here</ulink> that seems to report success on similar modems after some efforts.
	</para>
</section>

<section id='pcmcia'>
	<title>PCMCIA</title>
	<para>
		PCMCIA works fine most of the time, I'm using it daily with a WLAN card and I've also tried it using regular network card. The kernel module <filename>yenta_socket</filename> and the <application>pcmcia-cs</application> package (or in experimental kernels, the <application>hotplug</application> package) should do the trick.
	</para>
	<para>
		There is one gotcha though: PCMCIA fails to function if you have 1GB of RAM and use an older Linux kernel. The problem has been fixed in version 2.6.11 (see <ulink url="http://marc.theaimsgroup.com/?t=110885956400001&amp;r=1&amp;w=2">this thread</ulink> for details), so an update is strongly recommended (I haven't checked the 2.4 series).
	</para>
	<para>
		Should you have an older 2.6 kernel, and no wish to update, or a 2.4 kernel you can try either the following <ulink url="pcmcia-1gb-fix1.patch">patch</ulink> which was found by Vincenzo Belloli <email>vicky@belloli.it</email> in <ulink url="http://www.ussg.iu.edu/hypermail/linux/kernel/0306.3/0956.html">this thread</ulink>, or <ulink url="pcmcia-1gb-fix2.patch">this patch</ulink> as suggested by Peng Li <email>lipeng@cis.upenn.edu</email>.
	</para>
</section>

<section id='misc'>
	<title>Miscellaneous</title>
	<para>
		Another interesting feature is that the Intel chipset includes a hardware random number generator. To use this, load the <filename>hw_random</filename> (2.6 kernels) or <filename>i810_rng</filename> (2.4 kernels) module and (if you use udev or devfs) a character device should appear at either <filename class='devicefile'>/dev/misc/hw_random</filename> or <filename class='devicefile'>/dev/hwrng</filename>. Then install <application>rng-tools</application>, uncomment the Intel settings in <filename>/etc/default/rng-tools</filename> and restart the rng-tools daemon by running <command>/etc/init.d/rng-tools restart</command>. The rng-tools daemon should now be running, reading the random data from the proper dev file, verifying that it is indeed random and feeding it to the random pool.
	</para>
	<para>
		I've experimented a bit with cpu frequency scaling. It seems as if the only driver which works is <filename>p4_clockmod</filename>. I've tested it together with the <filename>cpufreq_ondemand</filename> governor. Unfortunately, it seems to make very little difference in energy consumption (and consequently, heat output and battery life). If you want to run it anyway, make sure that the two above modules are loaded (usually done by adding them to <filename>/etc/modules</filename>), install <ulink url="cpufreq">this script</ulink> to <filename>/etc/init.d/cpufreq</filename>, make it executable and run <command>update-rc.d cpufreq defaults 20</command>.
	</para>
</section>

<section id='files'>
	<title>Files</title>
	<itemizedlist>
		<listitem><para><ulink url="../../files/thinkpad/g40-acpi.patch">ACPI patch</ulink></para></listitem>
		<listitem><para><ulink url="../../files/thinkpad/XF86Config-4">XFree86 configuration file</ulink></para></listitem>
		<listitem><para><ulink url="../../files/thinkpad/kernel.config">Kernel .config file (used with 2.6.11)</ulink></para></listitem>
		<listitem><para><ulink url="../../files/thinkpad/pcmcia-1gb-fix1.patch">Fix for PCMCIA on systems with 1GB RAM or more</ulink></para></listitem>
		<listitem><para><ulink url="../../files/thinkpad/pcmcia-1gb-fix2.patch">Alternative fix for PCMCIA on systems with 1GB RAM or more</ulink></para></listitem>
		<listitem><para><ulink url="../../files/thinkpad/sleepbtn">ACPI sleep button config file</ulink></para></listitem>
		<listitem><para><ulink url="../../files/thinkpad/sleepbtn.sh">ACPI suspend-to-disk script</ulink></para></listitem>
		<listitem><para><ulink url="../../files/thinkpad/lidbtn">ACPI lid close config file</ulink></para></listitem>
		<listitem><para><ulink url="../../files/thinkpad/lidbtn.sh">ACPI suspend-to-ram script</ulink></para></listitem>
		<listitem><para><ulink url="../../files/thinkpad/cpufreq">cpufreq setup script</ulink></para></listitem>
	</itemizedlist>
</section>

<section id='links'>
	<title>Links</title>
	<itemizedlist>
		<listitem><para><ulink url="http://www.broadcom.com/support/downloaddrivers.php">Broadcom drivers</ulink></para></listitem>
		<listitem><para><ulink url="http://bugzilla.kernel.org/show_bug.cgi?id=1265">Bugzilla entry for ACPI problems with the G40</ulink></para></listitem>
		<listitem><para><ulink url="https://bugs.freedesktop.org/show_bug.cgi?id=1064">X.Org Bugzilla entry tracking the dualhead support</ulink></para></listitem>
		<listitem><para><ulink url="http://linmodems.technion.ac.il/">Linmodems homepage</ulink></para></listitem>
		<listitem><para><ulink url="http://seehuhn.de/comp/toshiba.html#modem">A Toshiba users workaround for the smartlink driver</ulink></para></listitem>
		<listitem><para><ulink url="http://www.vgcomputing.com.au/lrtecras1.html#Modem">Another page detailing the same workaround</ulink></para></listitem>
		<listitem><para><ulink url="http://linmodems.technion.ac.il/packages/smartlink/">The Smartlink driver</ulink></para></listitem>
		<listitem><para><ulink url="http://pctelcompdb.sourceforge.net/viewdetails.php?id_no=144">AC97 modem entry in PCTel Winmodem database</ulink></para></listitem>
		<listitem><para><ulink url="http://dri.sourceforge.net/">The DRI website</ulink></para></listitem>
		<listitem><para><ulink url="http://savannah.nongnu.org/projects/tpb/">The TPB website</ulink></para></listitem>
		<listitem><para><ulink url="http://www.ussg.iu.edu/hypermail/linux/kernel/0306.3/0956.html">A report to the LKML of problems with PCMCIA and 1GB of RAM</ulink></para></listitem>
		<listitem><para><ulink url="http://marc.theaimsgroup.com/?t=110885956400001&amp;r=1&amp;w=2">The discussion on the LKML which led to a proper fix which was added to the 2.6.11 kernel</ulink></para></listitem>
	</itemizedlist>
</section>

</article>

