Dell Inspiron 700m and Debian 3.1
25 April 2005
This is my attempt to document getting my Dell 700m working with Debian 3.1 (sarge).
Throughout this document I have tried to indicate Debian packages names as package name. But it might not be. Use the context and your judgement to decide for sure.
First a run-down on my hardware so you can see if this page is useful for you.
Pentium M Processer 745
12.1" WXGA (1280x800)
Intel 855GME (video chipset)
8-cell 64Whr battery
MMC / SD
In order to get X working at 1280x800 (it works at 800x600 and 1024x768) you need to grab 855resolution and do the following
$ ./855resolution -l 855resolution version 0.3, by Alain Poirier Chipset: 855GM VBIOS type: 2 VBIOS Version: 3104 Mode 30 : 640x480, 8 bits/pixel Mode 32 : 800x600, 8 bits/pixel Mode 34 : 1024x768, 8 bits/pixel Mode 38 : 1280x1024, 8 bits/pixel Mode 3a : 1600x1200, 8 bits/pixel Mode 3c : 1920x1440, 8 bits/pixel Mode 41 : 640x480, 16 bits/pixel Mode 43 : 800x600, 16 bits/pixel Mode 45 : 1024x768, 16 bits/pixel Mode 49 : 1280x1024, 16 bits/pixel Mode 4b : 1600x1200, 16 bits/pixel Mode 4d : 1920x1440, 16 bits/pixel Mode 50 : 640x480, 32 bits/pixel Mode 52 : 800x600, 32 bits/pixel Mode 54 : 1024x768, 32 bits/pixel Mode 58 : 1280x1024, 32 bits/pixel Mode 5a : 1600x1200, 32 bits/pixel Mode 5c : 1920x1440, 32 bits/pixel Mode 7c : 1280x801, 8 bits/pixel Mode 7d : 1280x801, 16 bits/pixel Mode 7e : 1280x801, 32 bits/pixel $ ./855resolution 5c 1280 800
Then rerun dpkg-reconfigure xserver-xfree86
X server driver: i810 identifier: enter bus ident: PCI:0:2:0 keyboard: xfree86 model: pc104 layout: us varient: <enter> options: <enter> mouse: /dev/psaux protocol: ImPS/2 emulate 3 buttons: yes scroll events: yes monitor: generic lcd: yes mode: medium
The modeline: basically X from Debian 3.1 is fully capable of driving this card / LCD combination. Unfortunately there is no modeline for the 1280x800 resolution.
I calculated / generated one by looking at the logfile (which will display something like:
(II) I810(0): Supported additional Video Mode: (II) I810(0): clock: 75.0 MHz Image Size: 261 x 163 mm (II) I810(0): h_active: 1280 h_sync: 1296 h_sync_end 1344 h_blank_end 1472 h_border: 0 (II) I810(0): v_active: 800 v_sync: 801 v_sync_end 804 v_blanking: 849 v_border: 0 (II) I810(0): Y4396^A121W1
So, my modeline is composed of the following productions:
Modeline ::= "mode-name" mode-description
mode-description ::= dot-clock horiz-timings vert-timings [flags]
hoirz-timings ::= hdisp hsyncstart hsyncend htotal
vert-timings ::= vdisp vsyncstart vsyncend vtotal
flags ::= Interlace|DoubleScan|+HSync|-HSync|+VSync|-VSync|Composite|+CSync|-CSync
Calculating the dot-clock is often the hardest part, the formula is:
RR = DCF / (HFL * VFL)
(from The XFree86 Video Timings HOWTO)
In this case RR (Refresh Rate) is 75, HFL is 1472 and VFL is 849. So,
75 = DCF / (1472 * 849)
75 = DCF / 1249728
DCF = 93729600
DCF = 93.73 (divide by 1000000)
Modeline "1280x800" 93.73 1280 1296 1344 1472 800 801 804 849
If you found this explanation hard to understand then you can see all my configuration at http://www.progsoc.org/~wildfire/notes/dell700m_XF86Config-4.
To get X to startup with this mode at boot time, cp 855resolution into /usr/local/bin/ and create a file in /etc/init.d/ called 885res
#!/bin/sh /usr/local/bin/855resolution 5c 1280 800 chmod a+rx /etc/init.d/855res cd /etc/rcS.d ln -s S90855res ../init.d/855res
While the kernel will detect the synaptics touchpad, X requires a few changes before it will work.
$ apt-get install xfree86-driver-synaptics
The InputDevice section is taken directly from the README.Debian file in /usr/share/doc/xfree86-driver-synaptics. I inserted the line
And then modified the ServerLayout section to remove the Configured Mouse device (which also has the CorePointer option — then can only be a single corepointer per system).
If you want to be able to monitor your battery you need to install acpid
$ apt-get install acpid
Then any normal battery monitoring daemon (for example, the Gnome battery monitor) should work as normal
While networking works out of the box on Debian 3.1, it is not optimal for a laptop. The 700m has three network interfaces (Ethernet, IEEE1394 and 802.11b/g).
Wired - Ethernet
The kernel will automagically detect the right driver (Broadcom b44), so the "only" configuration is user-space related. First off the dhcp client should either be pump or dhcp3-client. I choose dhcp3-client since it allows me to override selected pieces of information that the DHCP server sends back.
$ apt-get install dhcp3-client $ apt-get install ifplugd
For `ifplugd', set it to watch all interfaces by using the word `auto' when prompted. For `hotplug' you should have it watch all interfaces, enter that when prompted and confirm that NET_AGENT_POLICY in /etc/default/hotplug is set to all.
Finally ensure that only auto lo remains in the /etc/network/interfaces file, all other interfaces will be brought up automatically by ifplugd.
A quick reboot (with network unplugged and then with it plugged) in to confirm everything is working okay.
Wired - IEE1394 (Firewire)
I don't have an IEE1394 networking device, so I haven't been able to test this out at all. I have also used ifrename to make this device appear as fw0 rather than an eth* device.
Similiar to ifplugd there is wpasupplicant, apt-get install wpasupplicant, should get it installed.
The IPW2200 in this laptop, while it has a driver (in the kernel from 2.6.13+) which works, requires additional firmware. I downloaded that from http://ipw2200.sf.net/firmware.php
The firmware should be extracted and placed into /usr/local/lib/firmwareYou may need to create this directory.
The IPW2200 driver is not included in the default Debian kernel (v2.6.8), so you will need to grab the headers before you can compile the module.
apt-get install ipw2200-source apt-get install kernel-headers-2.6.8-2-686
extract the ipw2200 driver cd …a make KSRC=/usr/src/kernel-headers-2.6.8-2-686 install sudo depmod -a sudo modprobe ipw2200
This will ensure the module and the kernel match in terms of CPU and other parameters.
Should see the `eth2' device appear and come up. In my case I have used ifrename and /etc/iftab to have the device appear as wlan0.
It turns out that the modem (PCI device 8086:24c6) is a software-based one. The surprise is that there is actually a driver for it. SmartLink appear to be the manufacturers of it and they have a Linux driver available on their website at http://www.smlink.com/content.aspx?id=132.The locations seems to change, so you may have to hunt around for it.
This comes with both a kernel driver (boo hiss!) and a user-space one. The user-space program is the only portion that is required as you can choose to use the ALSA modules over their proprietary ones.
You can choose to do this the Debian way and add the non-free section to your /etc/apt/source.list and install the package sl-modem-daemon
Then the slmodemd program can be run as:
sudo ./slmodemd -a 'modem:1'
And once installed the package will automatically start from the next reboot.
or alternatively, from the smlink.com website, download the slmodem-2.9.10.tar.gz archive, unpack it and run
apt-get install libasound2-dev cd modem make SUPPORT_ALSA=1
There are multiple competing systems to detect the hardware in a Linux machine, I prefer using hotplug so I removed discover1, discover1-data and libdiscover1. That way all hardware modules are found and controlled by hotplug.
The disk will be flushed every 5 seconds (especially if you are running ext3) which might result in a ticking noise — you can reduce that by enabling laptop mode.
$ apt-get install laptop-mode-tools
Should do the trick.Once enabled the disk is flushed periodically (5 minutes) so you might loose up to this amount of work if the battery fails.
Most of the keyboard works fine, however I found that under Gnome it was necessary to map the music and suspend Fn+keys so that they worked properly. Applications/Desktop Preferences/Keyboard Shortcuts is where you can do this.
Standard Debian kernels have softtware suspend disabled in the compilation options. In order to get this working you will need to compile your own kernel from scratch.
I picked 126.96.36.199 and had issues — unfortunately I found that software suspend didn't work. So, instead I switched to Software Suspend 2 (version 2.1.8) which patched against the kernel tree without problems.
You will also need the hibernate script (grab the deb from X) for things to work properly since you need to reset the modes that the Video BIOS knows about on resume. In my case I put the line
OnResume 98 /etc/init.d/855res
in /etc/hibernate/hibernate.conf and things worked properly.
MMC / SD
The MMC / SD socket is attached to a Texas Instruments (TI) PCI7420 controller (which also handles the IEEE1394 and CardBus sockets) however at this time there is no kernel driver for it.
TI, unusually, provide the information and port data so that it should be possible to write one. This chip also appears to be used to control MemoryStick devices in Sony laptops, so support should be forthcoming soon.
In fact, [http://www.everestinc.com/fml.htm]Everest have already created a driver but the source does not appear to be available.