If you find this page really useful, please consider using PayPal (safe and secure) to donate some cash for my next term's textbooks or whatever Any size donation is really appreciated!
I used to have a Toshiba Satellite 4100XDVD which my friend GrayZ was kind enough to basically give me. (As of December 2004 it's not working, the battery no longer charges. I'm thinking of turning it into a picture frame thinger.) The 4100XDVD has a Mobile P2 400mhz, IrDA, a winmodem, 2 PCMCIA slots, DVD-ROM drive, 6.4gb HD, FDD, 1 USB slot, ESS Maestro soundcard, ACPI and APM support. For more, see the Toshiba webpage where you can grab a PDF for your laptop. I didn't write a credits part of this webpage, because it would be too hard: I used *SO* many webpages in order to get everything going! So if you see something that you feel you need credit for - it's yours!
Software-wise, i'm running Gentoo Linux (latest as of January 2004), and kernel 2.6.3. Most of the instructions here should NOT be distribution or 2.6.x specific, so check out the info before you flip to the next webpage.
This webpage is NOT designed to be used by newbies -- there are far too many other pages out there for newbies that are WAY better than anything I could write, so why bother. This page is intended to be used by people who are familiar with Linux, and are stuck on one particular point on getting Linux fully function on Toshiba Laptops.. Most likely you'll have arrived at this page using Google or some other search engine. I sincerely hope I can help you! Feel free to email me, if you can find my address. Hint: it's on this site...
- PCMCIA network card: Xircom REM56G-100 (10/100 NIC + modem)
- CardBus (PCMCIA) wireless card: DLink DWL-G650
- USB Mouse
- Infrared port
- New - Video card (Trident 9525 DVD)
- APM - APM broken on many many Toshiba laptops. UPDATE: Apparently APM support is fine in NetBSD on this exact laptop (a reader emailed me this). Therefore, it's either the Linux support that is poor, or NetBSD jumps through hoops to support broken APM. No idea.
- WinModem - Don't need it, haven't bothered compiling the Lucent driver (not hard)
- This is perhaps the most important part of this webpage, as Toshiba laptops aren't easy to get working as far as power-management goes. First off, although the Toshiba specs say the Satellite 4100XDVD (and MANY others) are capable of both ACPI and APM, that's not true, the APM is horribly broken. The ACPI is a little broken too, but completely usable. I'm using ACPI, and you don't have to patch the kernel if you're using the 2.6.x series like I am. You need to compile support in for the following modules:
For more information, see my kernel config below. Next, you will need to force the acpi on, using the kernel parameter
acpi=force. For the less enchanted, this means changing your lilo.conf and re-running lilo if it's LILO you're using as your boot-loader; for grub you can just edit your grub.conf.
Now, you have ACPI going, but you'll notice that when you try to resume from a standby or suspend, the machine crashes! Also, you'll get weird behavior with hot-pluggable things, like if you take the PCMCIA card out and then take the USB-mouse out and stick it back in, the machine will freeze. Or, if you take the PCMCIA card out and stick in a CardBus card, freeze. These oddities are caused because the ACPI on toshiba laptops is slightly broken. There are two things you can do to fix it: fix the ACPI on the laptop, or use the broken ACPI differently. I tried the first option, by upgrading the BIOS on my 9100XDVD to the newest I could find from Toshiba's official website, and then searching all over for a newer DSDT to install (consider that like an ACPI "map", that's what's broken as far as I understand). Unfortunately I couldn't find a newer DSDT, so I took the second option. To fix all these errors, add
pci=noacpito your kernel append parameters. So now you have two parameters you should be booting with for ACPI to work properly.
UPDATED: I've fixed all my problems, by putting in a new DSDT. Do you see this in your dmesg, even after updating your laptop's firmware to the newest version offered by Toshiba? Then read on! Note that my Satellite 4100XDVD uses the same DSDT as the 4030CDT ! Yours may too...
ACPI: DSDT (v001 TOSHIB 4030 0x19991112 MSFT 0x0100000a) @ 0x00000000 ACPI: Vendor "TOSHIB" System "4030 " Revision 0x19991112 has a known ACPI BIOS problem. ACPI: Reason: Implicit Return. This is a recoverable errorNote that this isn't for newbies at all ! If this seems too complicated to you, then use the pci=noacpi option that I talked about above.
First of all, an explanation of the problem: for anyone who knows programming, you can return from a function-call or a subroutine "implicitly", ie. you can stop the control-flow or terminate the control-flow without issuing an explicit command to do so; also, return-values can be omitted. Something like this is going on with the Toshiba's DSDT. The ACPI "language" is very demanding, and these "Implicit Returns" are breaking things. So, someone has gone through the DSDT and made them explicit, fixing the problem! Read on.
First, links to all the pages I used:
- Intel, with some basic instructions, but more importantly the "iasl" compiler/de-compiler
- memebeam.org, a VERY advanced do-it-yourself page, if you want to mess with the DSDT yourself. I didn't use this page much, as I didn't fix the DSDT myself.
- acpi4linux's DSDTs, a hugely useful page containing the links to many pages that helped me figure this stuff out, but most importantly, the DSDT itself.
- the DSDT-in-initrd page, the method of loading custom DSDTs that I used
- my DSDT materials, which you can use if you're too lazy to grab them from the other sites (risks using an older version if they've been updated), or if one of the other pages goes down. I'm such a nice guy
So, first I grabbed a "fixed" copy of the 4030CDT's DSDT, the version shown by the dmesg output above, from the acpi4linux wiki. Remember, you must have the latest firmware for your laptop, or it might be the "wrong" DSDT ... The file extensions are a little hard to understand:
- .aml - compiled, ready-to-be-used by ACPI
- .dsl - decompiled, readable
- .asl - decompiled, readable, same as .dsl as far as I can tell!
- .hex - In C/C++ hex form, useful if you want to put it in an include, for compiling directly into the kernel (not what I did)
Now, you need to make the new DSDT usable. Check out the link above to the DSDT-in-initrd page. It's a little difficult to read, but all I had to do was copy the new .aml file to /boot/dsdt.aml (that's right, a straight copy, because I didn't already have an initrd; if you do, then you need to mess around some, the page has info for this), and edit my grub.conf to add the initrd line (shown in context below):
# For booting GNU/Linux title linux-2.6.3-newest root (hd0,0) kernel (hd0,0)/boot/kernel-2.6.3-3 root=/dev/hda1 vga=791 acpi=force # pci=noacpi initrd /boot/dsdt.amlNotice how I don't need the pci=noacpi any more! This is because by fixing the ACPI's DSDT, you don't have broken ACPI-PCI interaction. Joy!
Next, you need to patch your kernel to handle DSDTs in initrd. The patch can be found at the previously stated DSDT-in-initrd page. Note that the "2.6.1 vanilla" patch worked fine for me, and i'm using 2.6.3 with some Gentoo-specific patches. One hunk was offset, but no worries, it's working perfectly. Now, you need to re-compile your kernel, ensuring that the following things are turned on:
- RAMdisk support (NOT as a module, compile it in directly)
- initrd support (should be right underneath RAMdisk support, or in Block Devices)
- Under ACPI support, the new option the patch provides: "Read DSDT from initrd"
Now, recompile, reinstall GRUB with it's new options (or use lilo, whatever), and you should be off to the races! See my DSDT and/or my kernel-config for more info.
You should now be able to use your ACPI. How do you do that, you ask?! Well, there are numerous utilities that'll work, but if you're like me and you're using KDE 3 (i'm using 3.2 as of february), I highly recommend KLaptop. It's configurable, and it works very well. Note that i've never been able to get Hibernation to work right - my laptop crashes coming out of it. I believe this to be the busted DSDT, but I don't really care because suspend works great and that's all I need.
Updated AGAIN, March 21th '04: It seems that with the UHCI USB hub (what my laptop has), you lose USB functionality after you resume from a suspend - it's a known USB kernel bug and they're workin' on it, some reports are that it's fixed on 2.6.4, some are that it's not. I haven't tried 2.6.4 yet. Another problem is my PCMCIA cards - when an older 5V 16bit PCMCIA card (not CardBus) card is in, and I resume, it's toast too; again, likely to be a kernel bug that's being worked on.
The fix for the USB, until it's actually fixed in the source, is to build everything from the UHCI host controller onwards as a module, and have it auto-unloaded before you suspend, auto-reloaded after you resume. The fix for the PCMCIA is to call cardmgr eject before suspend, and cardmgr insert after resume. I believe the reason why the cardmgr suspend/resume functions don't work is that I have cards that are not fully supported.
However, that isn't very useful when your laptop is auto-suspending, if you're like me and using KDE's KLaptop to do it for you. There isn't a way in KLaptop for you to have it run commands before/after suspending/resuming. So, I went ahead and did some DIRTY DIRTY hacking, and made a patch for anyone who wants it:
A couple of things you have to keep in mind if you want to use this patch:
- it expects you to have sudo configured and working for the command(s) you run, installed in /usr/bin
- i've only hacked the ACPI part of KLaptop - if you want it to work for APM, you'll have to do a little hacking; i'd rate the hack at extremely easy, should take about 30 minutes tops
- no documentation, NO WARRANTY - if it formats your hard-drive i'm not to blame
- this is obviously a source-patch, so you'll need to re-compile KLaptop, which is found in the kdeutils source package. Note that I built this patch against the stable (normal) KDE 3.2.1 kdeutils source, so it'll patch "best" against that. However, given the nature of how simple the patch is, I wouldn't be surprised if it worked for other versions too...
- Nothing special here. The chip is the ESS ES1978 (Maestro 2E), and is directly supported by the Linux kernel (well, at least it is in the version i'm using, 2.6.3). For more info, see the kernel config section.
- The Satellite 4100XDVD (and many others too) have a ToPIC97 controller that handles the PCMCIA and CardBus devices. In Linux you need to enable two drivers other than the normal PCMCIA/CardBus support; the yenta driver and the i82365 driver. The former handles CardBus cards, and the latter handles PCMCIA cards. I recommend compiling support for these puppies straight into the kernel over loading them as modules. NOTE: Definitely read the ACPI section before using any PCMCIA/CardBus cards!
- I only use the network part of this card, as I have no use for a modem. To use, make sure you compile the xirc2ps_cs module, or put support straight into the kernel. Next, ensure you have cardmgr running. By default, cardmgr should already know about this card, you don't need to modify it's configuration. However, here are the lines just in case you need them:
device "xirc2ps_cs" class "network" module "xirc2ps_cs" opts "if_port=2" card "Xircom CEM56 Ethernet/Modem" version "Xircom", "*", "CEM56" bind "xirc2ps_cs", "serial_cs"
if_port=2option tells the xirc2ps_cs driver to use 10Base-2 or "Thin" ethernet -- this is the kind that goes over those old coaxial cables. The only reason I use this is because one of the pins on my card is damaged, and this is the only ethernet type that works. The other values are 1, for 10Base-T, and 4 for 100Base-T. If this option isn't specified, it'll autodetect. Only force it if you have a reason to (shitty cable, shitty router, whatever)
The modem part will probably work with the serial_cs module as listed above, but as I mentioned, I have no need for it (yet).
- A couple of notes: first off, this is a multi-mode card which does 802.11b and 802.11g. Secondly, BE VERY WARY OF D-LINK MODEL NAMES AND REVISIONS! D-Link products are fine, but they have STUPID model names: the DWL-G650 (my card) is a completely different card from the DWL-G650+. Also, my card has *many* revisions, A, B1/B2/B3, and Cx. If you have a C series card, you are probably out of luck.
Luckily, D-Link has two excellent pages you can check out:
here. However, it turns out if you have Gentoo, all you have to do is:
ACCEPT_KEYWORDS="~x86" emerge madwifi-driver
If you don't have Gentoo, the FAQ shows you how to do pretty much everything you need to do to get the driver installed.
However, there is more you need to do than just get the driver! First of all, before going any further, go down and read through the whole ACPI section to ensure you have pci=noacpi and kernel options like this in order that the card works.
There are a few ways you can proceed from here. For some reason, this card when inserted without the kernel modules loaded will not show any info under cardctl. That means that you can't have cardmgr automatically detect the card and put the modules in for you, you need to load them on bootup. So, add to
/etc/modules.autoload.d/kernel-2.6the three modules,
ath_hal ath_pci wifi. Next, ensure that you have the Wireless (wifi) section of the kernel compiled in, or loaded as a module. Check out my kernel config below if necessary.
Next you need to get the wireless utilities. This was annoying for me, because I couldn't find anyone who'd tell me where they live. If you use Gentoo, you can just
emerge wireless-tools- otherwise you need to go to here and follow instructions that are hopefully there (never been there myself).
Finally, you need to nab a script that'll put this all together for you. You can try yourself, using the wireless-tools, but it's much easier to capitalize off of the hard work of others that have gone before you. The madwifi FAQ page has links to different shell scripts for Debian, Gentoo, and a few others. I use the "alternative" Gentoo script, which you can find here - the link goes to a discussion and the first post has the links to the script(s).
The USB support on this laptop is UHCI, so compile support for the UHCI HCD into the kernel. Again, on this one I recommend compiling it straight in, not as a module. Don't forget to add support for the type of your devices - I got my USB mouse working without a single problem, gpm detects it by using the
-t imps2flag, which means it's being emulated like a PS/2 mouse I believe. On an unrelated note, make sure if you're trying to use a Compact Flash (CF) or other external mass storage device like a USB-keychain or keyfob (british) or flash card, that you compile SCSI support into your kernel. You'll need SCSI disk support and a few others too, search the web for this (I don't do this, just helped my dad get it working on his machine).
- Updated. I have the Sony Ericsson T310, with firmware R2B (newest is R3B but my provider, Fido (Microcell), won't update phones to R3B, because apparently it causes some phones to short-circuit. Not sure if I believe them, but whatever. However, I have gotten some basic infrared stuff working with T310 w/R2B ! Here's what you need:
- the donauboe infrared driver (see kernel config), provides toshoboe too (what I use)
- irda driver
I build both the above as modules, and load them. Here's my script, note the important two echo lines:
#!/bin/sh modprobe donauboe irattach irda0 -s echo 1000 > /proc/sys/net/irda/min_tx_turn_time echo 1 > /proc/sys/net/irda/max_tx_window
You'll want to check out these great resources:
That first link is the most useful. I have had some luck with obexftp, but more with ircp. Ircp is simple to use, and works - make sure you get the phone to transfer files to the computer, instead of asking the computer to retrieve files from the phone! One thing I had a hard time getting was a sample VCF file. Here's one from the phone:
BEGIN:VCARD VERSION:2.1 N:Lastname;Firstname EMAIL;INTERNET;PREF:firstname.lastname@example.org TEL;CELL:1234567 END:VCARD
My Microsoft Outlook (2003) exports to VCF in a way that is different than above, but still compatible! If I send the vcf file to the phone using ircp, it works perfect. Here's an example of an MS VCF file:
BEGIN:VCARD VERSION:2.1 N:Kazak;Alex FN:Alex Kazak TEL;WORK;VOICE:(222) 222-2222 TEL;HOME;VOICE:(111) 111-1111 TEL;CELL;VOICE:(333) 333-3333 EMAIL;PREF;INTERNET:email@example.com REV:20040228T195202Z END:VCARD
I have also been able to transfer my own themes to the phone. I used my windows desktop and some theme-creation freeware (needs to be Sony Ericsson specific, there's a billion out there, try googling Theme Creator Sony Ericsson), and then used ircp as above to beam over the theme file. I'll be putting more in this section when I know more.
The video card in my laptop is a Trident 9525DVD, also known as the Trident CyberDVD 9525. I didn't have any troubles getting this working under linux, here's the relevant part of my XF86Config:
Section "Monitor" Identifier "toshLCD" HorizSync 31.5-48.5 VertRefresh 55-90 Modeline "1024x768" 65.00 1024 1032 1176 1344 768 771 777 806 -hsync -vsync Section "Device" Identifier "trident" Driver "trident" EndSection Section "Screen" # The Identifier, Device and Monitor lines must be present Identifier "Screen 1" Device "trident" Monitor "toshLCD" # The favoured Depth and/or Bpp may be specified here DefaultDepth 16 SubSection "Display" Depth 16 Modes "1024x768" ViewPort 0 0 Virtual 1024 768 EndSubsection EndSection
Now, I also have a Windows 98 Second Edition (win98se) partition on this laptop, installed so that I could play Diablo 2 on the laptop. I installed the latest drivers that Toshiba makes available to the public, as of March 2004, and even in 2D mode Diablo2 couldn't run: broken DirectDraw support, Direct3D busted too. So, after MUCH reading and research, I discovered that you have to use the drivers for the Fujitsu LifeBook S4542 laptop. Here's the link to the Windows 98 specific page, and here is a link directly to the file. Anyways, that worked great for me in win98se - if you examine the driver, it's just a later version of the Toshiba one. Why Toshiba/Trident didn't release it, I'll never know.
Note that these are done with the wireless card inserted, not the Xircom.
To see my dmesg output, click here.
To see my lspci output, click here.
To see my kernel config, click here