Recently I had some mid-level complications configuring Debian Woody on a new
ASUS
M2400N laptop. I am posting this in hope some will find it useful, with all the usual
disclaimers. I did not hurt my laptop (yet).
New CPU Revision
ASUS now ships this Centrino laptop based on the Dothan CPU. The machine
is now named for example M2420NEB, the downloadable firmware for BIOS upgrades is
called M2Ne (current version: 0203). See below for more information.
Changes in the M2400Ne Series
Mostly two things need new/updated drivers to run this machine properly:
- Updated driver for cpufreq. The current driver in 2.6.[78]
is not aware of the B0 stepping of the Dothan CPU, so these times you need this
updated speedstep-centrino driver.
Copy this file to
<src>/arch/i386/kernel/cpu/cpufreq/speedstep-centrino.c
and recompile the kernel.
You also should include the latest release of the
ACPI patch
from 20040715 which
fixes a problem when the speedstep module tries to get data from
the DSDT.
- New driver for wireless LAN: IPW2200. Luckily, the current version
0.4 of the free driver from Intel
seems to work on this machine. Do not forget to download the firmware!
The rest seems to work as usual with kernel 2.6.7.
Here is a (maybe incomplete) list of model names, for which
this instructions apply:
M2420NEB,
M2420NEBH,
M2420NEBP,
M2442NB,
M2442NBH,
M2442NBP,
M2442NW,
M2442NWH,
M2442NWP,
M2443NBP,
M2443NWP,
M2456NW,
M2456NWH,
M2456NWP.
Note: All machines with an "E" in the suffix come with Pentium-M Dothan and
54Mbit WLAN, the others are equipped with Pentium-M Banias and 11Mbit WLAN.
The Good
- XFree 4.3 works out of the box;
- touchpad works;
- switching to VGA output works (but see below);
- both DMA and ACPI can work together after some effort (see below).
The Bad
- Lucent AMR softmodem does not work. I tried slmodem (all versions), but it does not support the ICH4 chipset found on the ASUS. I am sending this from Windows (aargh).
Addendum: the softmodem works, but see below in the modem section.
BIOS
ASUS has released a new BIOS (M2N0208A), grab it from here
. Some instructions can be found on nenie.org
. You also might consider to use FreeDos
and the utility provided by ASUS.
Cookbook
1)
install plain woody. X will not work, because woody carries XFree 4.1,
which does not support the i855GM graphics chip on the Centrino platform.
2) get linux-2.4.21.tar.bz2 from Linux Kernel
, patch it with
acpi-20030619-2.4.21.diff
and
acpi-dsdt-initrd-patch-v0.3-2.4.21.diff
, in that order.
Addendum: you do not need the acpi-dsdt-initrd-patch anymore and you can forget about the whole initrd process if you use a recent version of the acpi patch
, that is e.g. release 20040126. and you should also install at least kernel 2.4.26 or 2.6.7 due to some security issues with older kernels.
3)
when configuring the kernel, answer Y (not M) to 'ramdisk support'
(CONFIG_BLK_DEV_RAM) and 'initial ramdisk support' (CONFIG_BLK_DEV_INITRD)
in the section 'Block Devices'. Then go to 'General Setup--->ACPI Support',
answer Y to 'ACPI Support' and 'Read DSDT from initrd', then M to
everything from 'AC Adapter' to 'ASUS Laptop Extras'.
4)
compile/install kernel/modules and reboot.
5)
Now do cat /proc/acpi/dsdt > dsdt.aml. This will give a binary file,
which needs to be disassembled by Intel's iasl compiler. The version of
iasl on Intel's site is compiled against glibc 2.3, while Woody has
glibc 2.2.5. Use
iasl-linux-20021002.tar.gz, which luckily still exists on
the net. So:
$ iasl -d dsdt.aml > ASUS-M2400N.asl
will give you a very long file ASUS-M2400N.asl, which you need to
repair a little: comment out the block
Scope (\_GPE)
{
Method (_L00, 0, Serialized)
{
\_TZ.TCHG ()
Notify (\_TZ.THRM, 0x80)
}
}
using /*....*/ (like in C), or just erase it. Now compile the changed
file: $ iasl -on ASUS-M2400N.asl,
which will produce a file DSDT.aml, after some warnings, which you can
ignore (if there are errors, something is wrong, and don't ask me what).
6) Put the file DSDT.aml somewhere where you can find it :), and add a line
initrd=... pointing to it in the image section of lilo.conf, viz.
image=/boot/vmlinuz
label=Linux
initrd=/boot/DSDT.aml
This assumes you do not have an initrd line already, for some other
purpose. If you do, and it reads 'initrd=/path/to/myinitrdfile' (say), do
$ echo "INITRDDSDT123DSDT123" >> /path/to/myinitrdfile
$ cat DSDT.aml >> /path/to/myinitrdfile
7) execute /sbin/lilo, and reboot. If all went well, you will find
something like the following lines:
Looking for DSDT in initrd ... found at beginning!
ACPI-0292: *** Info: Table [DSDT] replaced by host OS
when you execute dmesg.
8) Check that DMA works:
$ hdparm -t /dev/hda
should give a transfer rate of about 20 MB/second. It happened to me
once that it did not work, but it did after a reboot - I never
understood what happened.
9) Check that ACPI works: put the lines
ac
battery
button
fan
processor
thermal
asus_acpi
into /etc/modules, and look for the module messages in dmesg.
10) Now for X. There is a woody backport of XFree 4.3 on the net. Get it
and install everything. There will be some circular dependency problems,
which you may need to break by force.
11) Install the synaptics package. Follow the instructions to patch the
XF86Config-4 file. There is only one gotcha: the touchpad section
contains the option CorePointer, if you want to use the USB mouse as
well, the corresponding option in the mouse section must read
SendCoreEvents, not CorePointer. Use the i810 driver, without the
framebuffer.
Notes
- I am not sure how much ACPI really works. For example, I have not been
able to step the processor manually. The battery monitor by kdelaptop
works, and power really goes down, which is enough for me.
- The erased lines from the
ASUS-M2400N.asl file refer to reporting some
thermal events. I don't know how important this is. The laptop seems to
work normally, and the fan turns itself on during lengthy compilations or
calculations, then off again. If those lines are left in, keventd will eat
up all the cpu time.
- Patching the kernel as above results in some problem with the agpgart
module, from
dmesg:
Linux agpgart interface v0.99 (c) Jeff Hartmann
agpgart: Maximum main memory to use for agp memory: 431M
agpgart: no supported devices found.
[drm:drm_init] ERROR Cannot initialize the agpgart module.
But X11 still works, so I did not investigate further.
- To be able to switch between the LCD screen and the CRT screen on the VGA
output, you need to enable it in the BIOS: there is a 'Display' section,
with options for LCD only, CRT only, and both. This is set to LCD only by
default, but Windows has some sort of workaround, so the Fn-F8 sequence
will work with Microsoft-Windows, but not Linux, until you change the BIOS setting to both.
X11
To get gimp and xft going, SuSE 9.1 and 9.2 requires you to enter the
size of the display: 287x215 mm (X/Y).
Modem
Could not get the internal modem to work by trying all available drivers [SH].
Addendum: It works with a slightly patched version 2.7.10 of slmodem, available from SmartLink
(non-free, without cost). The trick is to modify line 75 of the file amrmo_init.c by changing the value of PCI_DEVICE_ID_ICH3 from 0x2486 to 0x24C6. Yes, there already exists an entry for PCI_DEVICE_ID_ICH4 and it sounds reasonable to remove the comment in the device table in line 281, but that still does not work. Just re-label ICH3 and ignore the warning when loading the modules. To be honest, it does not seem to be too stable. When calling a local ISP, the connection attempts were rejected with sometimes BUSY and sometimes NO CARRIER as a failure report, though perhaps this was due to some other problem (a/b-converter of ISDN?). Sometimes the connection was made successfully.
Addendum: The softmodem works with the current slmodem driver 2.9.5 or later. check the ftp-server from smartlink
for the latest driver. At least version 2.9.9 even makes the dial-in process audible, a great feature missed by most internal modems. Unfortunately, the ALSA driver (snd-intel8x0m) does not seem to work, so you have to use the proprietary driver (slamr).
Wireless LAN
Finally, Intel has put up a working driver available from ipw2100.sourceforge.net
which seems quite useable, even with WEP. driverloader or ndiswrapper do not seem necessary anymore.
A company called Linuxant
has developed a technology to use the drivers for Windows XP in Linux. Unfortunately, it is deeply non-free, though Linuxant asks the hardware vendors to support them, so that the product will be at least given to the users without charging them. Currently (October 2003), you get, after a registration process, a 30 day trial license which seems to be hardcoded to the MAC-address of your WLAN card.
The ndiswrapper project
supports that chip, too. ndiswrapper is under GPL and does more or less the same as driverloader from Linuxant.
The necessary MicroSoft-Windows files (e.g. w70n51.inf
are provided by ASUS
via FTP ftp://ftp.asuscom.de/pub/NOTEBOOK/M2x00N/INTEL_Calexico/PROW7100.ZIP or on the shipped CD in the directory: /intel_calexico/prow7100/winxp/
PCMCIA Passive Adapter: SmartMedia, MMC/SD, MemoryStick
The adapter doesn't work with Linux, because it works in passive mode only.
You may use an active 4in1 PCMCIA-Card Adapter *C4RWC made by
ConcepTronic
instead.
Extra Keys
To make the hotkeys at the top available, you should install a recent ACPI-patch and activate the option CONFIG_ACPI_ASUS, which leads to the built of asus_acpi. You can grab the patch alternatively from acpi4linux
.
The patch also makes the control-keys for CD available, which can be found at the front of the laptop. You have to configure acpid accordingly to use them, otherwise they are just dead meat (except when starting the machine in CD-Player mode).[SH]
IrDA
People who have upgraded to kernel 2.6 might have noticed, that IrDA (SIR or FIR) does not work anymore. This is due to some interrupt problems, as the IrDA drivers do not want to share interrupts and 2.6 somewhat distributes them differently than 2.4. here is what to do:
- use the latest ACPI (e.g. from 20040126)
- compile your ps/2 mouse driver as a module (psmouse).
- use the following kernel parameters:
acpi_irq_balance acpi_irq_isa=3,12
- irda-utils 0.9.15 suffice, at least
irattach and irdadump do their job.
Afterwards, SIR and FIR (nsc-ircc) work. To see some sort of history, how all of this came together, check this thread at irda-users
.
"I am running kernel 2.6.6, irda-utils 0.9.16 on two ASUS M2N here. they
can both see each other as seen in the output of irdadump.
It seems to be necessary to echo the lower baud rate to the proc-file
(echo 115200 > /proc/sys/net/irda/max_baud_rate) for real connections.
to get a nice network connection between the two Linux boxes I used
the "irnet" (kernel module):
To start a PPP connection on the server:
/sbin/pppd /dev/irnet 115200 local noauth nolock nodetach passive 192.168.2.1:192.168.2.2
To start a PPP connection on the client:
/sbin/pppd /dev/irnet 115200 local noauth nolock nodetach
Afterwards i can ssh into the other box just fine. of course, all other
network-related services should be working as well." [SH]
Suspend-to-RAM
It works, but not sufficiently: after resume LAN and WLAN both are somewhat dead and the machine cannot shut down properly afterwards. First, also the hardware clock was reset, but that problem has vanished after some time (?). The kernel and config shipped by Georg Greve (see below) keeps the LAN alive but shows the same behaviour as described above, although Georg says it works on his machine just fine.
echo -n "mem" > /sys/power/state initiates the processkernel-wise, but you should setup a custom script to stop/start services, unload/load modules, etc. which depends on your distribution, laptop and software-setup. That script should at least unload USB modules.
Suspend-to-Disk (SWSUSP2)
After fiddling around for quite some time, SWSUSP2 somewhat works on that machine with kernel 2.6.1, albeit there are some issues to be resolved where it does not work always perfectly after resume (PCMCIA, ALSA, KLaptopdaemon). Grab the sources from swsusp.sf.net
, the core patch and the latest kernel-specific patch for 2.6.1 (2.6.1-rev6) and patch your kernel. Do not forget to download the latest suspend script (0.18).
If you use a modified suspend.conf, then it should work for a SuSE 9.0.
Users of other distributions might have to change names of services. There is one major drawback: there is no 3D acceleration for XFree86 possible at the moment when you want to use SWSUSP2 due to problems with agpgart/i830 on resume.
Check this thread
on swsusp-devel to learn more about my attempts.
Addendum: kernel 2.6.7 with swsusp 2.0.0.93 and latest ACPI seems to work reliably if you configure your system properly. The graphics's problems seem to have been resolved.
Patched Kernel 2.4.24
At the moment, it seems best to use the latest 2.4 kernel, because you will
not have the problems with IrDA as mentioned above and even SWSUSP2 works, so
you can hibernate. This patch for 2.4.24
contains CPUfreq, ACPI, ACPI4ASUS, cryptoloop,
laptop-mode and SWSUSP2
. You might be
interested in the Kernel config file for 2.4.24, too.
Patched Kernels >=2.6.4
Get a vanilla Kernel 2.6.4
. Apply
this patch and this config file. It contains current ACPI, SWSUSP2, Bootsplash, Laptop-Mode2, AES Assembler-Implementation and USB-UHCI resume fix.
There is also a patch for 2.6.7 and complete Debian packages for
2.6.9 and
2.6.10
(this
one is a courtesy of Georg F. Greve).
Bugzilla Entries
There is also a Debian Kernel Package 2.6.7
available, including patches like ipw2100-0.51 and current ACPI.
For ACPI see this thread in the ACPI mailing list
.
Note: Please install appropriate versions of depmod, insmod et.al.
you may install the Debian/GNU Linux package module-init-tools
to achieve that.
Also the boot option nolapic is required.
Additionally a Debian Kernel Package 2.6.9.
I made the experience that, with SWSUSP2 2.1, 3D is broken after resume.
You would have to restart the XServer to make it work again. you also
need an
updated hibernate-script
,
also please check carefully whether SpeedStep works on your machine
afterwards, a
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq
and an
lsmod | grep speedstep
should suffice. If SpeedStep doesn't work apply the latest BIOS from ASUS.
Software on the Net
Where I learned all this:
Some Notes about SuSE 9.1
How to get the hotkeys running?
1) deinstall powersave, kpowersave packages
2) install acpid package
3) additionally to make the battery icon run again edit
/opt/kde3/share/services/kded/klaptopdaemon.desktop
and set X-KDE-Kded-load-on-demand=true.
Other Resources
Credits
This report is a courtesy to TuxMobil by Denis Sunko <asus_at_hi.htnet.hr>.
Addendums for BIOS, Modem, ACPI, IrDA, Suspent-To-RAM, SWSUSP2 and WLAN by Sebastian Henschel.
Kernel 2.4.24, 2.6.4 and Bugzilla stuff from Georg C. F. Greve
.