Fujitsu lifebook application panel
Technical information and drivers for *n*x platforms

Technical Details

This page is the 'newer' techinfo page. The application panel is accessed using the system management bus. Before I discovered that, I used raw i/o sequences to talk to it. You can still look at the old page by following the link to the old tech page.

Even more interesting are datasheets from O2 Micro. Full datasheets containing smbus commands are not available from their site. Never mind, I found them anyway for the oz163t (cd buttons and lcd) and oz992c (application buttons and led). Contact me if you want the datasheets.

But these ic's are used in the Fujitsu C-4110 and some other models. There is at least one other ic that's used in application panels.

In most lifebook models, the application panel is connected to the system management bus. There is a certain model (I'll call it model X) that uses i/o ports 0x472 and 0x477. This model has a led and application buttons. This project however currently only covers the system management bus part.

BIOS configuration parameters

In the BIOS of a Fujitsu lifebook, the string FJKEYINF can be found. This indicates the start of the application panel configuration block. This string can be found on a 16-byte boundary of the BIOS (the last hex digit of the startaddress of this string is zero).

After the 8-byte string, max. 6 device parameter blocks follow, each 4 byte long. Each device parameter block consists of the following:

byte name Description
0devicetype =0 end of application panel configuration block (?)
=1 device Application buttons
=2 device CD Buttons
=3 device LCD, with chip type=2
=4 device LED, with chip type=1
=6 device LED, with chip type=4
=7 device Three application buttons
1access_method =0 use model X access method
=1/2/4 system management bus access method
2chip type =01: oz992c
=02: oz163t
=04: ???
3deviceno For access_method!=0, this indicates the system management bus slave device number.

The original driver also checks for the presence of the string FUJITSU and fails if some checksum is not correct. If you really want to know the details, mail me and I'll find it out.

Application panel configuration block example

For example, the Fujitsu lifebook C-6175 has the following configuration block:

     FJKEYINF string     paramblk1   paramblk2
/---------------------\ /---------\ /---------\
46 4a 4b 45 59 49 4e 46 01 01 01 30 04 01 01 30 |FJKEYINF...0...0|

First the string FJKEYINF, then two device configuration blocks. The first block has device_type 1, which indicates an "Application buttons" device. This device is enabled and uses the system management bus at device 0x30. The second device is a LED which is enabled and uses the system management device 0x30 (Yes, they have the same devicenumbers but input devices use different function numbers than output devices).

Device access using the system management bus

I'm not explaining here how the system management bus works (see the link page for more information on that), but how to talk to the application panel devices connected to the system management bus.

The slave device number is known from the BIOS application panel configuration block. This is the 'raw' slave device, so don't shiftleft it to make room for the R/W bit. The lowest bit is (hopefully :) always zero. (If you don't understand this, just ignore it or read the smbus specification)

The system management bus commands that are used to access the application panel are word writes & reads. Maybe other functions are supported too, but I didn't succeed (I haven't tried that hard however). The word write & read commands have a slave address (see above), a command value (which indicates the action that should be taken) and a data byte. Next table shows what command values should be used.

Device Command Access Description
LCD0x06R/W Set/read the LCD to display the data byte (highest bit ignored)
0x00 Clear LCD (completely empty)
0x01-0x63 Show number on display
0x64-0x7f Display '--'
LED0x0f?/W 0x0nm0
n =0: pause blinking, =1: continue blinking
m =0: duty cycle 50%, =8: duty cycle around 85%
0x10?/W 0x0000 LED off
0x80nn LED on, starting blinking cycle on nn (?)
0x11?/W 0xMM00 Set blinking speed: t=2^(4-MM/16)
ApplBtn0x00R/- Bitmask, = 0x0f00 when at rest and each currently pressed key is substracted from it: A (0x400), B (0x800), Internet (0x200), Email (0x100).
CDBtn0x01R/W This is a register in which bits are set when a key has been pressed. It doesn't clear automatically, so after each read one should clear it by hand by writing to it. The keys are: Play/Pause (0x20), Stop/Eject (0x8), Forward (0x2), Backward (0x1).