Linux on Lenovo TP-SL510

Thinkpad-SL510

Hardware Specs

  Processor        Intel Core 2 Duo T5870 2.1GHz (2MB L2 cache)
  Video            Intel GMA4500 - X4500MHD with external VGA and HDMI
  Memory           2048MB DDR3 RAM 1066MHz(PC3-8500)
  HDD              Fujitsu MJA2250BH G2 250GB (SATA, 5400rpm)
  Optical          HL-DT-ST DVDRAM GSA-T50N (DVDRW, DL 24x)
  Sound            Intel HD Audio (Realtek ALC269) with int. microphone
  Display          15.6 inch WXGA TFT 1366x768 max, AntiGlare display
  Networking       RTL8111/8168B Gigabit ethernet and Intel 5100AGN wireless
  Bluetooth        Broadcom (0a5c:217f)
  Touchpad         UltraNav, Synaptics PS/2 and a TPPS/2 TrackPoint
  USB              4 x 2.0 USB ports
  PC Express       1 x PC-Express port /54
  CardReader       JMicron 7-in-1 (SD/XDH/MMC/MS/MS PRO/xD)
  WebCam           Lenovo, UVC webcam (17ef:4810)

Recent Changes

  * Apr 23 new BIOS, v1.46 solves nothing
  * Jan 10 working auto mute on headphone insert
  * Jan 08 updates for thinkpad_acpi support
  * Jan 05 new BIOS, v1.41, solves nothing

System Installation


If you're wondering; this laptop works fine with GNU/Linux and you should have no doubts about buying it or switching to GNU/Linux. Just make sure to choose a distribution that had a release recently.

lspci

00:00.0 Host bridge: Intel Corporation Mobile 4 Series Chipset Memory Controller Hub (rev 07)
00:02.0 VGA compatible controller: Intel Corporation Mobile 4 Series Chipset Integrated Graphics Controller (rev 07)
00:02.1 Display controller: Intel Corporation Mobile 4 Series Chipset Integrated Graphics Controller (rev 07)
00:1a.0 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #4 (rev 03)
00:1a.1 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #5 (rev 03)
00:1a.2 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #6 (rev 03)
00:1a.7 USB Controller: Intel Corporation 82801I (ICH9 Family) USB2 EHCI Controller #2 (rev 03)
00:1b.0 Audio device: Intel Corporation 82801I (ICH9 Family) HD Audio Controller (rev 03)
00:1c.0 PCI bridge: Intel Corporation 82801I (ICH9 Family) PCI Express Port 1 (rev 03)
00:1c.1 PCI bridge: Intel Corporation 82801I (ICH9 Family) PCI Express Port 2 (rev 03)
00:1c.2 PCI bridge: Intel Corporation 82801I (ICH9 Family) PCI Express Port 3 (rev 03)
00:1c.3 PCI bridge: Intel Corporation 82801I (ICH9 Family) PCI Express Port 4 (rev 03)
00:1c.4 PCI bridge: Intel Corporation 82801I (ICH9 Family) PCI Express Port 5 (rev 03)
00:1c.5 PCI bridge: Intel Corporation 82801I (ICH9 Family) PCI Express Port 6 (rev 03)
00:1d.0 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #1 (rev 03)
00:1d.1 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #2 (rev 03)
00:1d.2 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #3 (rev 03)
00:1d.7 USB Controller: Intel Corporation 82801I (ICH9 Family) USB2 EHCI Controller #1 (rev 03)
00:1e.0 PCI bridge: Intel Corporation 82801 Mobile PCI Bridge (rev 93)
00:1f.0 ISA bridge: Intel Corporation ICH9M LPC Interface Controller (rev 03)
00:1f.2 SATA controller: Intel Corporation ICH9M/M-E SATA AHCI Controller (rev 03)
00:1f.3 SMBus: Intel Corporation 82801I (ICH9 Family) SMBus Controller (rev 03)
02:00.0 System peripheral: JMicron Technology Corp. SD/MMC Host Controller
02:00.2 SD Host controller: JMicron Technology Corp. Standard SD Host Controller
02:00.3 System peripheral: JMicron Technology Corp. MS Host Controller
02:00.4 System peripheral: JMicron Technology Corp. xD Host Controller
05:00.0 Network controller: Intel Corporation PRO/Wireless 5100 AGN [Shiloh] Network Connection
08:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168B PCI Express Gigabit Ethernet controller (rev 03)

Kernel

At the moment I'm running a 2.6.38.3 kernel provided by Arch. It's a very well configured kernel, very modular, and everything works OK with it. I have no intention of compiling my own for now, so I don't provide a kernel config file like some articles do.

Installation

I partitioned the hard drive during installation:
  Disk:
      /dev/sda
  Partitions:
      /dev/sda1 - 80MB - ext2 - /boot  (* flagged bootable)
      /dev/sda2 - 50GB - ext3 - /
      /dev/sda3 -  2GB - swap - swap space
      /dev/sda4               - extended
      /dev/sda5 - 90GB - ext3 - /home
      /dev/sda6 - 90GB - ext3 - /mnt/storage
I booted the core CD and walked trough the setup. With Arch Linux you partition your drive(s), edit crucial config files like /etc/{rc,resolv,lilo}.conf ..., and install core packages. Once the system was running I updated the pacman (Arch package manager) database and installed everything else; X.org, graphic and audio drivers, libraries, window manager... everything you need on a workstation.

System Configuration


X11

For the initial setup I run xorgconfig, then edited xorg.conf to fine tune it. Graphics runs fine with the vesa driver, however I did install the opensource intel driver (xf86-video-intel) and that's what I'm using now.

HDMI / External VGA

Both cloned and extended displays are possible with this chip/driver. Both the VGA and HDMI outputs are working. For a static configuration you can take a look at my xorg.conf, but xrandr is widely used today for dynamic, on the fly setup and (re)configuration.

Backlight

The backlight controls (and buttons) do work trough the ACPI video module, but I noticed brightness level is reset on next boot (I suspect because I don't have the wmi driver yet - see ACPI section). This is what I added to my ~/.xinitrc to fix it in X11:
  # Brightness level
  # - xbacklight doesn't work with legacy, set level first
  xbacklight -set 13

  # Legacy control solves resetting brightness levels
  xrandr --output LVDS1 --set BACKLIGHT_CONTROL legacy

Framebuffer

Since Linux 2.6.32 the KMS (Kernel Mode Setting) support for Intel graphics is finally reliable. When using KMS no vga lines are required in your bootloader configuration, correct resolution is auto-detected.

Synaptics

The driver is now a part of X.org (xf86-input-synaptics), old project page can be found here, as for setting it up feel free to copy the config from my xorg.conf.d file. All the touchpad buttons work, including those below the trackpoint (and the trackpoint it self). Once you setup synaptics you also get tapping and scrolling functionality on the touchpad it self.

Extra keys

Some of the keys work out of the box, but not all. I didn't have much luck with them yet (see the next section).

ACPI

All ACPI modules work fine (battery, button, processor, thermal, video). Note that the thinkpad_acpi module was refusing to load with "not yet supported ThinkPad detected". That's because SL models actually have the IdeaPad firmware so this module is not needed anyway (same applies to tp_smapi). Instead take a look at the lenovo-sl-laptop project. It was supposed to bring full support to SL laptops, but it doesn't work with SL510.

It's also obsolete in favor of asus-laptop, SL and some Asus laptops have very similar DSDT, and support for SL laptops has been added to that kernel module in this commit. Unfortunately this module will not work with SL510, ever, because the ACPI interface is different, you can read my feature request for more information. In short; a wmi interface is exposed but currently none of the wmi modules can handle it, so someone will have to write one from scratch. Which will be hard to do if more people don't buy this laptop, or some other model doesn't have the same interface.

Until then our hardware will work without it, but with some limitations: several hotkeys are completely invisible to the kernel (hibernate, screen zoom and lock, microphone/wifi/bluetooth/touchpad toggle, battery status and the ThinkVantage button), fan control is missing and backlight has quirks as mentioned previously (but fixable in X11).

Update: since January 2011 thinkpad_acpi is loading properly and detecting some of the hardware. In fact all the extra keys work with it. But that's pretty much it, for example it breaks audio muting. This is good news however, and I have requested support from developers. You can read it here.

In userspace you can install acpitool or ACPI Client which replicate behavior of the old "apm" command, thus giving you temperature, battery... and all kind of other information.

Processor frequency scaling is possible with this CPU (see the cpufreq section). Also note that newer Linux kernels no longer have a fixed 1000Hz timer tick. The result (in theory) is huge power savings because the CPU stays in low power mode for longer periods during system idle. For other ways of saving power read sections below this one, and visit the LessWats project.

Suspend

You can choose between uswsusp, tuxonice and direct kernel suspend/hibernate. Uswsusp is completely software based, doesn't require any kernel modifications and gives you the possibility to use quirks and compress (+ encrypt) images during hibernation. I use it in combination with pm-utils, which is now the standard power management framework on every distribution and supports all three mentioned suspend methods.

Using uswsusp in this case didn't make a difference. This laptop has a serious bug at the moment, it can not be woken from suspend (to ram). No matter what key is pressed, or what you do to the power button it will not budge. I will keep this section updated as I search for solutions. Note that since Linux 2.6.35 hibernation (suspend to disk) is fully functional. Previously it was broken by the bugged Intel graphics driver.

Update: I flashed the firmware to the latest v1.46, but it made no difference. Even though the ChangeLog claimes they finally fixed it.

acpid

To setup acpid take a look in /etc/acpi, I mapped the power key to do a clean shutdown, Fn+Sleep to suspend, Lid closing to lock the desktop and AC events start laptop-mode-tools. My handler file is here.

laptop-mode

Laptop-mode-tools is a laptop power saving package for Linux systems (a shell script and a bunch of config files really). I configured acpid to call it when I switch to/from battery power. It can enable the Laptop Mode feature of the kernel, control CPU throttling, HDD power management, remount your partitions and setup the system do to less frequent writes, enable power saving for Intel HDA sound cards and Intel's SATA controllers, stop/start services and programs, remove modules... and a whole lot more (+ restoring the system to original state when AC is plugged in).

cpufreq

Install cpufrequtils first, then load the acpi-cpufreq module. Run cpufreq-info next to see what are your options. I chose not to use the cpufreq daemon or any utility other than laptop-mode-tools. I configured its cpufreq module to use the conservative governor (load cpufreq_conservative module) while on battery, with max and min frequencies identical to what cpufreq-info reported as max/min. Otherwise when on AC I decided to always use the performance governor (default, no modules to load).

APS

The hdaps module refuses to load with an "unsupported laptop" message. No other information available at this time.

Multimedia

This particular Intel HDA is supported by alsa, fortunately udev will load the modules (snd_hda_intel...) for you. First you must run alsamixer to unmute the channels, then store your config with alsactl store, that's it. Built in microphone also works, you should max out your Capture channels in alsamixer and then try to record something with a utility like arecord:
  $ arecord -f cd -d 3 -t wav -N test.wav
If you have problems with autodetection of the model, or the results are not as good as you hoped for (small number of channels, low sound...) try to specify the model in /etc/modprobe.conf (basic, auto, quanta, fujitsu, lifebook):
  options snd-hda-intel model=basic
I found that auto(detection) gives best results in terms of mixers, support and capture however the speakers are not automatically muted when headphones are connected. You can do that manually by pressing the mute key which will turn on the mute led, or by changing the model to quanta - which is not perfectly suited for this hardware, but enables that feature.

Note that in Linux 2.6.35 the model is auto-detected as Intel Cantiga, and gives pretty good results. Basic channels are there and the microphone works. Max out your Mic Boost and Capture channels, then select Front Mic as the microphone device, resulting recordings are excellent. Automatic muting when headphones are connected was not solved by the Cantiga ID.

Update: since Linux 2.6.37 automatic muting works. I have not identified the commit that fixed it, but plain model=auto works fine and mutes the speakers when headphones are connected. It does not power ON the LED when it mutes.

I noticed that applications which rely on OSS always see PCM channel as muted and they can't control it. Another issue was with games that use OSS, like enemy-territory, they had no sound. This was added to the system init (rc.local):
  # OSS emulation mixer fix
  #   PCM alsa control isn't auto. mapped to OSS equivalent
  echo 'PCM "PCM" 0' > /proc/asound/card0/oss_mixer
  # Enemy Territory sound fix
  echo "et.x86 0 0 direct" > /proc/asound/card0/pcm0p/oss

Webcam

This webcam is supported trough the UVC driver, once installed I tested it with ffmpeg and kopete it was also reported to work with Skype... you can also check luvcview which I guess gives some more control over the picture. Since Linux 2.6.26 UVC is part of the kernel, module is uvcvideo.

Card Reader

The hardware is recognized and supported, but I only had an SD card for testing. Be sure that the correct modules are loaded depending on the card you're inserting (tifm_core, tifm_sd, tifm_7xx1, mmc_core, sdhci, sdhci_pci...).

Networking

Provided ethernet card works OK with the r8169 module. I also have an external USB card that works fine with the pegasus module.

Wireless

This card is covered with a driver from the iwlagn project, complete with injection support. Depending on the kernel you're using read their instructions carefully about which driver to use and which firmware to cut. I also own an Atheros PCMCIA card, those chips always had great support. People at the MadWifi project are doing a great job. If you're buying wifi hardware consider something with an Atheros chip.

My kismet.conf looks like this:
  ...
  ncsource=wlan0:type=mac80211,name=intel
  ncsource=wlan1,type=mac80211,name=atheros
  #ncsource=ath0,type=madwifi_g,name=madwifi
  ...
  # I switch these depending on cards running at the moment
  enablesources=intel
  #enablesources=atheros
  #enablesources=madwifi
  #enablesources=atheros,intel
  #enablesources=madwifi,intel
  ...

Bluetooth

I didn't personally verify this chipset works, others claim it does. But from previous experience I can tell you that once bluetooth, btusb and the rest of the modules are loaded; You need to install bluez-libs, bluez-utils and optional some GUI utility, like kdebluetooth set of tools. There are many guides available, one that set me going in no time was Gentoo's Bluetooth Guide. For more specific usage like using your mobile phone as a modem or remote control you can check the docs on BlueZ.

i2c / lm_sensors / hddtemp

I was surprised that lm_sensors picked up only the CPU sensor (coretemp module), For now lm_sensors is not worth the trouble since you can also get thermal readings from ACPI. If you install hddtemp you can also get thermal readings from SMART, it works OK with this HDD model. You can get those with smartctl as well, so it's not worth the trouble.

sysctl

For the record my sysctl.conf looks like this:
  #
  # Kernel sysctl configuration
  #
  
  # Magic-sysrq key
  kernel.sysrq=1
  
  # Custom memory settings
  vm.swappiness=1
  #vm.overcommit_memory=2
  vm.vfs_cache_pressure=50

Screenshot

screenshot1

Final Note

I would suggest to use some of these stickers instead of that ugly sticker that comes shipped with the laptop: http://www.openstickers.com/

You can find my contact info on my home page http://sysphere.org/~anrxc/, I would be glad to hear from you with some suggestions or solutions, or possibly be of some help to you (but please note that I have no time for Ubuntu users to lazy to read any kind of documentation). Thank you, anrxc.