<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.yobi.be/index.php?action=history&amp;feed=atom&amp;title=Laptop_Dell_Latitude_D610</id>
	<title>Laptop Dell Latitude D610 - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.yobi.be/index.php?action=history&amp;feed=atom&amp;title=Laptop_Dell_Latitude_D610"/>
	<link rel="alternate" type="text/html" href="https://wiki.yobi.be/index.php?title=Laptop_Dell_Latitude_D610&amp;action=history"/>
	<updated>2026-05-23T18:53:57Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://wiki.yobi.be/index.php?title=Laptop_Dell_Latitude_D610&amp;diff=6842&amp;oldid=prev</id>
		<title>PhilippeTeuwen: Reverted edits by Etegohy (Talk) to last revision by PhilippeTeuwen</title>
		<link rel="alternate" type="text/html" href="https://wiki.yobi.be/index.php?title=Laptop_Dell_Latitude_D610&amp;diff=6842&amp;oldid=prev"/>
		<updated>2010-11-24T20:35:03Z</updated>

		<summary type="html">&lt;p&gt;Reverted edits by &lt;a href=&quot;/index.php?title=Special:Contributions/Etegohy&quot; title=&quot;Special:Contributions/Etegohy&quot;&gt;Etegohy&lt;/a&gt; (&lt;a href=&quot;/index.php?title=User_talk:Etegohy&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;User talk:Etegohy (page does not exist)&quot;&gt;Talk&lt;/a&gt;) to last revision by &lt;a href=&quot;/index.php?title=User:PhilippeTeuwen&quot; title=&quot;User:PhilippeTeuwen&quot;&gt;PhilippeTeuwen&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Can&#039;t load revision 6842&lt;/p&gt;</summary>
		<author><name>PhilippeTeuwen</name></author>
	</entry>
	<entry>
		<id>https://wiki.yobi.be/index.php?title=Laptop_Dell_Latitude_D610&amp;diff=6684&amp;oldid=prev</id>
		<title> at 00:29, 24 November 2010</title>
		<link rel="alternate" type="text/html" href="https://wiki.yobi.be/index.php?title=Laptop_Dell_Latitude_D610&amp;diff=6684&amp;oldid=prev"/>
		<updated>2010-11-24T00:29:58Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Can&#039;t load revision 6684&lt;/p&gt;</summary>
		<author><name></name></author>
	</entry>
	<entry>
		<id>https://wiki.yobi.be/index.php?title=Laptop_Dell_Latitude_D610&amp;diff=2748&amp;oldid=prev</id>
		<title>PhilippeTeuwen: /* Step-by-step fresh install from the latest Debian netinstall CD: */</title>
		<link rel="alternate" type="text/html" href="https://wiki.yobi.be/index.php?title=Laptop_Dell_Latitude_D610&amp;diff=2748&amp;oldid=prev"/>
		<updated>2008-02-24T00:06:19Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Step-by-step fresh install from the latest Debian netinstall CD:&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 00:06, 24 February 2008&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;
  &lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 16:&lt;/td&gt;
  &lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 16:&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== Step-by-step fresh install from the latest Debian netinstall CD: ===&lt;/div&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== Step-by-step fresh install from the latest Debian netinstall CD: ===&lt;/div&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br /&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br /&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td colspan=&quot;2&quot; class=&quot;diff-empty diff-side-deleted&quot;&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;see [[Laptop Dell Latitude D610 Step-by-step]]&lt;/div&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;see LaptopDellD610StepByStep&lt;/div&gt;&lt;/td&gt;
  &lt;td colspan=&quot;2&quot; class=&quot;diff-empty diff-side-added&quot;&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br /&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br /&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== Miscellaneous notes: ===&lt;/div&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== Miscellaneous notes: ===&lt;/div&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;!-- diff cache key mediawiki-mw_:diff:1.41:old-2745:rev-2748:wikidiff2=table:1.14.1:bc2a06be --&gt;
&lt;/table&gt;</summary>
		<author><name>PhilippeTeuwen</name></author>
	</entry>
	<entry>
		<id>https://wiki.yobi.be/index.php?title=Laptop_Dell_Latitude_D610&amp;diff=2745&amp;oldid=prev</id>
		<title>PhilippeTeuwen at 00:03, 24 February 2008</title>
		<link rel="alternate" type="text/html" href="https://wiki.yobi.be/index.php?title=Laptop_Dell_Latitude_D610&amp;diff=2745&amp;oldid=prev"/>
		<updated>2008-02-24T00:03:42Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;#039;&amp;#039;Converted with [[MediaWiki#HTML-WikiConverter|HTML::WikiConverter::MediaWiki]] from my old phpwiki site&amp;#039;&amp;#039;&lt;br /&gt;
----&lt;br /&gt;
===Resources===&lt;br /&gt;
&lt;br /&gt;
* http://home.comcast.net/~canez/d610/&lt;br /&gt;
* http://jcop.homelinux.com/d610_debian.html&lt;br /&gt;
* http://gentoo-wiki.com/HARDWARE_Dell_Latitude_D610&lt;br /&gt;
* http://www.mobilityguru.com/2005/05/11/intel_915gm/index.html&lt;br /&gt;
* Latitude family: (pdf) http://ejs.is/lisalib/getfile.aspx?itemid=1209&lt;br /&gt;
* For info: [http://wiki.kernelnewbies.org/LinuxChanges kernel changes]&lt;br /&gt;
* Libata&amp;lt;br /&amp;gt;Many problems with this SATAnic stuff!&lt;br /&gt;
** http://www.kernel.org/pub/linux/kernel/people/jgarzik/libata/&lt;br /&gt;
** http://rtr.ca/dell_i9300/kernel/&lt;br /&gt;
** http://www.thinkwiki.org/wiki/Problems_with_SATA_and_Linux&lt;br /&gt;
&lt;br /&gt;
=== Step-by-step fresh install from the latest Debian netinstall CD: ===&lt;br /&gt;
&lt;br /&gt;
see LaptopDellD610StepByStep&lt;br /&gt;
&lt;br /&gt;
=== Miscellaneous notes: ===&lt;br /&gt;
&lt;br /&gt;
==== Kernel ====&lt;br /&gt;
&lt;br /&gt;
* Debian 2.6.15-1-686 with yaird version 0.0.12-3 works finally fine.&lt;br /&gt;
* When you install such kernel, you could face problems running yaird as yaird requires to be run from a 2.6 kernel and Debian 2.6.8 fails booting on this sata hardware.&amp;lt;br /&amp;gt;Try with Debian 2.6.11&amp;lt;br /&amp;gt;You can also try creating the initrd from another machine &amp;#039;&amp;#039;&amp;#039;with the exact same hardware&amp;#039;&amp;#039;&amp;#039; because yaird uses the current hardware setup to construct the initrd image. If the root partition is different between the 2 laptops, change temporarely your /etc/fstab to mimic the one of the target laptop.&lt;br /&gt;
** yaird -v -o /tmp/myinitrd linux-image-2.6.15-1-686&lt;br /&gt;
** Check the log if the root partition detected by yaird seems ok&lt;br /&gt;
** Move the initrd to the target computer and edit grub&lt;br /&gt;
* Apparently there are less problems using initramfs-tools rather than yaird&lt;br /&gt;
* cdrom&lt;br /&gt;
** by default, ATAPI is disabled in the SATA driver :-(&lt;br /&gt;
** echo &amp;quot;options libata atapi_enabled=1&amp;quot; &amp;amp;gt; /etc/modprobe.d/libata&lt;br /&gt;
** test: yaird -v -o /tmp/crap `uname -r`&amp;lt;br /&amp;gt; and look for the option atapi_enabled&lt;br /&gt;
** dpkg-reconfigure linux-image-`uname -r`&lt;br /&gt;
** If you built your own kernel with libata not as module, you have to pass to the kernel the option libata.atapi_enabled=1&lt;br /&gt;
* noise&lt;br /&gt;
** If you have a high sharp pitched sound coming from the laptop, try booting the kernel with the idle=halt option&lt;br /&gt;
* suspend-to-ram&lt;br /&gt;
** this requires a patch, see below&lt;br /&gt;
&lt;br /&gt;
==== Harddrive ====&lt;br /&gt;
&lt;br /&gt;
* Smart&lt;br /&gt;
** Works from kernel 2.6.15:&lt;br /&gt;
** smartctl -d ata -a /dev/sda&lt;br /&gt;
** Edit /etc/smartd.conf to reflect the -d ata option&lt;br /&gt;
&lt;br /&gt;
==== X ====&lt;br /&gt;
&lt;br /&gt;
* use Xorg server, not XFree86!&lt;br /&gt;
* To get a full-featured touchpad&lt;br /&gt;
** apt-get install xfree86-driver-synaptics&lt;br /&gt;
** to tune it if needed: synclient (man synaptics), synclient CircularScrolling=1 is quite cool :-)&lt;br /&gt;
** check the new gsynaptics X client for on-demand tuning&lt;br /&gt;
* Use [http://home.comcast.net/canez/d610/xorg.conf this file] in /etc/X11/xorg.conf or run by yourself dpkg-reconfigure xserver-xorg&lt;br /&gt;
&lt;br /&gt;
==== Wireless ====&lt;br /&gt;
&lt;br /&gt;
* Go to http://ipw2200.sourceforge.net/ and download the latest firmware.&lt;br /&gt;
* Unpack and move the ipw-* files to /usr/lib/hotplug/firmware.&lt;br /&gt;
* With 2.6 kernels, this is not uncommon to end up with a inverted order of the interfaces, use &amp;#039;&amp;#039;&amp;#039;ifrename&amp;#039;&amp;#039;&amp;#039; to definitively get rid of these problems&lt;br /&gt;
** echo &amp;quot;install ipw2200 /sbin/modprobe --ignore-install ipw2200; ifrename&amp;quot; &amp;amp;gt;&amp;amp;gt; /etc/modprobe.d/ipw2200&lt;br /&gt;
** led on/off doesn&amp;#039;t work that well&lt;br /&gt;
* The card is working well with WPA, cf HostApUsage&lt;br /&gt;
&lt;br /&gt;
==== Sound ====&lt;br /&gt;
&lt;br /&gt;
Works out-of-the-box. &amp;lt;br /&amp;gt;For more tuning, cf http://opensrc.org/alsa/index.php?page=intel8x0 and DebianAlsa&lt;br /&gt;
&lt;br /&gt;
==== Saving battery and other tweaks for laptop ====&lt;br /&gt;
&lt;br /&gt;
* cf DebianLaptop&lt;br /&gt;
* If your LID doesn&amp;#039;t turn back on when you open it (with acpi enabled), I urge you to install vbetool and the backlight_install.sh script from DebianLaptop (select &amp;quot;vbepost&amp;quot; when prompted)&lt;br /&gt;
* Hotkeys are working with the hotkey-setup package, if ou want the exact codes, cf http://gentoo-wiki.com/HARDWARE_Dell_Latitude_D610#Special_Keys&lt;br /&gt;
&lt;br /&gt;
==== Suspend-to-ram ====&lt;br /&gt;
&lt;br /&gt;
Finally! &amp;lt;br /&amp;gt;This works great after having ported the following [http://home.comcast.net/canez/d610/libata_suspend.patch patch] to the 2.6.15-7 of Debian. &amp;lt;br /&amp;gt;I ported the patch and used the same .config as the 2.6.15-1-686 package to compile the kernel.&lt;br /&gt;
&lt;br /&gt;
Here is my version, for linux-source-2.6.15 version 2.6.15-7&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
 diff -Naur linux-source-2.6.15/drivers/scsi/ata_piix.c linux-source-2.6.15-ata/drivers/scsi/ata_piix.c&lt;br /&gt;
 --- linux-source-2.6.15/drivers/scsi/ata_piix.c 2006-01-03 04:21:10.000000000 +0100&lt;br /&gt;
 +++ linux-source-2.6.15-ata/drivers/scsi/ata_piix.c     2006-03-02 07:53:01.000000000 +0100&lt;br /&gt;
 @@ -125,6 +125,8 @@&lt;br /&gt;
         .id_table               = piix_pci_tbl,&lt;br /&gt;
         .probe                  = piix_init_one,&lt;br /&gt;
         .remove                 = ata_pci_remove_one,&lt;br /&gt;
 +       .suspend                = ata_pci_device_suspend,&lt;br /&gt;
 +       .resume                 = ata_pci_device_resume,&lt;br /&gt;
  };&lt;br /&gt;
 &lt;br /&gt;
  static struct scsi_host_template piix_sht = {&lt;br /&gt;
 @@ -145,6 +147,8 @@&lt;br /&gt;
         .slave_configure        = ata_scsi_slave_config,&lt;br /&gt;
         .bios_param             = ata_std_bios_param,&lt;br /&gt;
         .ordered_flush          = 1,&lt;br /&gt;
 +       .resume                 = ata_scsi_device_resume,&lt;br /&gt;
 +       .suspend                = ata_scsi_device_suspend,&lt;br /&gt;
  };&lt;br /&gt;
 &lt;br /&gt;
  static const struct ata_port_operations piix_pata_ops = {&lt;br /&gt;
 diff -Naur linux-source-2.6.15/drivers/scsi/libata-core.c linux-source-2.6.15-ata/drivers/scsi/libata-core.c&lt;br /&gt;
 --- linux-source-2.6.15/drivers/scsi/libata-core.c      2006-01-03 04:21:10.000000000 +0100&lt;br /&gt;
 +++ linux-source-2.6.15-ata/drivers/scsi/libata-core.c  2006-03-02 07:56:55.000000000 +0100&lt;br /&gt;
 @@ -4099,6 +4099,104 @@&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 +/*&lt;br /&gt;
 + * Execute a &amp;#039;simple&amp;#039; command, that only consists of the opcode &amp;#039;cmd&amp;#039; itself,&lt;br /&gt;
 + * without filling any other registers&lt;br /&gt;
 + */&lt;br /&gt;
 +static int ata_do_simple_cmd(struct ata_port *ap, struct ata_device *dev,&lt;br /&gt;
 +                            u8 cmd)&lt;br /&gt;
 +{&lt;br /&gt;
 +       DECLARE_COMPLETION(wait);&lt;br /&gt;
 +       struct ata_queued_cmd *qc;&lt;br /&gt;
 +       unsigned long flags;&lt;br /&gt;
 +       int rc;&lt;br /&gt;
 +&lt;br /&gt;
 +       qc = ata_qc_new_init(ap, dev);&lt;br /&gt;
 +       BUG_ON(qc == NULL);&lt;br /&gt;
 +&lt;br /&gt;
 +       qc-&amp;amp;gt;tf.command = cmd;&lt;br /&gt;
 +       qc-&amp;amp;gt;tf.flags |= ATA_TFLAG_DEVICE;&lt;br /&gt;
 +       qc-&amp;amp;gt;tf.protocol = ATA_PROT_NODATA;&lt;br /&gt;
 +&lt;br /&gt;
 +       qc-&amp;amp;gt;waiting = &amp;amp;amp;wait;&lt;br /&gt;
 +       qc-&amp;amp;gt;complete_fn = ata_qc_complete_noop;&lt;br /&gt;
 +&lt;br /&gt;
 +       spin_lock_irqsave(&amp;amp;amp;ap-&amp;amp;gt;host_set-&amp;amp;gt;lock, flags);&lt;br /&gt;
 +       rc = ata_qc_issue(qc);&lt;br /&gt;
 +       spin_unlock_irqrestore(&amp;amp;amp;ap-&amp;amp;gt;host_set-&amp;amp;gt;lock, flags);&lt;br /&gt;
 +&lt;br /&gt;
 +       if (!rc)&lt;br /&gt;
 +               wait_for_completion(&amp;amp;amp;wait);&lt;br /&gt;
 +&lt;br /&gt;
 +       return rc;&lt;br /&gt;
 +}&lt;br /&gt;
 +&lt;br /&gt;
 +static int ata_flush_cache(struct ata_port *ap, struct ata_device *dev)&lt;br /&gt;
 +{&lt;br /&gt;
 +       u8 cmd;&lt;br /&gt;
 +&lt;br /&gt;
 +       if (!ata_try_flush_cache(dev))&lt;br /&gt;
 +               return 0;&lt;br /&gt;
 +&lt;br /&gt;
 +       if (ata_id_has_flush_ext(dev-&amp;amp;gt;id))&lt;br /&gt;
 +               cmd = ATA_CMD_FLUSH_EXT;&lt;br /&gt;
 +       else&lt;br /&gt;
 +               cmd = ATA_CMD_FLUSH;&lt;br /&gt;
 +&lt;br /&gt;
 +       return ata_do_simple_cmd(ap, dev, cmd);&lt;br /&gt;
 +}&lt;br /&gt;
 +&lt;br /&gt;
 +static int ata_standby_drive(struct ata_port *ap, struct ata_device *dev)&lt;br /&gt;
 +{&lt;br /&gt;
 +       return ata_do_simple_cmd(ap, dev, ATA_CMD_STANDBYNOW1);&lt;br /&gt;
 +}&lt;br /&gt;
 +&lt;br /&gt;
 +static int ata_start_drive(struct ata_port *ap, struct ata_device *dev)&lt;br /&gt;
 +{&lt;br /&gt;
 +       return ata_do_simple_cmd(ap, dev, ATA_CMD_IDLEIMMEDIATE);&lt;br /&gt;
 +}&lt;br /&gt;
 +&lt;br /&gt;
 +/**&lt;br /&gt;
 + *     ata_device_resume - wakeup a previously suspended devices&lt;br /&gt;
 + *&lt;br /&gt;
 + *     Kick the drive back into action, by sending it an idle immediate&lt;br /&gt;
 + *     command and making sure its transfer mode matches between drive&lt;br /&gt;
 + *     and host.&lt;br /&gt;
 + *&lt;br /&gt;
 + */&lt;br /&gt;
 +int ata_device_resume(struct ata_port *ap, struct ata_device *dev)&lt;br /&gt;
 +{&lt;br /&gt;
 +       if (ap-&amp;amp;gt;flags &amp;amp;amp; ATA_FLAG_SUSPENDED) {&lt;br /&gt;
 +               ap-&amp;amp;gt;flags &amp;amp;amp;= ~ATA_FLAG_SUSPENDED;&lt;br /&gt;
 +               ata_set_mode(ap);&lt;br /&gt;
 +       }&lt;br /&gt;
 +       if (!ata_dev_present(dev))&lt;br /&gt;
 +               return 0;&lt;br /&gt;
 +       if (dev-&amp;amp;gt;class == ATA_DEV_ATA)&lt;br /&gt;
 +               ata_start_drive(ap, dev);&lt;br /&gt;
 +&lt;br /&gt;
 +       return 0;&lt;br /&gt;
 +}&lt;br /&gt;
 +&lt;br /&gt;
 +/**&lt;br /&gt;
 + *     ata_device_suspend - prepare a device for suspend&lt;br /&gt;
 + *&lt;br /&gt;
 + *     Flush the cache on the drive, if appropriate, then issue a&lt;br /&gt;
 + *     standbynow command.&lt;br /&gt;
 + *&lt;br /&gt;
 + */&lt;br /&gt;
 +int ata_device_suspend(struct ata_port *ap, struct ata_device *dev)&lt;br /&gt;
 +{&lt;br /&gt;
 +       if (!ata_dev_present(dev))&lt;br /&gt;
 +               return 0;&lt;br /&gt;
 +       if (dev-&amp;amp;gt;class == ATA_DEV_ATA)&lt;br /&gt;
 +               ata_flush_cache(ap, dev);&lt;br /&gt;
 +&lt;br /&gt;
 +       ata_standby_drive(ap, dev);&lt;br /&gt;
 +       ap-&amp;amp;gt;flags |= ATA_FLAG_SUSPENDED;&lt;br /&gt;
 +       return 0;&lt;br /&gt;
 +}&lt;br /&gt;
 +&lt;br /&gt;
  /**&lt;br /&gt;
   *     ata_port_start - Set port up for dma.&lt;br /&gt;
   *     @ap: Port to initialize&lt;br /&gt;
 @@ -4860,6 +4958,23 @@&lt;br /&gt;
 &lt;br /&gt;
         return (tmp == bits-&amp;amp;gt;val) ? 1 : 0;&lt;br /&gt;
  }&lt;br /&gt;
 +&lt;br /&gt;
 +int ata_pci_device_suspend(struct pci_dev *pdev, pm_message_t state)&lt;br /&gt;
 +{&lt;br /&gt;
 +       pci_save_state(pdev);&lt;br /&gt;
 +       pci_disable_device(pdev);&lt;br /&gt;
 +       pci_set_power_state(pdev, PCI_D3hot);&lt;br /&gt;
 +       return 0;&lt;br /&gt;
 +}&lt;br /&gt;
 +&lt;br /&gt;
 +int ata_pci_device_resume(struct pci_dev *pdev)&lt;br /&gt;
 +{&lt;br /&gt;
 +       pci_set_power_state(pdev, PCI_D0);&lt;br /&gt;
 +       pci_restore_state(pdev);&lt;br /&gt;
 +       pci_enable_device(pdev);&lt;br /&gt;
 +       pci_set_master(pdev);&lt;br /&gt;
 +       return 0;&lt;br /&gt;
 +}&lt;br /&gt;
  #endif /* CONFIG_PCI */&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 @@ -4963,4 +5078,11 @@&lt;br /&gt;
  EXPORT_SYMBOL_GPL(ata_pci_init_native_mode);&lt;br /&gt;
  EXPORT_SYMBOL_GPL(ata_pci_init_one);&lt;br /&gt;
  EXPORT_SYMBOL_GPL(ata_pci_remove_one);&lt;br /&gt;
 +EXPORT_SYMBOL_GPL(ata_pci_device_suspend);&lt;br /&gt;
 +EXPORT_SYMBOL_GPL(ata_pci_device_resume);&lt;br /&gt;
  #endif /* CONFIG_PCI */&lt;br /&gt;
 +&lt;br /&gt;
 +EXPORT_SYMBOL_GPL(ata_device_suspend);&lt;br /&gt;
 +EXPORT_SYMBOL_GPL(ata_device_resume);&lt;br /&gt;
 +EXPORT_SYMBOL_GPL(ata_scsi_device_suspend);&lt;br /&gt;
 +EXPORT_SYMBOL_GPL(ata_scsi_device_resume);&lt;br /&gt;
 diff -Naur linux-source-2.6.15/drivers/scsi/libata-scsi.c linux-source-2.6.15-ata/drivers/scsi/libata-scsi.c&lt;br /&gt;
 --- linux-source-2.6.15/drivers/scsi/libata-scsi.c      2006-01-03 04:21:10.000000000 +0100&lt;br /&gt;
 +++ linux-source-2.6.15-ata/drivers/scsi/libata-scsi.c  2006-03-02 08:03:14.000000000 +0100&lt;br /&gt;
 @@ -802,6 +802,22 @@&lt;br /&gt;
         return 1;&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
 +int ata_scsi_device_resume(struct scsi_device *sdev)&lt;br /&gt;
 +{&lt;br /&gt;
 +       struct ata_port *ap = (struct ata_port *) &amp;amp;amp;sdev-&amp;amp;gt;host-&amp;amp;gt;hostdata[0];&lt;br /&gt;
 +       struct ata_device *dev = &amp;amp;amp;ap-&amp;amp;gt;device[sdev-&amp;amp;gt;id];&lt;br /&gt;
 +&lt;br /&gt;
 +       return ata_device_resume(ap, dev);&lt;br /&gt;
 +}&lt;br /&gt;
 +&lt;br /&gt;
 +int ata_scsi_device_suspend(struct scsi_device *sdev)&lt;br /&gt;
 +{&lt;br /&gt;
 +       struct ata_port *ap = (struct ata_port *) &amp;amp;amp;sdev-&amp;amp;gt;host-&amp;amp;gt;hostdata[0];&lt;br /&gt;
 +       struct ata_device *dev = &amp;amp;amp;ap-&amp;amp;gt;device[sdev-&amp;amp;gt;id];&lt;br /&gt;
 +&lt;br /&gt;
 +       return ata_device_suspend(ap, dev);&lt;br /&gt;
 +}&lt;br /&gt;
 +&lt;br /&gt;
 &lt;br /&gt;
  /**&lt;br /&gt;
   *     ata_scsi_flush_xlat - Translate SCSI SYNCHRONIZE CACHE command&lt;br /&gt;
 diff -Naur linux-source-2.6.15/drivers/scsi/scsi_lib.c linux-source-2.6.15-ata/drivers/scsi/scsi_lib.c&lt;br /&gt;
 --- linux-source-2.6.15/drivers/scsi/scsi_lib.c 2006-02-21 18:40:50.000000000 +0100&lt;br /&gt;
 +++ linux-source-2.6.15-ata/drivers/scsi/scsi_lib.c     2006-03-02 07:53:01.000000000 +0100&lt;br /&gt;
 @@ -1904,8 +1904,9 @@&lt;br /&gt;
  void&lt;br /&gt;
  scsi_device_resume(struct scsi_device *sdev)&lt;br /&gt;
  {&lt;br /&gt;
 -       if(scsi_device_set_state(sdev, SDEV_RUNNING))&lt;br /&gt;
 +       if (scsi_device_set_state(sdev, SDEV_RUNNING))&lt;br /&gt;
                 return;&lt;br /&gt;
 +&lt;br /&gt;
         scsi_run_queue(sdev-&amp;amp;gt;request_queue);&lt;br /&gt;
  }&lt;br /&gt;
  EXPORT_SYMBOL(scsi_device_resume);&lt;br /&gt;
 diff -Naur linux-source-2.6.15/drivers/scsi/scsi_sysfs.c linux-source-2.6.15-ata/drivers/scsi/scsi_sysfs.c&lt;br /&gt;
 --- linux-source-2.6.15/drivers/scsi/scsi_sysfs.c       2006-01-03 04:21:10.000000000 +0100&lt;br /&gt;
 +++ linux-source-2.6.15-ata/drivers/scsi/scsi_sysfs.c   2006-03-02 07:53:01.000000000 +0100&lt;br /&gt;
 @@ -263,9 +263,40 @@&lt;br /&gt;
         return (sdp-&amp;amp;gt;inq_periph_qual == SCSI_INQ_PQ_CON)? 1: 0;&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
 +static int scsi_bus_suspend(struct device * dev, pm_message_t state)&lt;br /&gt;
 +{&lt;br /&gt;
 +       struct scsi_device *sdev = to_scsi_device(dev);&lt;br /&gt;
 +       struct scsi_host_template *sht = sdev-&amp;amp;gt;host-&amp;amp;gt;hostt;&lt;br /&gt;
 +       int err;&lt;br /&gt;
 +&lt;br /&gt;
 +       err = scsi_device_quiesce(sdev);&lt;br /&gt;
 +       if (err)&lt;br /&gt;
 +               return err;&lt;br /&gt;
 +&lt;br /&gt;
 +       if (sht-&amp;amp;gt;suspend)&lt;br /&gt;
 +               err = sht-&amp;amp;gt;suspend(sdev);&lt;br /&gt;
 +&lt;br /&gt;
 +       return err;&lt;br /&gt;
 +}&lt;br /&gt;
 +&lt;br /&gt;
 +static int scsi_bus_resume(struct device * dev)&lt;br /&gt;
 +{&lt;br /&gt;
 +       struct scsi_device *sdev = to_scsi_device(dev);&lt;br /&gt;
 +       struct scsi_host_template *sht = sdev-&amp;amp;gt;host-&amp;amp;gt;hostt;&lt;br /&gt;
 +       int err = 0;&lt;br /&gt;
 +&lt;br /&gt;
 +       if (sht-&amp;amp;gt;resume)&lt;br /&gt;
 +               err = sht-&amp;amp;gt;resume(sdev);&lt;br /&gt;
 +&lt;br /&gt;
 +       scsi_device_resume(sdev);&lt;br /&gt;
 +       return err;&lt;br /&gt;
 +}&lt;br /&gt;
 +&lt;br /&gt;
  struct bus_type scsi_bus_type = {&lt;br /&gt;
          .name          = &amp;quot;scsi&amp;quot;,&lt;br /&gt;
          .match         = scsi_bus_match,&lt;br /&gt;
 +       .suspend        = scsi_bus_suspend,&lt;br /&gt;
 +       .resume         = scsi_bus_resume,&lt;br /&gt;
  };&lt;br /&gt;
 &lt;br /&gt;
  int scsi_sysfs_register(void)&lt;br /&gt;
 diff -Naur linux-source-2.6.15/include/linux/ata.h linux-source-2.6.15-ata/include/linux/ata.h&lt;br /&gt;
 --- linux-source-2.6.15/include/linux/ata.h     2006-01-03 04:21:10.000000000 +0100&lt;br /&gt;
 +++ linux-source-2.6.15-ata/include/linux/ata.h 2006-03-02 08:13:14.000000000 +0100&lt;br /&gt;
 @@ -142,6 +142,8 @@&lt;br /&gt;
         ATA_CMD_VERIFY          = 0x40,&lt;br /&gt;
         ATA_CMD_VERIFY_EXT      = 0x42,&lt;br /&gt;
         ATA_CMD_INIT_DEV_PARAMS = 0x91,&lt;br /&gt;
 +       ATA_CMD_STANDBYNOW1     = 0xE0,&lt;br /&gt;
 +       ATA_CMD_IDLEIMMEDIATE   = 0xE1,&lt;br /&gt;
 &lt;br /&gt;
         /* SETFEATURES stuff */&lt;br /&gt;
         SETFEATURES_XFER        = 0x03,&lt;br /&gt;
 diff -Naur linux-source-2.6.15/include/linux/libata.h linux-source-2.6.15-ata/include/linux/libata.h&lt;br /&gt;
 --- linux-source-2.6.15/include/linux/libata.h  2006-01-03 04:21:10.000000000 +0100&lt;br /&gt;
 +++ linux-source-2.6.15-ata/include/linux/libata.h      2006-03-02 08:26:05.000000000 +0100&lt;br /&gt;
 @@ -123,6 +123,7 @@&lt;br /&gt;
                                              * proper HSM is in place. */&lt;br /&gt;
         ATA_FLAG_DEBUGMSG       = (1 &amp;amp;lt;&amp;amp;lt; 10),&lt;br /&gt;
         ATA_FLAG_NO_ATAPI       = (1 &amp;amp;lt;&amp;amp;lt; 11), /* No ATAPI support */&lt;br /&gt;
 +       ATA_FLAG_SUSPENDED      = (1 &amp;amp;lt;&amp;amp;lt; 12), /* port is suspended */&lt;br /&gt;
 &lt;br /&gt;
         ATA_QCFLAG_ACTIVE       = (1 &amp;amp;lt;&amp;amp;lt; 1), /* cmd not yet ack&amp;#039;d to scsi lyer */&lt;br /&gt;
         ATA_QCFLAG_SG           = (1 &amp;amp;lt;&amp;amp;lt; 3), /* have s/g table? */&lt;br /&gt;
 @@ -436,6 +437,8 @@&lt;br /&gt;
  extern int ata_pci_init_one (struct pci_dev *pdev, struct ata_port_info **port_info,&lt;br /&gt;
                              unsigned int n_ports);&lt;br /&gt;
  extern void ata_pci_remove_one (struct pci_dev *pdev);&lt;br /&gt;
 +extern int ata_pci_device_suspend(struct pci_dev *pdev, pm_message_t state);&lt;br /&gt;
 +extern int ata_pci_device_resume(struct pci_dev *pdev);&lt;br /&gt;
  #endif /* CONFIG_PCI */&lt;br /&gt;
  extern int ata_device_add(const struct ata_probe_ent *ent);&lt;br /&gt;
  extern void ata_host_set_remove(struct ata_host_set *host_set);&lt;br /&gt;
 @@ -446,6 +449,10 @@&lt;br /&gt;
  extern int ata_scsi_release(struct Scsi_Host *host);&lt;br /&gt;
  extern unsigned int ata_host_intr(struct ata_port *ap, struct ata_queued_cmd *qc);&lt;br /&gt;
  extern int ata_ratelimit(void);&lt;br /&gt;
 +extern int ata_scsi_device_resume(struct scsi_device *);&lt;br /&gt;
 +extern int ata_scsi_device_suspend(struct scsi_device *);&lt;br /&gt;
 +extern int ata_device_resume(struct ata_port *, struct ata_device *);&lt;br /&gt;
 +extern int ata_device_suspend(struct ata_port *, struct ata_device *);&lt;br /&gt;
 &lt;br /&gt;
  /*&lt;br /&gt;
   * Default driver ops implementations&lt;br /&gt;
 diff -Naur linux-source-2.6.15/include/scsi/scsi_host.h linux-source-2.6.15-ata/include/scsi/scsi_host.h&lt;br /&gt;
 --- linux-source-2.6.15/include/scsi/scsi_host.h        2006-01-03 04:21:10.000000000 +0100&lt;br /&gt;
 +++ linux-source-2.6.15-ata/include/scsi/scsi_host.h    2006-03-02 07:53:01.000000000 +0100&lt;br /&gt;
 @@ -296,6 +296,12 @@&lt;br /&gt;
         int (*proc_info)(struct Scsi_Host *, char *, char **, off_t, int, int);&lt;br /&gt;
 &lt;br /&gt;
         /*&lt;br /&gt;
 +        * suspend support&lt;br /&gt;
 +        */&lt;br /&gt;
 +       int (*resume)(struct scsi_device *);&lt;br /&gt;
 +       int (*suspend)(struct scsi_device *);&lt;br /&gt;
 +&lt;br /&gt;
 +       /*&lt;br /&gt;
          * Name of proc directory&lt;br /&gt;
          */&lt;br /&gt;
         char *proc_name;&lt;br /&gt;
&lt;br /&gt;
* Save the file under e.g. /usr/src/libata_suspend-2.6.15-7.patch&lt;br /&gt;
* apt-get install linux-source-2.6.15&lt;br /&gt;
* cd /usr/src&lt;br /&gt;
* tar xjf linux-source-2.6.15.tar.bz2&lt;br /&gt;
* cd linux-source-2.6.15&lt;br /&gt;
* patch -p1 &amp;amp;lt; ../libata_suspend-2.6.15-7.patch&lt;br /&gt;
* cp /boot/config-2.6.15-1-686 .config&amp;lt;br /&amp;gt;I assume you have already installed the Debian 2.6.15-1-686 kernel so we can simply apply the original config to our kernel&lt;br /&gt;
* make-kpkg clean&lt;br /&gt;
* make-kpkg --initrd --us --uc --revision 2.6.15-7 --append-to-version -1-686-str kernel_image&lt;br /&gt;
* cd ..&lt;br /&gt;
* dpkg -i linux-image-2.6.15-1-686-str_2.6.15-7_i386.deb&lt;br /&gt;
* Now ou have a second kernel named 2.6.15-1-686-str and capable of suspend-to-ram :-)&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Hardware todo ====&lt;br /&gt;
&lt;br /&gt;
* screen&lt;br /&gt;
** didn&amp;#039;t try fb, probably don&amp;#039;t work with suspend-to-ram&lt;br /&gt;
** 3D accel??&lt;br /&gt;
** extern CRT: cf i810switch + need other resolutions??&lt;br /&gt;
** [http://downloadfinder.intel.com/scripts-df-external/filter_results.aspx?strTypes=all&amp;amp;ProductID=1862&amp;amp;OSFullName=Linux%2A&amp;amp;lang=eng&amp;amp;strOSs=39&amp;amp;submit=Go%21 Intel drivers] ?&lt;br /&gt;
* suspend-to-ram&lt;br /&gt;
** merge acpi_handlers....&lt;br /&gt;
* pcmcia/cardbus, not yet tested&lt;br /&gt;
* smartcard reader&lt;br /&gt;
** cf TexasInstrumentsSmartCardController&lt;br /&gt;
* wireless&lt;br /&gt;
** how to get mode monitor ?&amp;lt;br /&amp;gt; See http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=347468&lt;br /&gt;
** ap? http://sourceforge.net/projects/ipw2200-ap&lt;br /&gt;
** led not handled properly&lt;br /&gt;
* irda&lt;br /&gt;
* bluetooth&lt;br /&gt;
* modem&lt;br /&gt;
* serial/parallel&lt;br /&gt;
* tv out&lt;br /&gt;
* SMBus&lt;br /&gt;
** this is for the sensors&lt;br /&gt;
** apt-get install lm-sensors&lt;br /&gt;
** modules: i2c-i801 (by udev), i2c-dev&lt;br /&gt;
** sensors-detect -&amp;amp;gt; module eeprom&lt;/div&gt;</summary>
		<author><name>PhilippeTeuwen</name></author>
	</entry>
</feed>