Linux on a Toshiba M30-841 notebook

by Marco Kraus ( linuxlaptop@linuxstuff.de )

( last updated 14.08.2004 )


I installed a Debian Sid on this new Toshiba notebook.
With an original Linuxkernel 2.6.8


System:

  • Intel Centrino 1,5GHz (Pentium M 1,5GHz and IPW2100 WLan)
  • NVIDIA GeForce FX Go 5200
  • Intel eepro100 networking card
  • Intel ICH4/AC97 Soundcard
  • Modem: Intel Corp. 82801DB (ICH4) AC'97 Modem Controller
  • FireWire (IEEE 1394): Texas Instruments TSB43AB22/A IEEE-1394a-2000


  • At a glance:

    Works without any tweaking:

  • CD/DVD recorder
  • PCMCIA
  • networkcard
  • firewire

  • Works with easy tweaking (see detailed description):

  • soundcard
  • DVD Player
  • X-Server
  • ACPI battery/thermo/CPUthrotteling/screen brightness

  • Works with hard tweaking (see detailed description):

  • keyboard
  • ipw2100 wlan

  • Doesn't work:

  • suspend when nvidia drivers installed


  • networkcard

    Like most newer satellite, there is an intel eepro100 integrated. So use the e100 or eepro100 modules and be lucky.

    DVD-Player

    When I received this new Toshiba drive, I directly booted my Linux CD Roms and never run any other OS. The DVD Player comes with NO region code set. So if you don't set the region code manual, the player doesn't play DVDs (except region code 0). So if you get the IFO error: "libdvdread: Invalid title IFO", then just set a region code for your drive with the nifty tool: regionset (that really cost my some nervs so find that out).

    X-Server

    Also no much problems here. I installed the nvidia binary drivers (see nvidia website) ad configured my monitor (nothing special except the modline with the 1280x800 resolution).
    Just have a look a my XF86Config here.

    Sound:

    I used the OSS module i810_audio. With Kernel 2.6.5+ also Alsa works great. For Alsa use module snd_intel8x0. It is useful to activate OSS emulation.

    ACPI:

    dynamic screenbrightness, battery, temerature, cpu throtteling (also dynamic cpu frequency scaling) works without problems. Just use Kernel 2.6.x and activeate acpi in you bootmanager (add option "acpi=on").
    Maybe you want to have a look at my kernel-config
    Suspend to RAM has problems with getting back when you have installed the nvidia drivers. Problem is, that nvidia binaries don't support ACPI right now. This should be integrated within the next few releases. So stay tuned.
    The GeForce52000 also has Problems with switching to a terminal while x is running (garbage output). This seems to be a bug. Some people reported that Framebuffer causes this error. I didn't try it without FB.

    Keyboard:

    Urgh, the bad thing on almost ll Toshiba notebooks is the keyboard. The typical bouncing problem also here on the M30. But this time it seems that the problem is caused by the synopsis touchpad.
    So we have to fix some things: First of all, we need to supress synoptic recognition. That means, that we force our kernel to load natove ps/2 support. Not that buggy synoptic stuff.
    On the website of Marc Saric (see http://www.marcsaric.de/m30_linux1.html for his very helpful Toshiba M30 site) I found a hint bei Simon Effenberg:
    --- cut ---
    
    I have got email from Simon Effenberg , who mentioned, that there is a bug
    in the PS/2-driver, specifically in "./drivers/input/mouse/psmouse-base.c" which causes the
    keyboard-bouncing and which can be fixed with a small patch.
    
    The original looks like this
    
    /*
     * Try Synaptics TouchPad
     */
          if (psmouse_max_proto > PSMOUSE_PS2 && synaptics_detect(psmouse)) {
                    synaptics_hardware = 1;
                    psmouse->vendor = "Synaptics";
                    psmouse->name = "TouchPad";
    
                    if (psmouse_max_proto > PSMOUSE_IMEX) {
                            if (synaptics_init(psmouse) == 0)
                                    return PSMOUSE_SYNAPTICS;
    
    /*
     * Some Synaptics touchpads can emulate extended protocols (like IMPS/2).
     * Unfortunately Logitech/Genius probes confuse some firmware versions so
     * we'll have to skip them.
     */
                          psmouse_max_proto = PSMOUSE_IMEX;
                    }
            }
    
              and has to be changed to
    
    /*
     * Try Synaptics TouchPad
     */
    /*      if (psmouse_max_proto > PSMOUSE_PS2 && synaptics_detect(psmouse)) {
                    synaptics_hardware = 1;
                    psmouse->vendor = "Synaptics";
                    psmouse->name = "TouchPad";
    
                    if (psmouse_max_proto > PSMOUSE_IMEX) {
                            if (synaptics_init(psmouse) == 0)
                                    return PSMOUSE_SYNAPTICS;
    */
    /*
     * Some Synaptics touchpads can emulate extended protocols (like IMPS/2).
     * Unfortunately Logitech/Genius probes confuse some firmware versions so
     * we'll have to skip them.
     */
    /*                      psmouse_max_proto = PSMOUSE_IMEX;
                    }
            }
    */
    
              i.e. uncommenting the Logitech/Genius-stuff
    
    --- cut ---
    

    After this, the bouncing was gone, but you often get some delay while writing. I saw that there were still some unknow keys, and your kerneldriver writes a error message. But writing to disk need time. So every time a unknow key is pressed (this is quite often) the kernel writes errormessages to disk.
    You can supress this with commenting out like in my following example:

    (File: /usr/src/linux-2.6.5/drivers/input/keyboard/atkbd.c)

    --- cut ---
    [...]
    
    	switch (atkbd->keycode[code]) {
    		case ATKBD_KEY_NULL:
    			break;
    /* 		case ATKBD_KEY_UNKNOWN:
    			printk(KERN_WARNING "atkbd.c: Unknown key %s (%s set %d, code %#x on %s).\n",
    				atkbd->release ? "released" : "pressed",
    				atkbd->translated ? "translated" : "raw",
    				atkbd->set, code, serio->phys);
    			if (atkbd->translated && atkbd->set == 2 && code == 0x7a)
    				printk(KERN_WARNING "atkbd.c: This is an XFree86 bug. It shouldn't access hardware directly.\n");
    			else
    				printk(KERN_WARNING "atkbd.c: Use 'setkeycodes %s%02x ' to make it known.\n",code & 0x80 ? "e0" : "", code & 0x7f);
    			break;
    */		case ATKBD_SCR_1:
    			scroll = 1 - atkbd->release * 2;
    			break;
    		case ATKBD_SCR_2:
    			scroll = 2 - atkbd->release * 4;
    			break;
    		case ATKBD_SCR_4:
    			scroll = 4 - atkbd->release * 8;
    			break;
    		case ATKBD_SCR_8:
    			scroll = 8 - atkbd->release * 16;
    			break;
    		case ATKBD_SCR_CLICK:
    			click = !atkbd->release;
    			break;
    
    [...]
    --- cut ---