Dell Inspiron 700m and Debian 3.1

by Anand Kumria
<wildfire@progsoc.org>
25 April 2005

Introduction

This is my attempt to document getting my Dell 700m working with Debian 3.1 (sarge).

Document conventions

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.

Hardware

First a run-down on my hardware so you can see if this page is useful for you.

Video

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)

Summary:

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

cat /etc/init.d/855res

#!/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

Touchpad

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

Options "CorePointer"

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).

Battery

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

Network

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.

Wireless

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/firmware

You 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.

modprobe ipw2200

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.

Modem

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

Hotplug

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.

Disk

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.

Keyboard

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.

Software Suspend

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 2.6.11.5 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.