nc6000 photo Linux Mandrake

TuxMobil HP nc6000 & Mandrake Linux


Mon employeur me prête un portable HP nc6000. Celui-ci fonctionne relativement correctement avec Linux Mandrake 10.0 et 10.1 (community ou official). Cela dit, quelques détails subsitent, comme :

  • le wifi (chipset Atheros), le pilote semi-propriétaire madwifi fonctionnant relativement bien ;
  • la connexion infrarouge, où une solution existe pour l'initialisation du chipset SuperIO ;
  • les boutons gérant le son.
Mais avant de voir les détails qui fâchent, voici ce que nous donne lspci :
00:00.0 Host bridge: Intel Corp. 82855PM Processor to I/O Controller (rev 03)
00:01.0 PCI bridge: Intel Corp. 82855PM Processor to AGP Controller (rev 03)
00:1d.0 USB Controller: Intel Corp. 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) USB UHCI Controller #1 (rev 03)
00:1d.1 USB Controller: Intel Corp. 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) USB UHCI Controller #2 (rev 03)
00:1d.2 USB Controller: Intel Corp. 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) USB UHCI Controller #3 (rev 03)
00:1d.7 USB Controller: Intel Corp. 82801DB/DBM (ICH4/ICH4-M) USB2 EHCI Controller (rev 03)
00:1e.0 PCI bridge: Intel Corp. 82801 Mobile PCI Bridge (rev 83)
00:1f.0 ISA bridge: Intel Corp. 82801DBM (ICH4-M) LPC Interface Bridge (rev 03)
00:1f.1 IDE interface: Intel Corp. 82801DBM (ICH4-M) IDE Controller (rev 03)
00:1f.3 SMBus: Intel Corp. 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) SMBus Controller (rev 03)
00:1f.5 Multimedia audio controller: Intel Corp. 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) AC'97 Audio Controller (rev 03)
00:1f.6 Modem: Intel Corp. 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) AC'97 Modem Controller (rev 03)
01:00.0 VGA compatible controller: ATI Technologies Inc RV350 [Mobility Radeon 9600 M10]
02:04.0 Ethernet controller: Atheros Communications, Inc. AR5212 802.11abg NIC (rev 01)
02:06.0 CardBus bridge: O2 Micro, Inc. OZ711M3 SmartCardBus MultiMediaBay Controller
02:06.1 CardBus bridge: O2 Micro, Inc. OZ711M3 SmartCardBus MultiMediaBay Controller
02:06.2 System peripheral: O2 Micro, Inc. OZ711Mx MultiMediaBay Accelerator
02:06.3 CardBus bridge: O2 Micro, Inc. OZ711M3 SmartCardBus MultiMediaBay Controller
02:0e.0 Ethernet controller: Broadcom Corporation NetXtreme BCM5705M_2 Gigabit Ethernet (rev 03)

Voici pour lspci -v :

00:00.0 Host bridge: Intel Corp. 82855PM Processor to I/O Controller (rev 03)
Subsystem: Hewlett-Packard Company NC6000 laptop
Flags: bus master, fast devsel, latency 0
Memory at b0000000 (32-bit, prefetchable) [size=256M]
Capabilities: [e4] #09 [4104]
Capabilities: [a0] AGP version 2.0

00:01.0 PCI bridge: Intel Corp. 82855PM Processor to AGP Controller (rev 03) (prog-if 00 [Normal decode])
Flags: bus master, 66Mhz, fast devsel, latency 64
Bus: primary=00, secondary=01, subordinate=01, sec-latency=0
I/O behind bridge: 00002000-00002fff
Memory behind bridge: 90300000-903fffff
Prefetchable memory behind bridge: 98000000-9fffffff

00:1d.0 USB Controller: Intel Corp. 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) USB UHCI Controller #1 (rev 03) (prog-if 00 [UHCI])
Subsystem: Hewlett-Packard Company NC6000 laptop
Flags: bus master, medium devsel, latency 0, IRQ 10
I/O ports at 38c0 [size=32]

00:1d.1 USB Controller: Intel Corp. 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) USB UHCI Controller #2 (rev 03) (prog-if 00 [UHCI])
Subsystem: Hewlett-Packard Company NC6000 laptop
Flags: bus master, medium devsel, latency 0, IRQ 10
I/O ports at 38e0 [size=32]

00:1d.2 USB Controller: Intel Corp. 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) USB UHCI Controller #3 (rev 03) (prog-if 00 [UHCI])
Subsystem: Hewlett-Packard Company NC6000 laptop
Flags: bus master, medium devsel, latency 0, IRQ 10
I/O ports at 3c00 [size=32]

00:1d.7 USB Controller: Intel Corp. 82801DB/DBM (ICH4/ICH4-M) USB2 EHCI Controller (rev 03) (prog-if 20 [EHCI])
Subsystem: Hewlett-Packard Company NC6000 laptop
Flags: bus master, medium devsel, latency 0, IRQ 10
Memory at a0000000 (32-bit, non-prefetchable) [size=1K]
Capabilities: [50] Power Management version 2
Capabilities: [58] #0a [2080]

00:1e.0 PCI bridge: Intel Corp. 82801 Mobile PCI Bridge (rev 83) (prog-if 00 [Normal decode])
Flags: bus master, fast devsel, latency 0
Bus: primary=00, secondary=02, subordinate=05, sec-latency=32
Memory behind bridge: 90000000-902fffff

00:1f.0 ISA bridge: Intel Corp. 82801DBM (ICH4-M) LPC Interface Bridge (rev 03)
Flags: bus master, medium devsel, latency 0

00:1f.1 IDE interface: Intel Corp. 82801DBM (ICH4-M) IDE Controller (rev 03) (prog-if 8a [Master SecP PriP])
Subsystem: Hewlett-Packard Company NC6000 laptop
Flags: bus master, medium devsel, latency 0, IRQ 10
I/O ports at <unassigned>
I/O ports at <unassigned>
I/O ports at <unassigned>
I/O ports at <unassigned>
I/O ports at 3c20 [size=16]
Memory at 40000000 (32-bit, non-prefetchable) [size=1K]

00:1f.3 SMBus: Intel Corp. 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) SMBus Controller (rev 03)
Subsystem: Hewlett-Packard Company NC6000 laptop
Flags: medium devsel
I/O ports at 1200 [size=32]

00:1f.5 Multimedia audio controller: Intel Corp. 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) AC'97 Audio Controller (rev 03)
Subsystem: Hewlett-Packard Company NC6000 laptop
Flags: bus master, medium devsel, latency 0, IRQ 11
I/O ports at 3000 [size=256]
I/O ports at 3880 [size=64]
Memory at a0100000 (32-bit, non-prefetchable) [size=512]
Memory at a0180000 (32-bit, non-prefetchable) [size=256]
Capabilities: [50] Power Management version 2

00:1f.6 Modem: Intel Corp. 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) AC'97 Modem Controller (rev 03) (prog-if 00 [Generic])
Subsystem: Hewlett-Packard Company NC6000 laptop
Flags: medium devsel, IRQ 11
I/O ports at 3400 [size=256]
I/O ports at 3800 [size=128]
Capabilities: [50] Power Management version 2

01:00.0 VGA compatible controller: ATI Technologies Inc RV350 [Mobility Radeon 9600 M10] (prog-if 00 [VGA])
Subsystem: Hewlett-Packard Company NC6000 laptop
Flags: bus master, 66Mhz, medium devsel, latency 64, IRQ 10
Memory at 98000000 (32-bit, prefetchable) [size=128M]
I/O ports at 2000 [size=256]
Memory at 90300000 (32-bit, non-prefetchable) [size=64K]
Expansion ROM at <unassigned> [disabled] [size=128K]
Capabilities: [58] AGP version 2.0
Capabilities: [50] Power Management version 2

02:04.0 Ethernet controller: Atheros Communications, Inc. AR5212 802.11abg NIC (rev 01)
Subsystem: Compaq Computer Corporation: Unknown device 00e5
Flags: bus master, medium devsel, latency 64, IRQ 11
Memory at 90080000 (32-bit, non-prefetchable) [size=64K]
Capabilities: [44] Power Management version 2

02:06.0 CardBus bridge: O2 Micro, Inc. OZ711M3 SmartCardBus MultiMediaBay Controller
Subsystem: Hewlett-Packard Company NC6000 laptop
Flags: bus master, stepping, slow devsel, latency 168, IRQ 10
Memory at 90100000 (32-bit, non-prefetchable) [size=4K]
Bus: primary=02, secondary=03, subordinate=06, sec-latency=176
Memory window 0: 40400000-407ff000 (prefetchable)
Memory window 1: 40800000-40bff000
I/O window 0: 00004000-000040ff
I/O window 1: 00004400-000044ff
16-bit legacy interface ports at 0001

02:06.1 CardBus bridge: O2 Micro, Inc. OZ711M3 SmartCardBus MultiMediaBay Controller
Subsystem: Hewlett-Packard Company NC6000 laptop
Flags: bus master, stepping, slow devsel, latency 168, IRQ 10
Memory at 90180000 (32-bit, non-prefetchable) [size=4K]
Bus: primary=02, secondary=07, subordinate=0a, sec-latency=176
Memory window 0: 40c00000-40fff000 (prefetchable)
Memory window 1: 41000000-413ff000
I/O window 0: 00004800-000048ff
I/O window 1: 00004c00-00004cff
16-bit legacy interface ports at 0001

02:06.2 System peripheral: O2 Micro, Inc. OZ711Mx MultiMediaBay Accelerator
Subsystem: Hewlett-Packard Company NC6000 laptop
Flags: slow devsel, IRQ 10
Memory at 90200000 (32-bit, non-prefetchable) [size=4K]
Capabilities: [a0] Power Management version 2

02:06.3 CardBus bridge: O2 Micro, Inc. OZ711M3 SmartCardBus MultiMediaBay Controller
Subsystem: Hewlett-Packard Company NC6000 laptop
Flags: bus master, stepping, slow devsel, latency 168, IRQ 10
Memory at 90280000 (32-bit, non-prefetchable) [size=4K]
Bus: primary=02, secondary=0b, subordinate=0e, sec-latency=176
Memory window 0: 41400000-417ff000 (prefetchable)
Memory window 1: 41800000-41bff000
I/O window 0: 00005000-000050ff
I/O window 1: 00005400-000054ff
16-bit legacy interface ports at 0001

02:0e.0 Ethernet controller: Broadcom Corporation NetXtreme BCM5705M_2 Gigabit Ethernet (rev 03)
Subsystem: Hewlett-Packard Company NC6000 laptop
Flags: bus master, 66Mhz, medium devsel, latency 64, IRQ 11
Memory at 90000000 (64-bit, non-prefetchable) [size=64K]
Expansion ROM at <unassigned> [disabled] [size=64K]
Capabilities: [48] Power Management version 2
Capabilities: [50] Vital Product Data
Capabilities: [58] Message Signalled Interrupts: 64bit+ Queue=0/3 Enable-

Les pilotes principaux sont les suivants / main drivers as follow :

  • réseau/network : tg3 (Linux Kernel) or bcm5700 (directly from Broadcom)
  • XFree86/X.org + Synaptics : works ok from scrolling from the touchpad, but no tapping
Section "Files"
# Multiple FontPath entries are allowed (they are concatenated together)
# By default, Mandrake 6.0 and later now use a font server independent of
# the X server to render fonts.
FontPath "unix/:-1"
EndSection

Section "ServerFlags"
#DontZap # disable <Crtl><Alt><BS> (server abort)
AllowMouseOpenFail # allows the server to start up even if the mouse doesn't work
#DontZoom # disable <Crtl><Alt><KP_+>/<KP_-> (resolution switching)
EndSection

Section "Module"
Load "dbe" # Double-Buffering Extension
Load "v4l" # Video for Linux
Load "extmod"
Load "type1"
Load "freetype"
Load "glx" # 3D layer
Load "dri" # direct rendering
Load "/usr/X11R6/lib/modules/extensions/libglx.a"
Load "synaptics"
EndSection

Section "InputDevice"
Identifier "Keyboard1"
Driver "keyboard"
Option "XkbModel" "pc105"
Option "XkbLayout" "fr"
Option "XkbOptions" ""
EndSection

Section "InputDevice"
Identifier "SynapticsMouse1"
Driver "synaptics"
Option "Protocol" "auto-dev"
Option "Device" "/dev/input/mice"
Option "MaxSpeed" "0.12"
Option "MinSpeed" "0.06"
Option "BottomEdge" "4200"
Option "SHMConfig" "on"
Option "LeftEdge" "1700"
Option "FingerLow" "25"
Option "MaxTapTime" "180"
Option "MaxTapMove" "220"
Option "FingerHigh" "30"
Option "VertScrollDelta" "100"
Option "TopEdge" "1700"
Option "RightEdge" "5300"
Option "AccelFactor" "0.0010"
EndSection

Section "InputDevice"
Identifier "Mouse1"
Driver "mouse"
Option "Protocol" "ExplorerPS/2"
Option "Device" "/dev/mouse"
Option "ZAxisMapping" "4 5"
EndSection

Section "InputDevice"
Identifier "SynapticsMouse1"
Driver "synaptics"
Option "Protocol" "auto-dev"
Option "Device" "/dev/input/mice"
Option "MaxSpeed" "0.12"
Option "MinSpeed" "0.06"
Option "BottomEdge" "4200"
Option "SHMConfig" "on"
Option "LeftEdge" "1700"
Option "FingerLow" "25"
Option "MaxTapTime" "180"
Option "MaxTapMove" "220"
Option "FingerHigh" "30"
Option "VertScrollDelta" "100"
Option "TopEdge" "1700"
Option "RightEdge" "5300"
Option "AccelFactor" "0.0010"
EndSection

Section "Monitor"
Identifier "monitor1"
VendorName "Generic"
ModelName "Flat Panel 1024x768"
HorizSync 31.5-48.5
VertRefresh 40-70

# Sony Vaio C1(X,XS,VE,VN)?
# 1024x480 @ 85.6 Hz, 48 kHz hsync
ModeLine "1024x480" 65.00 1024 1032 1176 1344 480 488 494 563 -hsync -vsync

# TV fullscreen mode or DVD fullscreen output.
# 768x576 @ 79 Hz, 50 kHz hsync
ModeLine "768x576" 50.00 768 832 846 1000 576 590 595 630

# 768x576 @ 100 Hz, 61.6 kHz hsync
ModeLine "768x576" 63.07 768 800 960 1024 576 578 590 616
EndSection

Section "Device"
Identifier "device1"
BoardName "ATI Radeon"
Driver "radeon"
Option "DPMS"
EndSection

Section "Screen"
Identifier "screen1"
Device "device1"
Monitor "monitor1"
DefaultColorDepth 24

Subsection "Display"
Depth 8
Virtual 1024 768
EndSubsection

Subsection "Display"
Depth 15
Virtual 1024 768
EndSubsection

Subsection "Display"
Depth 16
Virtual 1024 768
EndSubsection

Subsection "Display"
Depth 24
Virtual 1024 768
EndSubsection
EndSection

Section "ServerLayout"
Identifier "layout1"
InputDevice "Keyboard1" "CoreKeyboard"
InputDevice "Mouse1" "CorePointer"
InputDevice "SynapticsMouse1" "AlwaysCore"
Screen "screen1"
EndSection

Les boutons de gestion du son

Les trois boutons en face avant du portable permettant de couper le volume et le baisser ou l'augmenter fonctionnent bien sous Linux. Ils sont en fait gérés comme trois touches du clavier comme l'indique le premier lien.

Après quelques recherches sur les associations les plus pertinentes, il ressort que XFree86/X.org définit trois évènements qui nous intéressent au plus haut point. Le plus simple est de les mettre dans un fichier /etc/X11/xinit.d/nc6000 :

xmodmap -e 'keycode 160 = XF86AudioMute'
xmodmap -e 'keycode 174 = XF86AudioLowerVolume'
xmodmap -e 'keycode 176 = XF86AudioRaiseVolume'

Et comme je suis utilisateur de KDE, et que KDE gère ces trois évènements, plus rien d'autre à configurer... :-) Je n'ai cependant pas trouvé le moyen d'allumer la LED rouge du bouton pour couper le son.
Update : depuis la version 2.6.11-rc1 du noyau, et grâce à Linus Walleij qui a remonté l'information aux développeurs ALSA, la LED du bouton 'Mute' fonctionne !

WiFi Atheros

Le pilote madwifi fonctionne très bien, pourvu que l'on utilise la version 10.1 de Mandrake. En effet, la version 10.0 est un peu trop ancienne sur certains paquetages pour permettre de compiler correctement le pilote.

J'ai utilisé une version CVS de novembre 2004, qui semble fonctionner correctement. N'ayant cependant pas d'équipement WiFi pour tester, mais ayant néanmoins pu accrocher un AP ou un autre, cela me laisse à dire que ça fonctionne. Reste à le packager, ce que Mandrake a semble-t'il fait pour les membres du Club. Des volontaires pour PLF ?

Une fois les trois modules compilés, simplement ajouter leurs noms au fichier /etc/modules pour les charger au boot :

wlan
ath_hal
ath_pci

N'oubliez pas que comme la radio WiFi est controllée par le bouton avec une petite antenne, vous aurez besoin de relancer un ifup ath0 après avoir activé le WiFi. La LED bleue indiquant que la radio (WiFi + Bluetooth) est active s'allume seule.

Bluetooth

L'adaptateur Bluetooth du nc6000 est branché en interne sur le bus USB. Celui-ci est activé (connecté) lors de l'appui sur le bouton avec l'antenne. Il est reconnu par KDE, mais n'ayant pas d'autre équipement, je n'ai pu tester.

IrDA

La gestion de l'infrarouge sur le nc6000 est basé sur le chipset SuperIO LPC47N227 de SMSC. L'avantage de ce chipset est qu'il est bien documenté ce qui aide grandement au développement d'outils.

La partie infrarouge de ce chipset permet soit une émulation d'une UART classique avec des débits ne dépassant pas les 115200 bit/s (mode SIR), soit par le biais d'une interface particulière de type LPC (un pont PCI vers ISA). Comme le port IR est pris en charge au boot par le pilote serial, il faut ensuite le ré-initialiser puis charger le pilote spécifique (smsc-ircc2).

L'initialisation se fait à l'aide d'une version modifiée de smcinit.c trouvé sur http://irda.sourceforge.net/smcinit/. L'archive modifiée prête à compiler est ici. Le but de la modification de smcinit.c a été de faire tester les deux adresses de base de configuration possibles déterminée par la patte SYSOPT. En effet, sur le nc6000, l'adresse est à 0x4E et non 0x2E seule valeur supportée par le programme. Ceci fait, un peu de nettoyage de code de façon à rendre toutes les options fonctionnelles, et hop, ça marche mieux.

Les valeurs à passer à smcinit pour le nc6000 sont les suivantes :

/bin/setserial /dev/ttyS2 uart none
/usr/sbin/smcinit -v -s 0x3E8 -f 0x130 -i 7 -d 3
modprobe smsc-ircc2 ircc_dma=3 ircc_irq=7 ircc_fir=0x130 ircc_sir=0x3e8

For our english readers

My employer lends me a HP nc6000 notebook. It works quite nicely with Mandrake Linux 10.0 or better 10.1 (either community or official versions). However, some details remain unset or non functionnal, such as:

  • the wifi adapter (Atheros chipset based), the semi-proprietary madwifi is working somewhat flawlessly,
  • the IrDA adapter, a solution being presented here to initialize the SuperIO chipset,
  • the sound settings buttons.

Sound buttons

The three buttons on the front face on the laptop are to be used to control volume, either raising, lowering or muting. They work quite well under Linux because, in fact, they are seen as keyboard keys as showed by Patrick Reynolds.
It turns out, after some research, that XFree86/X.org has three very interesting events. The most simple thing to do to use them is to a associate them in the /etc/X11/xinit.d/nc6000 file:
xmodmap -e 'keycode 160 = XF86AudioMute'
xmodmap -e 'keycode 174 = XF86AudioLowerVolume'
xmodmap -e 'keycode 176 = XF86AudioRaiseVolume'
And as I use KDE, and as KDE handle these events, nothing more to do... :-) First, I did not find how to light/unlight the red LED behind the mute button, but thanks to Linus Walleij who proposed a patch to the ALSA developers, it works finely begining with  the 2.6.11-rc1 Linux kernel.

Atheros WiFi

The madwifi works nicely under the 10.1 Mandrake Linux distro. 10.0 is a bit too old to permit to compile it.
I checked out a CVS version from nomvember 2004, which seems to work. However, I do not have an access point, so YMMV.
Once compiled and installed, just add the following modules in the right order to /etc/modules file to load them at boot:

wlan
ath_hal
ath_pci
Do not forget to manually (re)start the ath0 interface (ifup ath0) after activating the WiFi/Bluetooth radio. The blue LED showing radio activity (unintended pun) should light without any help.

Here is presented a strongly modified smcinit utility used to initialize the SMSC SuperIO chipset in order to use the IR transmitter on the HP/Compaq nc6000.

Bluetooth

The Bluetooth adapter in the nc6000 is internaly plugged on the USB bus. It is obviously activated as one press the radio button (see below). KDE recognises it, but having no Bluetooth equipment, I could not test it.

About smcinit to init IrDA

Modifications include:

  • autoconf/automake support
  • bug fixes in arguments handling (some args would not even be considered)
  • autodiscovery of SMSC chip base address (0x2e or 0x4e)
  • extension of the sysconfig/smcinit content to allow distributions to specify addresses according to the hardware
  • rewriting of /etc/init.d/smcinit (same name, maybe should be another one) to work nicely on Mandrake/RedHat (only tested on Mandrake 10.1)

I've asked a few questions to the IrDA-users list:

  • Does anybody here knows a way to automate the discovery of the laptop model in order to specify the right arguments to smcinit?
  • I'd like to set up a parameter database, would the tosh-superio.h be a good point from where to start? Would would be the best form for this database ? What would be the key (laptop model, ACPI "variable"(?), PCI Id, etc.)?
  • I also need some advice: would it be nice to try to deactivate the ttyS2 (or other) UART via the right ioctl the same way setserial would do it, restoring values if no SuperIO is found, or should this be kept a pure and only setserial task?

The smcinit archive is here.

D'autres pages au sujet de Linux sur nc6000

jerome AT fenal.org, le 11 janvier 2005. Copyright 2005 © Jérôme Fenal. Tous droits réservés. All Rights Reserved.

Valid HTML 4.01! Visit counter