Image notebook s240

Introduction

So far, when I did not want to sit at my desk while programming or doing other weird stuff I used to carry around a small Lenovo x121e. The x121e is a very good notebook (see my other review) with a long battery life but after a while I became aware of a problem: I had to scroll up and down through my code quite often. Why? The screen resolution of the x121e was too low (1366x768).
This broke my heart as otherwise the notebook was perfect and very portable, so I tried a workaround (a larger X virtual desktop with a bigger vertical area) but in the end I had to accept the fact that it did not fully fit my needs and started to look for a replacement.

While searching I came accross the site "notebookcheck" ("notebookcheck.net" = english, "notebookcheck.com" = german) which is in my opinion a great site where to directly compare notebooks and I therefore started an elimination process based on my priorities which were:
1) (of course) screen resolution higher than 1366x768
2) max screen resolution 1920x1080 (FullHD)
3) quiet
4) long runtime on battery
5) has to fit into my bag (which is quite small compared to others)
6) good touchpad
7) good keyboard
8) screen angle & usable outdoor

Why the max screen resolution? Because of two reasons:
First: as I planned to use Linux - and in Linux you might fall back into pure native resolution when things don't go as expected - I have to be able to read and write text in a worst-case-scenario without having to cross my eyes (don't know how you can do that with e.g. the 3200x1800 of e.g. the "Yoga 2 Pro"). The 1920x1080 is therefore the absolute maximum for the physical dimensions of such a small screen.
Second: because these very high resolutions / pixel densities are very new in the Windows and especially in the Linux world and a lot of applications (e.g. vncviewer) couldn't care less if you have a HiDPI screen or not => with FullHD on a 12.5'' screen you're right on the edge of both worlds, which in a worst-case scenario still gives you a chance of seeing what you're doing.

The details of the single components are below but summarized I can say that I now don't care anymore about the x121e - my new partner is the s240 (which in your own region might as well be called "s1) - I love it!
One thing worries me: after the elimination process (took me ~1 week) the s240 was the only candidate that survived => I am obviously not following the trend :o(((

I am using Gentoo Linux, so most of the things are hand-made and these notes are more a guide for worst-case situations than a general guide on what to expect - your Linux distributions will probably take care of most of the settings.


CPU

My notebook has an "Intel(R) Core(TM) i7-4500U CPU @ 1.80GHz".
Keep in mind that this is yes an i7 CPU but it's a low-power version, so it won't definitely be as fast as your desktop i7 CPU.
For comparison purposes when compiling using 4 threads (therefore using all its virtual CPU cores) it is...
...exactly as fast as an "Intel(R) Core(TM) i5-3230M CPU @ 2.60GHz" (the CPU of my 17'' HP Probook 470 G0)...
...1.6 times slower than an "Intel(R) Xeon(R) CPU E31260L @ 2.40GHz" and...
...2.1 times slower than an "Intel(R) Xeon(R) CPU E31270 @ 3.40GHz" and...
...2.2 times faster than an "Intel(R) Core(TM) i3-2357M CPU @ 1.30GHz" (the CPU of my x121e).

Summary:
Really good!!!
The Xeon E31270 is not top notch but not too far from it (as of early 2014) and having this CPU perform only 2x slower than that makes this notebook (or ultrabook or however you want to call it) not slow.
And: the notebook just doesn't get hot nor makes any noise! I compiled the whole Gentoo OS (takes ~7hrs using all 4 vCPU cores) on it and yes, I was hearing a "whuuuushhhhh" if I cared to pay attention to it, but otherwise..... absolutely nothing! This is how all notebooks should be!!!


Backlight

The hotkey did not work out of the box (maybe better on Ubuntu & Co.) but basically it works - I'm using the following scripts:
To increase the brightness:
================
#!/bin/bash

#CHANGEME - Settings
BRIGHTNESSDEVICE="/sys/class/backlight/intel_backlight/brightness"
INCREASEBY=50

CURBRIGHTNESS=$(cat $BRIGHTNESSDEVICE)

NEXTBRIGHTNESS=$(expr $CURBRIGHTNESS + $INCREASEBY)

echo CURBRIGHTNESS $CURBRIGHTNESS
echo NEXTBRIGHTNESS $NEXTBRIGHTNESS

$(echo $NEXTBRIGHTNESS > $BRIGHTNESSDEVICE)
================
To decrease it:
================
#!/bin/bash

#CHANGEME - Settings
BRIGHTNESSDEVICE="/sys/class/backlight/intel_backlight/brightness"
DECREASEBY=50

CURBRIGHTNESS=$(cat $BRIGHTNESSDEVICE)

NEXTBRIGHTNESS=$(expr $CURBRIGHTNESS - $DECREASEBY)

echo CURBRIGHTNESS $CURBRIGHTNESS
echo NEXTBRIGHTNESS $NEXTBRIGHTNESS

$(echo $NEXTBRIGHTNESS > $BRIGHTNESSDEVICE)
================

Mapping of the two scripts to the two keys is done as usual with "xbindkeys" by putting into its config file the lines...:
================
"sudo /myxbindkeys-cmds/screen_increase_brightness"
m:0x0 + c:212

"sudo /myxbindkeys-cmds/screen_decrease_brightness"
m:0x0 + c:101
================

The dedicated keys on the right-hand side of the notebook worked out-of-the-box.


Graphics card

It's an "Intel HD Graphics 4400".

I'm using the "Compiz" 3D desktop on the Xorg-server version 1.15.0 and used to see artefacts with the x11 driver "xf86-video-intel" version 2.21.15 but was fixed by upgrading to the version 2.99.907-r1. I have seen reports of the same artefacts appearing as well on newer (and older) version of the driver.
If 2.99.907 doesn't solve your problems try to upgrade to the Xorg-server 1.15.1 (I've seen reports of some issues being solved with this version - I did not test).

If you have an own setup for X, you'll end up using the native HiDPI ("Hi-DPI"?) resolution, which makes everything much too small.
To fix this put in your "monitor" section of your "xorg.conf" file the width and height in millimeteres (metric system is finally winning, oh oh oh) of your screen (setting "DisplaySize") - in my case the real dimensions felt making everything too big, so I put some fake bigger screen dimensions which in turn decreased the computed DPI - the commented line below uses the real screen dimensions:
================
Section "Monitor"
        Identifier   "Monitor0"
        VendorName   "My vendor"
        ModelName    "My model"
#MYCUSTOM-Important "DisplaySize" - used to compute the DPI of the screen!
#Use "xdpyinfo | grep -B2 resolution" to see the computed DPIs
#       DisplaySize     277 156
        DisplaySize     315 220
EndSection
================

In Firefox things still looked too small => if this is the same for you then go to the fake URL "about:config" => search for the configuration parameter "layout.css.devPixelsPerPx" (which will be set by default to "-1") and set it to "1", "1.25" or "1.5", etc... .
As of Firefox version 24.4 don't set it to e.g. "1.4" as this will generate weird problems with frame contents not fitting into the frame (therefore generating scrollbars within the frame contained in the page you're visiting), sections of pages mirroring the contents of the main frame, etc... .


Framebuffer

No problems at all - as soon as the Linux kernel is loaded and the i915 driver becomes active you switch to native resolution => the white font on the black background is very readable but we're on the edge => you would run into troubles with a higher resolution/DPI (you would need a microscope with 3200x1800, and I am not kidding).

When you use "powertop" you see that the GPU never switches to the power state "RC6pp" but only to "RC6" => I don't know if this is something new of the 4400 GPU or if there are potential savings that can be introduced by future kernel versions - on my side I tried all classical kernel parameters I knew of but they were happily ignored.


Screen

The screen/monitor is just fantastic.

I have to say that all my previous notebooks had TFT displays (or something similar) and that this is the first one I have which uses an IPS panel => it's a dream!!! It's like changing from livingroom-mono to headphone-stereo or start watching "Star Wars 4" just after a session of "Flash Gordon"!

I have the fancy version which includes touchscreen (which I don't use nor need) and the Wacom-stylus (well... which I don't use either, but it definitely works), but the screen can be bent 360 degrees and this makes it possible to write this article with the screen bent ~160 degrees while still seeing a perfect picture including the colors.

I bought the fancy & expensive version that has an "i7 CPU + touchscreen" uniquely because the only i5-version I found had a HDD instead of a SSD and a customer reported a low-level problem after having swapped the HDD with a SSD. I wasn't sure if this was due because of lack of know-how, misfortune or real HW compliancy issues (quite unlikely but not impossible) but I tried to avoid this particular potential problem with $ => you might want to rethink this approach as not having the touchscreen layer might make the display even better.


Touchpad & stick

Apparently this is not a "touchpad" anymore - it's a "clickpad"!

I'm not exactly sure what the definition of "clickpad" is, but in this case it seems to mean that when you push on the touchpad's surface, the whole surface sinks and acts as a left-mouse-button click. The same thing but using 2 fingers instead of 1 results in a right-mouse-button click. Scrolling is obtained by scrolling on the clickpad's surface with 2 fingers. Other gestures are similar to what you experience on your phones & tablets.

My configuration in xorg.conf looks like this:
=================
Section "InputDevice"
#Clickpad (flat surface)
#List the active options with:
#xinput list-props "Clickpad2"
##        Option  "Device"       "/dev/input/mouse0" #IF I USE THIS IT DOES NOT RECOGNIZE THE PROTOCOL
            Identifier "Clickpad2"
#            MatchDriver "synaptics"
            Driver "synaptics"
                Option "ClickPad"         "true"
                Option "EmulateMidButtonTime" "0"
#                Option "SoftButtonAreas" "50% 0 82% 0 0 0 0 0"
            Option "SoftButtonAreas" "60% 0 0 5% 40% 60% 0 5%"
    #       To disable the bottom edge area so the buttons only work as buttons,
    #       not for movement, set the AreaBottomEdge
            #Option "AreaBottomEdge" "82%"
            #Option "AreaTopEdge" "4%"
            Option "AreaTopEdge" "10%"
            Option "FastTaps" "true"
            Option "ClickTime" "50"
            Option "MaxTapTime" "150"
            Option "MaxTapMove" "500"
            Option "HorizTwoFingerScroll" "true"
    Option "TapButton1" "1"
        Option "TapButton2" "3"
        Option "TapButton3" "2"
EndSection

=================

Luckily Lenovo still sticks with the principle of providing additionally a red pointing stick, which can save the day in many situations.
By playing with the "AreaBottomEdge" and "AreaTopEdge" you're free to fully disable the clickpad and only use it to generate button-press events.
My pointing stick configuration looks like this...
=================
Section "InputDevice"
#Trackpoint (red stick)
        Option  "Device" "/dev/input/mouse1"
        Identifier  "trackpoint"
        Driver      "mouse"
#Get its properties with "xinput list" and then "xinput list-props trackpoint"
        Option      "Protocol" "auto"
##      Option  "ChordMiddle"
##      Option "Buttons" "2"
##      Option  "ZAxisMapping" "4 5 6 7"
#        Option  "MinSpeed" "1.00"
#        Option  "MaxSpeed" "2.40"
#        Option  "AccelFactor" "2.000"
#            Option        "AccelerationProfile"   "6"
EndSection
=================
...which uses the upper portions of the clickpad as pure buttons but I have to mention that in the script which starts my X session I run automatically "xset mouse 25/10 0", which dramatically speeds up the pointer - not sure how to set this directly in xorg.conf and I anyway prefer right now to have it as a command as I'm not yet fully sure that this is what I want to stick with.

My experience with the clickpad was very positive - I got used to it extremely quickly and I ended up missing it on touchpad notebooks - but on the other side I'm as well very happy that I have a "pointing stick" available for when I have to do precise or very long selections (not sure how you can do this having only the clickpad available).
The only critic I have against this clickpad is that after a while it might give a "mechanical" feeling - 0.5mm less vertical action MIGHT have been better but it could be that by reducing the length of the push you might have lost the "button-press" event during a slide, so in the end I don't know but all in all it's still good.
The surface of the clickpad is great - very slick .

Summarized: very good.


Keyboard

The feeling while typing is fantastic - I like typing more on this notebook than on any other notebook I ever had (including the x121e).
The only keyboard which might be better than this one could be the old standard Cherry. - the ones which make you want to write faster when you hear their click-clack noise.

The keys are definitely placed better than on the x121e - I now have an "Insert" sub-key (uuuuhhhh as it's very important in Linux for copy/paste operations) and the arrows+pgup/down are not in line with the rest which makes it very easy to find them without looking at where your hand is.

On my side I still have to press the F-keys more often than the volume or brightness keys - as the fn-key can be locked is an additional advantage.

The volume keys on the right-hand side of the notebook worked out of-the-box (I never use them), but the "volume down" is quite dangerous as placed very near to the "power off" switch.
The volume keys on the keyboard did not work - I use the following 2 scripts...
To decrease the volume:
==============
#!/bin/bash

#CHANGEME - Just do some trial and error with numid starting with 1 onwards to find the
 master control
#NUMID=13
NUMID=6
CARDNUMBER=0

#Get the full string
CURVOLFULLSTRING=$(amixer -c $CARDNUMBER cget numid=$NUMID | head -n 3 | tail -n 1)

#Delete the heading text
CURVOLSTRING=$(echo $CURVOLFULLSTRING | sed 's/: values=//g')

#Only for 2 channel volume configuration (normally it's mono)
#Get the position of the comma
#CURVOLPOS=$(echo `expr index "$CURVOLSTRING" ","`)
#Take out the comma
#CURVOLPOS=$(($CURVOLPOS-1))
#Get the substring with the current volume
#CURVOL=${CURVOLSTRING:0:CURVOLPOS}
#Generate the next volume we want to have
NEXTVOL=$(($CURVOL-1))

CURVOL=$CURVOLSTRING

NEXTVOL=$(expr $CURVOL - 3)
echo CURVOLFULLSTRING $CURVOLFULLSTRING
echo CURVOLSTRING $CURVOLSTRING
echo CURVOLPOS $CURVOLPOS
echo CURVOL $CURVOL
echo NEXTVOL $NEXTVOL

#Set the new volume
amixer -c $CARDNUMBER cset numid=$NUMID $NEXTVOL > /dev/null
==============
Increase the volume:
==============
#!/bin/bash

#CHANGEME - Just do some trial and error with numid starting with 1 onwards to find the master control
NUMID=6
CARDNUMBER=0

#Get the full string
CURVOLFULLSTRING=$(amixer -c $CARDNUMBER cget numid=$NUMID | head -n 3 | tail -n 1)

#Delete the heading text
CURVOLSTRING=$(echo $CURVOLFULLSTRING | sed 's/: values=//g')

#Only for 2 channel volume configuration (normally it's mono)
#Get the position of the comma
#CURVOLPOS=$(echo `expr index "$CURVOLSTRING" ","`)
#Take out the comma
#CURVOLPOS=$(($CURVOLPOS-1))
#Get the substring with the current volume
#CURVOL=${CURVOLSTRING:0:CURVOLPOS}
#Generate the next volume we want to have
NEXTVOL=$(($CURVOL-1))

CURVOL=$CURVOLSTRING

NEXTVOL=$(expr $CURVOL + 3)
echo CURVOLFULLSTRING $CURVOLFULLSTRING
echo CURVOLSTRING $CURVOLSTRING
echo CURVOLPOS $CURVOLPOS
echo CURVOL $CURVOL
echo NEXTVOL $NEXTVOL

#Set the new volume
amixer -c $CARDNUMBER cset numid=$NUMID $NEXTVOL > /dev/null
==============
Using again "xbindkeys" I mapped the above two scripts to the normal keys signaled on the keyboard:
==============
"/myxbindkeys-cmds/alsa_decrease_volume"
m:0x0 + c:174

"/myxbindkeys-cmds/alsa_increase_volume"
m:0x0 + c:176
==============

All in all: extremely good/solid/reactive keyboard + a pity that the F/Function-keys are not set to be the primary ones but probably the windows n00bs never use them => still a good compromise between this and to have a pointing stick available.


Audio

Works out of the box.

See above for key mapping.


Lan

No LAN adapter on board!
When you order the notebook you should ideally order as well a USB to LAN adapter for ~30 CHF!!!
Just do it - you won't regret it.

The only recommandation I have is NOT to buy a "D-Link DUB-E100" as the connection to the cable in my case is not stable (works as long as you don't touch it).


Wireless

On my notebook I have an "Intel Corporation Wireless 7260 (rev 83)", which is currently (02.Jun.2014) almost working 100%.

Compiling the kernel module "iwlwifi" won't be enough => you'll have to go to "http://wireless.kernel.org/en/users/Drivers/iwlwifi" => download the firmware for your kernel ("uname -a") => unpack the file => put the resulting unpacked file (probably) into the directory "/lib/firmware".

I am currently using the firmware 22.24.8.0 (the firmware file that you have to put in "/lib/firmware" will then be called "iwlwifi-7260-8.ucode") on kernel 3.14.2 (Gentoo Linux).

You can doublecheck the settings that you're using with the command "systool -m iwlwifi -av".
In my case the following (default) settings...
   module_iwlwifi_args="11n_disable=0 antenna_coupling=0 bt_coex_active=1 debug=0 fw_restart=1 led_mode=0 power_level=0 power_save=0 swcrypto=0 wd_disable=1"
   module_iwlmvm_args="init_dbg=0 power_scheme=2"
...did not work - the card worked for a while (variable, from 1 to 8hrs) but then it disconnected and got stuck and the only way to make it work again was to reboot the notebook or unload and reload the modules.
The solution was to load the module iwlwifi with the following settings...
   module_iwlwifi_args="11n_disable=1 bt_coex_active=0 debug=0 fw_restart=0 led_mode=3 power_level=5 power_save=1 swcrypto=1 wd_disable=1"
...and this way it still gets stuck from time to time (again, on average ~twice every 8hrs) but after ~15 seconds of "silence" (nothing at all happening, not even in the logs) it just starts working again as if nothing happened :o)


Webcam

Not tested.


Cardreader

The Realtek RTS5227 cardreader works out of the box (using kernel 3.17.2).

Following modules are needed:
mfd_core
mmc_core
rtsx_pci
rtsx_pci_sdmmc


Battery

I started writing this article with the battery being at 100% and 3:42 hours later (I'm slow, I know...) I have 48% available => this would mean that under optimal conditions this notebook gives you ~7hrs of autonomy, which is not bad, taking into consideration that when compiling this CPU will make me wait less and use less battery than my old x121e.

Use "powertop" to identify areas where you might get some gains.
In my case I run the following script during system start:
================
rfkill unblock 0
echo min_power > /sys/class/scsi_host/host0/link_power_management_policy
echo min_power > /sys/class/scsi_host/host1/link_power_management_policy
echo min_power > /sys/class/scsi_host/host2/link_power_management_policy
echo min_power > /sys/class/scsi_host/host3/link_power_management_policy
echo 1500 > /proc/sys/vm/dirty_writeback_centisecs

#These two don't work anymore since some recent kernel
#echo 1 > /sys/devices/system/cpu/sched_mc_power_savings
#echo 1 > /sys/devices/system/cpu/sched_smt_power_savings

echo Y > /sys/module/snd_hda_intel/parameters/power_save_controller
echo 10 > /sys/module/snd_hda_intel/parameters/power_save

echo auto > /sys/bus/usb/devices/1-1.7/power/control
echo auto > /sys/bus/usb/devices/2-5/power/control
echo auto > /sys/bus/usb/devices/1-1.8/power/control

for i in /sys/bus/pci/devices/*/power/control; do echo auto > $i; done;
================


Fan & fan noise

Perfect (no SW nor special config used).

Almost never active and when it does spin up (e.g. when using 1 core in turbo mode or all 4 CPU cores at 100% for more than a few seconds) I can hardly hear it - and even then the noise it does is a gentle "ssssshhhhh...." which I can hardly hear => great!!!


My xorg.conf

Section "ServerLayout"
        Identifier     "X.org Configured"
        Screen      0  "Screen0" 0 0

        InputDevice    "trackpoint" "CorePointer"
        InputDevice    "Clickpad2" "CorePointer"
        InputDevice    "stylus" "SendCoreEvents"
        InputDevice    "Keyboard0" "CoreKeyboard"

#        InputDevice    "Touchscreen" "CorePointer"
#        InputDevice    "Mouse2" "CorePointer"
EndSection

Section "ServerFlags"
        Option "BlankTime" "20"
        Option  "AutoAddDevices"        "false"
EndSection

#Section "Module"
#        Load  "dbe"
##       Load  "dri"
##       Disable "dri"
##       Disable "dri2"
#        Load  "extmod"
#        Load  "glx"
#        Load  "record"
##       Load  "xtrap"
#        Load  "freetype"
#        Load  "type1"
##        Load  "synaptics"
#EndSection

Section "InputDevice"
        Identifier  "Keyboard0"
        Driver      "kbd"
#       Option  "XkbLayout" "de_CH"
        Option  "XkbLayout" "ch"
        Option  "XkbVariant" "de"
        Option  "XkbOptions" "terminate:ctrl_alt_bksp"
EndSection

Section "InputDevice"
#Trackpoint (red stick)
        Option  "Device" "/dev/input/mouse1"
        Identifier  "trackpoint"
        Driver      "mouse"
#Get its properties with "xinput list" and then "xinput list-props trackpoint"
        Option      "Protocol" "auto"
##      Option  "ChordMiddle"
##      Option "Buttons" "2"
##      Option  "ZAxisMapping" "4 5 6 7"
#        Option  "MinSpeed" "1.00"
#        Option  "MaxSpeed" "2.40"
#        Option  "AccelFactor" "2.000"
#            Option        "AccelerationProfile"   "6"
EndSection

Section "InputDevice"
#Clickpad (flat surface) - USE THIS ONLY IF THE SYNAPTIC DRIVER DOES NOT WORK FOR ANY REASON
        Option  "Device"       "/dev/input/mouse0"
        Identifier "Clickpad"
        Driver  "mouse"
        Option  "Protocol"      "IMPS/2"
        Option  "Buttons"       "5"
        Option  "ZAxisMapping" "4 5 6 7"
EndSection

Section "InputDevice"
#Clickpad (flat surface)
#List the active options with:
#xinput list-props "Clickpad2"
##        Option  "Device"       "/dev/input/mouse0" #IF I USE THIS IT DOES NOT RECOGNIZE THE PROTOCOL
            Identifier "Clickpad2"
#            MatchDriver "synaptics"
            Driver "synaptics"
                Option "ClickPad"         "true"
                Option "EmulateMidButtonTime" "0"
#                Option "SoftButtonAreas" "50% 0 82% 0 0 0 0 0"
            Option "SoftButtonAreas" "60% 0 0 5% 40% 60% 0 5%"
    #       To disable the bottom edge area so the buttons only work as buttons,
    #       not for movement, set the AreaBottomEdge
            #Option "AreaBottomEdge" "82%"
            #Option "AreaTopEdge" "4%"
            Option "AreaTopEdge" "10%"
            Option "FastTaps" "true"
            Option "ClickTime" "50"
            Option "MaxTapTime" "150"
            Option "MaxTapMove" "500"
            Option "HorizTwoFingerScroll" "true"
    Option "TapButton1" "1"
        Option "TapButton2" "3"
        Option "TapButton3" "2"
EndSection

Section "InputDevice"
#Touchscreen
        Option  "Device"       "/dev/input/event12"
        Identifier "Touchscreen"
        Driver  "evdev"
        Option  "Buttons"       "5"
        Option  "ZAxisMapping" "4 5 6 7"
EndSection

#X hangs if I load the wacom module with the USB powersave options switched on
Section "InputDevice"
    Driver        "wacom"
    Identifier    "stylus"
#    Option        "Device"       "/dev/input/mouse2"   
    Option        "Type"         "stylus"
    Option        "USB"          "on"                 # USB ONLY
    Option        "Mode"         "Absolute"           # other option: "Relative"
    Option        "Vendor"       "WACOM"
    Option        "tilt"         "on"  # add this if your tablet supports tilt
    Option        "Threshold"    "5"   # the official linuxwacom howto advises this line
EndSection

Section "Monitor"
        Identifier   "Monitor0"
        VendorName   "My vendor"
        ModelName    "My model"
#MYCUSTOM-Important "DisplaySize" - used to compute the DPI of the screen!
#Use "xdpyinfo | grep -B2 resolution" to see the computed DPIs
#    DisplaySize    277 156
    DisplaySize    315 220
#    DisplaySize    315 178
EndSection

Section "Device"
        Identifier "Card0"
        Driver  "intel"
        VendorName  "My Intel"
        BoardName   "Unknown Board"
        BusID       "PCI:0:2:0"
EndSection

Section "Extensions"
        Option      "Composite"   "enable"
#        Option      "Composite"   "disable"
EndSection

Section "Screen"
        Identifier "Screen0"
        Device     "Card0"
        Monitor    "Monitor0"
        DefaultDepth 24
        SubSection "Display"
                Viewport   0 0
                Depth     24
                Modes   "1920x1080"
        EndSubSection
EndSection


My lspci -k

===============
# lspci -k
00:00.0 Host bridge: Intel Corporation Haswell-ULT DRAM Controller (rev 09)
    Subsystem: Lenovo Device 2217
00:02.0 VGA compatible controller: Intel Corporation Haswell-ULT Integrated Graphics Controller (rev 09)
    Subsystem: Lenovo Device 2217
    Kernel driver in use: i915
00:03.0 Audio device: Intel Corporation Haswell-ULT HD Audio Controller (rev 09)
    Subsystem: Lenovo Device 2217
    Kernel driver in use: snd_hda_intel
    Kernel modules: snd_hda_intel
00:14.0 USB controller: Intel Corporation Lynx Point-LP USB xHCI HC (rev 04)
    Subsystem: Lenovo Device 2217
    Kernel driver in use: xhci_hcd
00:16.0 Communication controller: Intel Corporation Lynx Point-LP HECI #0 (rev 04)
    Subsystem: Lenovo Device 2217
00:1b.0 Audio device: Intel Corporation Lynx Point-LP HD Audio Controller (rev 04)
    Subsystem: Lenovo Device 2217
    Kernel driver in use: snd_hda_intel
    Kernel modules: snd_hda_intel
00:1c.0 PCI bridge: Intel Corporation Lynx Point-LP PCI Express Root Port 1 (rev e4)
    Kernel driver in use: pcieport
00:1c.2 PCI bridge: Intel Corporation Lynx Point-LP PCI Express Root Port 3 (rev e4)
    Kernel driver in use: pcieport
00:1c.3 PCI bridge: Intel Corporation Lynx Point-LP PCI Express Root Port 4 (rev e4)
    Kernel driver in use: pcieport
00:1d.0 USB controller: Intel Corporation Lynx Point-LP USB EHCI #1 (rev 04)
    Subsystem: Lenovo Device 2217
    Kernel driver in use: ehci-pci
00:1f.0 ISA bridge: Intel Corporation Lynx Point-LP LPC Controller (rev 04)
    Subsystem: Lenovo Device 2217
00:1f.2 SATA controller: Intel Corporation Lynx Point-LP SATA Controller 1 [AHCI mode] (rev 04)
    Subsystem: Lenovo Device 2217
    Kernel driver in use: ahci
00:1f.3 SMBus: Intel Corporation Lynx Point-LP SMBus Controller (rev 04)
    Subsystem: Lenovo Device 2217
    Kernel modules: i2c_i801
04:00.0 Network controller: Intel Corporation Wireless 7260 (rev 83)
    Subsystem: Intel Corporation Dual Band Wireless-AC 7260
    Kernel driver in use: iwlwifi
    Kernel modules: iwlwifi
05:00.0 Unassigned class [ff00]: Realtek Semiconductor Co., Ltd. RTS5227 PCI Express Card Reader (rev 01)
    Subsystem: Lenovo Device 2217
    Kernel driver in use: rtsx_pci
    Kernel modules: rtsx_pci

===============