Asus Eee PC 901

From Gentoo Linux Wiki

Jump to: navigation, search

The Asus EEE PC 901 is the second-generation EEE PC with a 1024x600 9-inch screen. It has a 1.6GHz Intel Atom processor with 20G of SSD storage divided into a 4GB master and a slower 16GB (8GB in Windows version) slave disk. Driver support for all of the EEE PC 901 hardware is present as of sys-kernel/gentoo-sources-2.6.30.

Contents

[edit] Networking

[edit] Wired

The Ethernet network card of the Eee 901 is a Atheros L1E Gigabit Ethernet Adapter as shown by lspci below:

lspci -vs 03:00.0
03:00.0 Ethernet controller: Attansic Technology Corp. Device 1026 (rev b0)
       Subsystem: ASUSTeK Computer Inc. Device 8324
       Flags: bus master, fast devsel, latency 0, IRQ 17
       Memory at fbfc0000 (64-bit, non-prefetchable) [size=256K]
       I/O ports at ec80 [size=128]
       Capabilities: [40] Power Management version 2
       Capabilities: [48] Message Signalled Interrupts: Mask- 64bit+ Queue=0/0 Enable-
       Capabilities: [58] Express Endpoint, MSI 00
       Capabilities: [6c] Vital Product Data <?>
       Kernel driver in use: ATL1e
       Kernel modules: atl1e

Enable Atheros L1E Gigabit Ethernet support in your kernel:

Linux Kernel Configuration: Atheros L1E Gigabit Ethernet support
Device Drivers  --->
       [*] Network device support  --->
             [*]   Ethernet (1000 Mbit)  --->
                   <*>   Atheros L1E Gigabit Ethernet support

[edit] Wireless

The wireless device (rt2860sta/ra0) looks like this to lspci:

lspci -vs 01:00.0
01:00.0 Network controller: RaLink Device 0781
       Subsystem: RaLink Device 2790
       Flags: bus master, fast devsel, latency 0, IRQ 19
       Memory at f7ff0000 (32-bit, non-prefetchable) [size=64K]
       Capabilities: [40] Power Management version 3
       Capabilities: [50] Message Signalled Interrupts: Mask- 64bit+ Queue=0/5 Enable-
       Capabilities: [70] Express Endpoint, MSI 00
       Kernel driver in use: rt2860
       Kernel modules: rt2860sta

The rt2860sta driver was not included in the Linux mainline until 2.6.30. So you'll need to use >=sys-kernel/gentoo-sources-2.6.30:

Linux Kernel Configuration: Enabling the rt2860sta driver
Device Drivers  --->
    Network device support  --->
        Wireless LAN  --->
            [*] Wireless LAN (IEEE 802.11)
    [*] Staging drivers  --->
        [ ] Exclude Staging drivers from being built
            <*> Ralink 2860 wireless support
Note: If you find that going in and out of wifi coverage causes sshd to exit with messages like this:
.... sshd[6751]: Received signal 15; terminating.
Consider installing monit from portage and configure an sshd service test.

[edit] Function Keys

For the Eee 901 function keys(Fn) to work you'll need to enable the eeepc_laptop module in your kernel:

Linux Kernel Configuration: Enabling the Eee Hotkeys
Bus options (PCI etc.)  --->
    <*> Support for PCI Hotplug  --->
Device Drivers  --->
    [*] X86 Platform Specific Device Drivers  --->
        <*> Eee PC Hotkey Driver

[edit] Power Management

The Gentoo Power Management Guide has a lot of information on configuring a machine for minimizing power usage and sleep modes. powertop (sys-power/powertop) is very useful for tweaking the system for minimum power usage. You should expect to draw about 7W while browsing with WiFi enabled and a reasonable brightness level.

[edit] Super Hybrid Engine

This is a special power-saving feature particular to this computer. Despite the corny name, it drastically reduces power consumption--at the price of performance of course. This alters some of the frequencies and voltages on the motherboard and should be used in addition to normal cpu governors. The eeepc_laptop driver, available in kernel versions 2.6.30 and above, has the ability to set SHE performance preset via /sys/devices/platform/eeepc/cpufv. You need enable Eee PC Hotkey Driver support in your kernel for this to work:

Linux Kernel Configuration: Enable eeepc_laptop support
Bus options (PCI etc.)  --->
    <M> Support for PCI Hotplug  --->
Device Drivers  --->
    [*] X86 Platform Specific Device Drivers  --->
        <M> Eee PC Hotkey Driver

Valid values for /sys/devices/platform/eeepc/cpufv are:

0: Performance
1: Default 
2: Powersave

To check the current setting,

cat /sys/devices/platform/eeepc/cpufv

This should output something similar to:

0x301

The highlighted 1 indicates that its set to Default. To change to Powersave, you would issue:

echo 2 > /sys/devices/platform/eeepc/cpufv

[edit] WiFi

If you're using wifi, you can activate the drivers power saving mode by issuing:

/sbin/iwpriv ra0 set PSMode=Fast_PSP

Put it back to normal with:

/sbin/iwpriv ra0 set PSMode=CAM

This will save you around half a watt. You could also set PSMode=Max_PSP, but this is really slow. The following file will automatically apply the power saving mode if you're using NetworkManager:

Code: /etc/NetworkManager/dispatcher.d/02wifipower
#!/bin/bash
if [ "$1" = "ra0" -a "$2" = "up" ]; then
	/sbin/iwpriv ra0 set PSMode=Fast_PSP
fi

See the NetworkManager man page for more info.

[edit] Sound

The sound device is an Intel HDA with a Realtek ALC269 codec:

lspci -s 00:1b
00:1b.0 Audio device: Intel Corporation 82801G (ICH7 Family) High Definition Audio Controller (rev 02)
amixer info
Card default 'Intel'/'HDA Intel at 0xf7db8000 irq 16'
  Mixer name    : 'Realtek ALC269'
  Components    : 'HDA:10ec0269,1043831a,00100004'
  Controls      : 7
  Simple ctrls  : 5

Select the appropriate driver and codec in the kernel:

Linux Kernel Configuration: Intel HD Audio
Device Drivers  ---> 
   <*> Sound card support  --->
      <*>   Advanced Linux Sound Architecture  --->
         [*]   PCI sound devices  --->
            <M>   Intel HD Audio 
            [*]     Build Realtek HD-audio codec support

The snd-hda-intel module should be set to conform to the specifics of the Eee 901:

File: /etc/modprobe.d/alsa.conf
...
options snd-hda-intel model=eeepc-p901

[edit] Bluetooth

The bluetooth device sits on the USB bus:

lsusb -vd 0b05:b700
Bus 005 Device 002: ID 0b05:b700 ASUSTek Computer, Inc.
Device Descriptor:
...
bDeviceClass          224 Wireless
bDeviceSubClass         1 Radio Frequency
bDeviceProtocol         1 Bluetooth
bMaxPacketSize0        64
idVendor           0x0b05 ASUSTek Computer, Inc.
idProduct          0xb700
bcdDevice            2.41
iManufacturer           1 Broadcom Corp
iProduct                2 BT-253
...

Select the appropriate driver in the kernel:

Linux Kernel Configuration: Intel HD Audio
[*] Networking support  --->
    <*> Bluetooth subsystem support  --->
            Bluetooth device drivers  --->
              <*> HCI USB driver

The device can be enabled/disabled in the BIOS (Advanced>Onboard Devices Configuration>Onboard Bluetooth).

[edit] WebCam

The webcam is the CNF7129 from Chicony Electronics:

lsusb -d 04f2:b071
Bus 001 Device 003: ID 04f2:b071 Chicony Electronics Co., Ltd

Some revisions of the EEE PC 901 may ship with a camera from Gensys Logic.

lsusb -d 05e3:0505
Bus 001 Device 003: ID 05e3:0505 Genesys Logic, Inc.

The in-kernel uvcvideo driver supports these:

Linux Kernel Configuration: USB Video Class (UVC)
Device Drivers  --->
   Multimedia devices  --->
      [*] Video capture adapters  --->
         [*]   V4L USB devices  ---> 
            <*>   USB Video Class (UVC)
            [*]     UVC input events device support

[edit] Sensors

Linux Kernel Configuration: Intel 82801 (ICH)
Device Drivers --->
    -*- I2C support --->
         <*>  I2C device interface
         [*]  Autoselect pertinent helper modules
             I2C Hardware Bus support --->
                 <M> Intel 82801 (ICH)

[edit] Temperature

The CPU temperature can either be read using ACPI (from /proc/acpi/thermal_zone/TZ00/temperature) or the hwmon framework (from /sys/class/hwmon/hwmon0/temp1_input).

[edit] Fan

The fan can be controlled from /sys/class/hwmon/hwmon1/. fan1_input shows the fan RPM, pwm1 shows the fan speed (between 0 - 255), and pwm1_enable toggles manual versus BIOS-operated fan control (0: BIOS control, 1: Manual control). The fancontrol script provided by the sys-apps/lm_sensors package can be used to control the fan speed based on the CPU temperature.

To use it first create a new file /etc/fancontrol, and edit it to look something like the following:

File: fancontrol
INTERVAL=10
FCTEMPS=hwmon1/pwm1=hwmon0/temp1_input
FCFANS= hwmon1/pwm1=hwmon1/fan1_input
MINSTART=hwmon1/pwm1=50
MINSTOP=hwmon1/pwm1=5
MINTEMP=hwmon1/pwm1=55
MAXTEMP=hwmon1/pwm1=75

Read the fancontrol man page for furher information.

You can then start the fancontrol daemon with the following:

rc-config start fancontrol

To start it automatically, add it to the default runlevel with:

rc-config add fancontrol default

[edit] X11

Following the Gentoo X11 Guide will probably suffice for setting up X11 to function on the 901. For more information, see the X.Org, Graphics drivers and Intel GMA articles for further information.

[edit] Graphics

The graphics hardware in the Eee901 is a Intel 950 GMA as shown below with lspci:

lspci -vs 00:02
00:02.0 VGA compatible controller: Intel Corporation Device 27ae (rev 03) (prog-if 00 [VGA controller])
       Subsystem: ASUSTeK Computer Inc. Device 830f
       Flags: bus master, fast devsel, latency 0, IRQ 16
       Memory at f7e00000 (32-bit, non-prefetchable) [size=512K]
       I/O ports at dc80 [size=8]
       Memory at d0000000 (32-bit, prefetchable) [size=256M]
       Memory at f7dc0000 (32-bit, non-prefetchable) [size=256K]
       Capabilities: [90] Message Signalled Interrupts: Mask- 64bit- Queue=0/0 Enable-
       Capabilities: [d0] Power Management version 2

00:02.1 Display controller: Intel Corporation Mobile 945GM/GMS, 943/940GML Express Integrated Graphics Controller (rev 03)
       Subsystem: ASUSTeK Computer Inc. Device 830f
       Flags: bus master, fast devsel, latency 0
       Memory at f7e80000 (32-bit, non-prefetchable) [size=512K]
       Capabilities: [d0] Power Management version 2

The xf86-video-intel is the driver required by X to handle this card. Set VIDEO_CARDS to intel in /etc/make.conf and see the Graphics drivers and Intel GMA articles.

[edit] Input

The touchpad is from Elantech:

cat /proc/bus/input/devices
...
I: Bus=0011 Vendor=0002 Product=000d Version=0063
N: Name="ETPS/2 Elantech Touchpad"
P: Phys=isa0060/serio1/input0
S: Sysfs=/class/input/input5
U: Uniq=
H: Handlers=mouse0 event5 
B: EV=f
B: KEY=6420 0 7000f 0 0 0 0 0 0 0 0
B: REL=143
B: ABS=1000003

This touchpad requires the Elantech PS/2 protocol extension to be enabled in your kernel:

Linux Kernel Configuration: Enabling the Elantech PS/2 protocol extension
Device Drivers  --->
    Input device support  --->
        [*]   Mice  ---> 
             <*>   PS/2 mouse
            [*]     Elantech PS/2 protocol extension

Set INPUT_DEVICES to synaptics in /etc/make.conf. If you want X to auto-configure other input devices, like external keyboards and mice, you should also add evdev to INPUT_DEVICES. See the Input drivers article for further information.

Below is a custom, Eee 901 specific FDI file. FDI files are basically rule sets for HAL on how to configure the features of various input drivers. Make sure you save it too /etc/hal/fdi/policy/:

File: /etc/hal/fdi/policy/10-x11-input-eee901.fdi
<?xml version="1.0" encoding="utf-8"?>
<deviceinfo version="0.2">
        <match key="info.product" contains="ETPS/2 Elantech Touchpad">
                <append key="info.capabilities" type="strlist">input.touchpad</append>
        </match>
        <match key="info.capabilities" contains="input.touchpad">
                <merge key="input.x11_driver" type="string">synaptics</merge>
                <merge key="input.x11_options.SHMConfig" type="string">True</merge>
                <merge key="input.x11_options.Protocol" type="string">auto-dev</merge>
                <merge key="input.x11_options.Device" type="string">/dev/input/by-path/platform-i8042-serio-1-event-mouse</merge>
                <merge key="input.device" type="string">/dev/input/by-path/platform-i8042-serio-1-event-mouse</merge>

                <merge key="input.x11_options.LeftEdge" type="string">60</merge>
                <merge key="input.x11_options.RightEdge" type="string">1070</merge>
                <merge key="input.x11_options.TopEdge" type="string">90</merge>
                <merge key="input.x11_options.BottomEdge" type="string">680</merge>

                <merge key="input.x11_options.MaxTapTime" type="string">180</merge>
                <merge key="input.x11_options.MaxTapMove" type="string">59</merge>
                <merge key="input.x11_options.MaxDoubleTapTime" type="string">180</merge>
                <merge key="input.x11_options.FastTaps" type="string">1</merge>

                <merge key="input.x11_options.MinSpeed" type="string">0.219</merge>
                <merge key="input.x11_options.MaxSpeed" type="string">0.937</merge>
                <merge key="input.x11_options.AccelFactor" type="string">0.16</merge>

                <merge key="input.x11_options.Emulate3Buttons" type="string">0</merge>
                <merge key="input.x11_options.LBCornerButton" type="string">2</merge>
                <merge key="input.x11_options.VertTwoFingerScroll" type="string">1</merge>
                <merge key="input.x11_options.HorizTwoFingerScroll" type="string">1</merge>
                <merge key="input.x11_options.LockedDrags" type="string">0</merge>
                <merge key="input.x11_options.CoastingSpeed" type="string">0.13</merge>
                <merge key="input.x11_options.CircularScrolling" type="string">1</merge>
                <merge key="input.x11_options.CircScrollTrigger" type="string">8</merge>
                <merge key="input.x11_options.TapButton1" type="string">1</merge>
                <merge key="input.x11_options.TapButton2" type="string">2</merge>
                <merge key="input.x11_options.TapButton3" type="string">3</merge>
        </match>
        <match key="info.capabilities" contains="input.keyboard"> <!-- keyboard -->
                <merge key="input.x11_driver" type="string">evdev</merge>
                <merge key="input.xkb.rules" type="string">xorg</merge>
                <!-- Layout are here set to English(American(US)) and Russian, change to fit. -->
                <merge key="input.xkb.layout" type="string">us,ru</merge>
                <merge key="input.xkb.variant" type="string">,winkeys</merge>
                <merge key="input.x11_options.XkbOptions" type="strlist">grp:caps_toggle</merge>
        </match>
</deviceinfo>

[edit] Framebuffer

Note: If you use a recent kernel with Intel Kernel Mode Setting enabled, you can skip this part, as the intel DRM module provides framebuffer functionality. See the fbsplash article on how to enable and configure a splash image and console decor.

The eeepc BIOS doesn't report its native screen resolution. With uvesafb alone, the closest mode available is 1024x768.

In order to get the native 1024x600 resolution on the framebuffer, the 915resolution utility is needed to hack the video BIOS. The 915resolution package in the portage tree does not recognise the intel 945GME chipset, however. There is a bug that contains a patch.

Following directions from Spock's page, enable the the following features in your kernel. Note that Userspace Vesa VGA support must be a module, not built-in.

Linux Kernel Configuration: uvesafb kernel options
 Device Drivers ->
   <*> Connector - unified userspace <-> kernelspace linker  --->
   Graphics support ->
     [*] Support for frame buffer devices
     <M>   Userspace VESA VGA graphics support
     Console display driver support ->
       <*> Framebuffer Console support

Save the configuration and rebuild the kernel. Don't install it yet.

Fetch the 915resolution ebuild and patch from bugzilla and install to a local overlay.

And install the following packages:

emerge -a klibc v86d 915resolution

Rebuild the kernel and install it. Do not put any video mode selection on the kernel parameters line.

As root, check available video modes using:

915resolution -l

This will list the available modes according to the VESA BIOS. You probably don't want of 1920x1440 mode (5c), so this article will use its code to set up the custom resolution.

For the impatient, here is the shortest way to test it, run:

915resolution 5c 1024 600 32 modprobe uvesafb option_mode=1024x600-32@60 /etc/init.d/consolefont restart

You should now have a nice framebuffer with a neat font at native resolution. Now, to make your changes persistent (i.e. load them automatically), edit these two files :

File: /etc/conf.d/915resolution
...
replace="'5c 1024 600 32'"

File: /etc/init.d/uvesafb
#!/sbin/runscript
# Copyright 1999-2006 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2

depend() {
	after 915resolution
	before xdm
	before consolefont
}

start() {
	ebegin "1024x600-32@60"
	modprobe uvesafb mode_option=1024x600-32@60 || retval=$?
        eend ${retval}
}
add it to init with:
chmod +x /etc/init.d/uvesafb rc-update add 915resolution boot rc-update add uvesafb boot

[edit] Configuration

[edit] make.conf

You can also consider -Os march option as cache is a reasonable 32KB iL1/24KB dL1/512KB L2 and space may get tight on an SD card. See the Intel Atom N270 section of the Safe Cflags article for the CHOSTS, CFLAGS and CXXFLAGS.

File: /etc/make.conf
USE="mmx mmxext sse sse2 sse3 ssse3"

[edit] See also

[edit] External links

Personal tools