So I worked some more on the laptop and I think I can now give a pretty comprehensive overview of everything.
To recap from my first post, this is for a Lenovo 3000 V100 C5U. The stuff that works out of the box on Mandriva Linux 2007 (any version, don’t need commercial stuff) with no fiddling:
X, through the internal display, at native resolution of 1280×800
Power management (battery power is correctly monitored, throttling works, display is dimmed when I unplug the AC)
Startup / shutdown
Stuff I didn’t test:
Stuff I had trouble with:
External display at 1680×1050
Suspend / resume
I was able to fix all the stuff I had trouble with.
The wireless network chip is a Broadcom 4312. It works with ndiswrapper with the driver supplied by Lenovo, but with ndiswrapper 1.21 – as supplied with MDV 2007 – I discovered I have to ‘install’ the Windows driver again with drakconnect or ‘ndiswrapper -i’ every time I boot up, or else it just doesn’t come up properly. However, with ndiswrapper 1.28 (built from source), it works fine at every boot with no need to ‘install’ the Windows driver again. The native bcm43xx driver supplied with 2007 does not currently support this chip.
The external display required the use of the ‘modesetting’ branch of the X.org i810 video driver, from the development git repository. I mostly followed this HOWTO, obviously ignoring the Ubuntu specific bits. With an xorg.conf generated by XFdrake (set the monitor to 1680×1050 generic flat panel), this works with no problems. I had much more difficulty trying to get the external display to work with the mainline i810 driver, and even when it did work, there were fuzzy patches on the output.
Unfortunately the modesetting branch does not currently play well with the internal panel, so I have to use the mainline branch for that. To switch between the two displays I must copy the appropriate version of the i810 driver as /usr/lib/xorg/modules/drivers/i810_drv.so and reboot (the same xorg.conf works for both). Hopefully future improvements to the modesetting branch, and Keith Packard’s new randr 1.2 branch in xorg-server, will allow on-the-fly switching between the two displays with automatic desktop resizing. I plan to follow this area of development in future.
I worked out in the end that my issues with suspending and resuming appear to be caused either by a USB hub I have or one of the devices plugged into it (or possibly by having the external monitor connected). I have a USB hub on my desk with a USB A -> B cable (usually not connected to anything), my mouse and (at the time of the tests) the Turtle Beach USB sound card I bought plugged into it. When I’m using the system as my desktop, I plug this in (it’s basically acting as a docking station). In my previous suspending tests, this was always connected. Today I decided to test suspending with the machine in the ‘laptop’ configuration, as that’s how I actually intend to use it. With this USB hub and the external monitor disconnected, suspending and resuming, both to RAM and to hard disk, work perfectly, with no special configuration required (note that I use GNOME, which uses gnome-power-manager to handle suspending, which in turn uses pmsuspend; in Mandriva 2007, if you use KDE and suspend via klaptop, it does not go via pmsuspend, so you may not get the same result. If you’re a KDE user I recommend you set up a desktop launcher which runs the command ‘pmsuspend memory’ , and use that to suspend to RAM). I could do more testing to isolate the cause of the previous failures, but since I’ll only ever actually want to suspend with the system in ‘portable’ mode, the current situation is good enough for me.
If anyone has any questions or problems running Linux on this model of laptop, do feel free to get in touch. It’s a great little system.