Linux on ASUS M2 Notebook

The Asus M2400 is a fine notebook, which works very good under Linux. I still have some problems with the multimedia keys. All other Hardware is supported and working. It was well equipped with additional, free accesoires like an USB-mouse and a laptop-bag. This document has nothing to do with Asus, they don't even know it exists. There is no guarantee that the information on this page is accurate, please don't hold me responsible if your experience is different from the information here.
Laptop Image
Overview of connections

What you need:

Overview of installed PCI Devices

A small output of lspci:
00:00.0 Host bridge: Intel Corp. 82830 830 Chipset Host Bridge (rev 04)
00:02.0 VGA compatible controller: Intel Corp. 82830 CGC [Chipset Graphics Controller] (rev 04)
00:02.1 Display controller: Intel Corp. 82830 CGC [Chipset Graphics Controller]
00:1d.0 USB Controller: Intel Corp. 82801CA/CAM USB (Hub #1) (rev 02)
00:1d.1 USB Controller: Intel Corp. 82801CA/CAM USB (Hub #2) (rev 02)
00:1d.2 USB Controller: Intel Corp. 82801CA/CAM USB (Hub #3) (rev 02)
00:1e.0 PCI bridge: Intel Corp. 82801BAM/CAM PCI Bridge (rev 42)
00:1f.0 ISA bridge: Intel Corp. 82801CAM ISA Bridge (LPC) (rev 02)
00:1f.1 IDE interface: Intel Corp. 82801CAM IDE U100 (rev 02)
00:1f.5 Multimedia audio controller: Intel Corp. 82801CA/CAM AC'97 Audio (rev 02)
01:06.0 FireWire (IEEE 1394): Texas Instruments TSB43AB21 IEEE-1394a-2000 Controller(PHY/Link)
01:07.0 CardBus bridge: Texas Instruments PCI1410 PC card Cardbus Controller (rev 01)
01:0a.0 Communication controller: Conexant HSF 56k HSFi Modem (rev 01)
01:0c.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL-8139/8139C/8139C+ (rev 10)

Processor:

The M2400 is shipped with an Intel® PIII-Mobile with 1.2GHz, so you should use the (Pentium-III/Celeron(Coppermine)) Processor family in the kernel. I also compiled in MTRR (Memory Type Range Register) support and enabled Plug and Play Support. In the General Setup submenu I enabled beside PCI and Networking the support for hot-pluggable devices and ACPI. More about this in the appopriate sections.

Network:

The ethernet controller is a Realtek RTL-8139 chip, so compile the 8139too module and you should go. I haven't tried the 8139cp module yet, since it is still in experimental stage. Don't forget to add the module into /etc/modules.autoload

[*] Ethernet (10 or 100Mbit)
[*]   EISA, VLB, PCI and on board controllers
<M>     RealTek RTL-8139 PCI Fast Ethernet Adapter support

Graphics:

There is a known problem with the legacy graphic memory on the Intel i830 chipset. Read Intels Statement aubout this issue. The informations however seem to be not always correct. Read Manuel Chakravartys opinion and his odyssee to get the i830 working. When I tried to use the generic i810 driver for xfree it provided a bad result: Only a resolution of 800x640 in 8bpp graphics mode was possible. There a two workarounds for this problem: 1) Use the vesa drivers instead, this will bring you at least 1024x786 at 16bpp. 2) If your manufacturer has one available - get a BIOS update that allows you either to select the memory used for graphics or at least provides 8mb of video memory. Luckily ASUS provides a BIOS Update on the FTP Server to solve this problem. The drawback however is that you need some working copy of Windoze or MSDOS to flash the BIOS. I used the PHLASH Utlity and it worked fine, I now have enough video memory to run the i810 driver with 1024x786 at 32bpp.
 In the character devices submenu enable APGART support, then activate the AGP support for the GLX module and onboard support for the i830 chipset. Do not forget the DRI support and the i830m DRM driver.
<*> /dev/agpgart (AGP Support)
[*] Intel I810/I815/I830M (on-board) support
[*] Intel 440LX/BX/GX and I815/I820/I830M/I830MP/I840/I845/I850/I86
[*] Direct Rendering Manager (XFree86 DRI support)
--- DRM 4.1 drivers
<*>   Intel 830M

USB:

The notebook contains three USB hubs but only two USB ports on the rear. The optical mouse coming along has an USB adapter, so we need in the kernel Support for USB and toggle following options:

<*> Support for USB
[*]   Preliminary USB device filesystem
<*>   EHCI HCD (USB 2.0) support (EXPERIMENTAL)
<*>   UHCI (Intel PIIX4, VIA, ...) support (NEW)
<*>   USB Mass Storage support
<*>   USB Human Interface Device (full HID) support
[*]     HID input layer support

Now jump into the Input core menu and enable following options:

[*]     HID input layer support
<*>   Mouse support
(1024)    Horizontal screen resolution
(768)    Vertical screen resolution

Touchpad:

The touchpad is a PS/2 mice, so we enable Mouse support for PS/2 devices. In XFree the touchpad is configured as the default mice and we assign the USB mouse as additional input device, since it may not always be plugged in. With the following settings both devices work flawless together. The scroll wheel is enabled with the ZAxisMapping option.

Section "InputDevice"
Identifier "Mouse1"
Driver "mouse"
Option "Protocol" "PS/2"
Option "Device" "/dev/mouse"
Option "ZAxisMapping" "4 5"
EndSection

Section "InputDevice"
Identifier "Mouse2"
Driver "mouse"
Option "Protocol" "IMPS/2"
Option "Device" "/dev/input/mouse0"
Option "ZAxisMapping" "4 5"
EndSection

Section "ServerLayout"
InputDevice "Mouse1" "CorePointer"
InputDevice "Mouse2" "SendCoreEvents"
EndSection

See my XF86Config if you still have questions.

Sound:

It's up to you wheter you compile the Intel ICH (i8xx) module provided along with your kernel or use the more powerful ALSA modules like I did. Get the latest release, compile it and add our soundcard (it's an AC'97 Audio chipset) to /etc/modules.conf

alias snd-card-0 snd-intel8x0

You probably want to compile the alsa-tools as well to use amixer to set the volume and toggle on the muted soundcard.


Firewire:

I have enabled FireWire (IEEE1394) support in the kernel and from bootup it seems to work fine with the Texas Instruments TSB43AB21 controller. But due to lack of FireWire Hardware I cannot verify this. Please drop me a mail when you could do so.


IrDA:

Yes it is working! Grab the fine IrDA Utils form the Linux IrDA Project and read the excellent IrDA Howto when you plan to use your mobile phone as a modem. In the kernel enable IrDA subsystem support and compile following modules:

 <M> IrDA subsystem support                                                     
--- IrDA protocols                                                             
<M>   IrLAN protocol                                                           
<M>   IrNET protocol                                                           
<M>   IrCOMM protocol
Infrared-port device drivers  --->
<M> IrTTY (uses Linux serial driver)


Now run following commands to load the modules and get your IrDA port registered as a serial port. In Gentoo Linux I wrote a script called /etc/init.d/irda and added it to the runlevel by issuing the command: "rc-update add irda default" Or do it manually:
modprobe irda
modprobe ircomm
modprobe ircomm-tty
modprobe irnet start-stop-daemon --start --quiet --pidfile /var/run/irattach.pid
\ --startas /usr/sbin/irattach -- /dev/ttyS1 -s

Now enable the IrDA connection on your IrDA device (a mobile phone or Palm) and check the /dev/ircomm0 with irdadump (Part of the IrDA Utils package) for some reasonal output. Also use ifconfig to check for the irda device. It should give you something like:
irda0     Protokoll:IrLAP  Hardware Adresse 35:86:27:82 
          UP RUNNING NOARP  MTU:2048  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:68012 errors:0 dropped:0 overruns:0 carrier:0
          Kollisionen:0 Sendewarteschlangenlänge:8
          RX bytes:0 (0.0 b)  TX bytes:2127804 (2.0 Mb)

Since I'm using my Siemens S40 mobile phone as a modem, I installed wvdial and configured it to my mobile phone provider settings. Set /etc/wvdial.conf according your needs and start the connection with wvdial. If you use a different phone this howto may be useful. I have an E.Plus Contract in Germany, so my etc/wvdial.conf  looks like this:
[Dialer Defaults]
Modem = /dev/ircomm0
Baud = 115200
Init1 = ATZ
Init2 = ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
ISDN = 0
Modem Type = Analog Modem
Phone = 123100
Username = anyuser
Password = anypassword

Modem:

The built in softmodem is a Conexant HSF 56k HSFi Modem that uses the Conexant Linux drivers. Unfortunately these are  not open-source, but at least they are working! Download and install these and run hsfconfig to configure it. (Gentoo users: emerge hsflinmodem). The modem will be accessible as /dev/ttySHSF0 but for better consistency I symlinked it to /dev/modem. Use wvdial to connect to the provider of your choice. In the kernel activate Network Device support, PPP-Protocol support, Async Serial Support and PPP Deflate Compression.

ACPI:

The M2400 works very well with the Linux ACPI. However proper ACPI support needs some tweaking with the kernel. Grab the latest ACPI patches and read the installation instruction how to patch the kernel. Gentoo users just do an "emerge acpi-sources". I also installed acpid, a daemon for ACPI to invoke special events depending on the laptop state. Read this fine ACPI Howto and the official ACPI specification sheets to get some understanding when you are new to ACPI. After successfully applying the patch select in General Setup the submenu ACPI support and compile in following modules:
[*] ACPI Support                                         
<*>   AC Adapter                                                               
<*>   Battery                                                                  
<*>   Button                                                                   
<*>   Fan                                                                      
<*>   Processor                                                                
<*>   Thermal Zone

I installed  autospeedstep,
a little program, running as daemon, which controls the power consumption and processor speed depending of the CPU load. Since the M2400 notebook is equipped with an Mobile Pentium III,the Intel Speedstep function is activated depending of the CPU load.  During a load below 70% the CPU is running at 800Mhz, otherwise it will switch back to 1,2Ghz. The function of the daemon can be verified with a:
cat /proc/acpi/processor/CPU0/performance
state count:             2
active state:            P1
states:
    P0:                  1200 MHz, 20000 mW, 500 uS
   *P1:                  800 MHz, 10000 mW, 500 uS


Framebuffer:

Coming soon.
Happy Linuxing with this fine notebook. If you have additonal infos or something else to say, just mail me at js AT ameds DOT de.