Flameman/zaurus-akita

= zaurus-akita-Flameman =

these pages are still in proof version, be patient i am spending my free time developing for the zaurus ... i can assure we have a lot of things to fix up =P

Note
Apologize for the poor status of this ewiki, I am developing for this board, so the wiki page will be improved and completed as soon as it it will be possible

feel free to contact me (see the contact below) in case you need support.

Introduction
The Target-goal of this page is
 * install uc-gentoo into mmc-sd
 * develop devices
 * make the board able to boot it
 * optimize uc-gentoo for embedded
 * produce a uc-gentoo-uclibc
 * add framebuffer and touch screen support
 * re-target all the project into "tiny PDA"

People you could contact if you need help

 * flameman, i'm currently use this board for a project, email
 * msn daredevil-coder@hotmail.it
 * email flamemaniii@gmail.com
 * irc.nick flameman (channel #edev, #oe, #zaurus)
 * you ... if you want ;-)


 * buglist http://bugs.openembedded.net/buglist.cgi?bug_status=REOPENED&bug_status=CONFIRMED&bug_status=ASSIGNED&bug_status=UNCONFIRMED&bug_status=NEEDSINFO&field0-0-0=product&type0-0-0=substring&value0-0-0=akita&field0-0-1=component&type0-0-1=substring&value0-0-1=akita&field0-0-2=short_desc&type0-0-2=substring&value0-0-2=akita&field0-0-3=status_whiteboard&type0-0-3=substring&value0-0-3=akita&field0-0-4=longdesc&type0-0-4=substring&value0-0-4=akita&cmdtype=&remaction=&GoAheadAndLogIn=1

my bug http://bugs.openembedded.net/show_bug.cgi?id=5152

About this project
embedded target

Overview
Sharp has introduced a new model in its Zaurus line of Linux PDAs. The SL-C1000 is similar to the SL-C3000, but without an internal harddrive. As with previous Japan-only Zaurus models, the SL-C1000 will be available with internationalization features from a number of global resellers.

The SL-C1000 is based on a 416MHz Intel PXA270 processor. It boots from 128MB of Flash, and includes 64MB of RAM. The 3.7-inch color VGA touchscreen (640 x 480) supports 65K colors. The keyboard uses a stardard QWERTY layout.

The SL-C1000 includes memory slots for SD/MMC cards, as well as for CompactFlash cards. Additional I/O includes IrDA, USB, and LAN ports. It measures 4.9 x 3.4 x 1 inches (124 x 87 x 25mm), and weighs 10 oz (278 grams).

specifications

 * Processor: Intel(r) Xscale(tm) PXA270 416Mhz processor
 * Memory: 128MB Flash, 64MB SDRAM work area
 * Display: 3.7" 640x480 VGA LCD screen with 65536 colours
 * Keyboard & Input: Full QWERTY keyboard, touch-sensitive screen with handwriting recognition
 * Expansion: One slot for CompactFlash (CF) memory cards (type I and II, 3.3V cards only), one slot for Secure Digital (SD) memory cards
 * Connectivity: USB host port (cable supplied separately) for connecting to printers and digital cameras. USB 1.1 link for attaching to desktop PCs - Zaurus appears as a computer in the network neighbourhood. CompactFlash (CF) card slot can take Wireless LAN (802.11b), Bluetooth, GPRS, Ethernet and Modem cards (supplied separately). Infrared port (IrDA, 115kbps) for communicating with mobile phones, laptops and cameras.
 * Audio: 3.5mm stereo headphone socket (headphones not included with C1000). Media player plays MP3 and WMA music files, and MPEG1 and Microsoft WMV/ASF video files.
 * Dimensions: 124mm (width) x 87mm (depth) x 25mm (height) Weight: 278g
 * Battery & power: Lithium Ion battery provides 8 hours (low brightness/contrast) Electrical:
 * Power Connector: gnd (+), ground outside, +5v inside
 * Power supply 240V converted to 3.2V DC by AC adapter. Power consumption 3.2W
 * Operational restrictions: Operating temperature 5-40 degrees centigrade

more specifications
SPECIFICATIONS


 * Display Type: DFSTN LCD, Touch Screen Finger or Stylus Operation.
 * Display Resolution: 320 X 240 dots (up to 65 char. X 20 lines)
 * Display Physical Size: 4.0" X 2.6"
 * On Board RAM: 1MB (approx. 665K user area) -
 * Appointments capacity: Approx. 9,600 entries
 * Contacts capacity: Approx. 9,900 entries

These capacities assume the following average entry sizes and only apply when all the available memory is committed to a single function.


 * Appointments: 32 characters/entry
 * Contacts: 16 characters/entry in the name field, 12 characters/entry in the number field

Maximum Data Per Entry:

* Documents: 16 Kb   * Outlines: 32Kb for an entire outline, 2Kb for each topic * Contacts/Data Files: 2 Kb for text data, 61.7Kb for graphics data * Others: 2Kb

Other Features: Secret function, data transfer, keyword search, messages, etc.

Calculator:

* Digits: 10 * Functions: Addition, subtraction, multiplication, division, constant, square root, percent, memory calculation, date calculation, paperless printer.

Operating Environment: 32 deg. F to 104 deg. F (0 deg. C to 40 deg. C)

Weight: 10.88oz.

Size: 6.3" X 3.5" X 1"

Batteries: 2X AA (operating batteries) plus 1X CR-2032 (backup battery)

Battery Life: Up to 100 hours

AC Adapter: EA-23A and CE-BK1 battery pack (both optional).

IR Send Distance:

* 50 cm (20 inches) maximum at speeds of 9600 bps to 115 Kbps using IrDA-compatible protocol. * 50 cm (20 inches) maximum at speeds of 9600 bps to 115 Kbps using Sharp IR (ASK) protocol.

IR distance may change depending on the system used.

Serial Port: 15 pin; connect to a fax/modem or transfer data to your PC.

Infrared Port: IrDA compatible Infrared Communications; connect to a PC, Macintosh, PC Printer, or another Zaurus or Wizard without wires or cables.

Akita..Spitz / Zaurus C-1000..C-3000 power questions
I did some measurements of spitz battery subsystem; maybe they are useful for someone.

Unfortunately, concistent numbers are quite hard: longer/thinner cables mean lower voltage and also lower currents :-(. I get quite consistents 5V at power supply, but it goes down to 4.5..4.2V when it reaches zaurus behind ampermeter. (Is zaurus even able to charge battery properly from such low voltage?)

One big surprise was wlan CF card, eating +200mA when initialized.

I'm working on drivers/power/spitz_battery driver, and I'll need to know conversion between ADC readings and milivolts; does someone have those?

Does someone have better/more reliable/other power consumption numbers?

Idle, charging, no backlight, linux 2.6.26: 200mA @ 4.8V bl 1:                  310mA bl 10:                 315mA bl 20                  340mA bl 30:                 390mA bl 40:                 440mA bl 47:                 445mA disk is spinning:                      +50mA find /:                               +200mA cat /dev/zero:                        +100mA make:                                 +240mA

charging, powerdown:                   380mA..440mA charging, ROM menu:                    550mA D+M monitor, not charging:             170mA D+M monitor, half charging:            280mA D+M monitor, full charging:            480mA..550mA

Charging in ROM, from empty @ 8:35:    610mA 8:38:    555mA 8:45:    545mA 8:50:    540mA 9:01:    540mA 9:18:    530mA 9:36:    520mA 9:45:    505mA 9:51:    480mA 10:15:    365mA 10:48:    250mA 11:01:    225mA 11:31:    180mA 11:38:    170mA 12:48:     80mA, charger LED is off.

Measured @ li-ion battery. ROM                                    <7mA Linux 2.6.26 suspend:                  7.5mA, 10mA?! Linux 2.6.26, fully running, charger connected: 50uA :-(                                               100mA charge

The board consists of

 * CPU : Intel(r) Xscale(tm) PXA270 416Mhz [[Media:doc.pdf|doc.pdf]]
 * RAM soldered 64MB SDRAM
 * LAN USBETH 10/100Mbit/sec
 * UART RS232
 * FLASH 128MB Flash
 * POWER system=3.3V, feeder={5V DC, ___}, ___ Watt
 * System PCB ___ mm x ___ mm x ___ mm
 * RTC the real time clock chip is provided by the cpu


 * CPU_TYPE   PXA2
 * SYSTEM_TYPE ZAURUS-C1000

Memory Locations
memory map of the board will be added as soon as possible

does it means gnueabi-objdump -p vmlinux | sed -n 's/LOAD.*vaddr \([^ ]*\).*/\1/p' 0xc0008000 found the right address (0xA0008000)?
 * 1) 0x00008000 est reprsent par : 0x80 ror 24, cod par 0xC80 ;

Open questions -- ...

lan

 * usb-lan dmg9604: working with 2.6.23

uart
Sharp CE-170TS is a null modem serial cable for Zaurus. It seems to be actually the only available IOPORT serial cable working with the latest Zauruses. A bit expensive, but voltage does not conform RS-232 standard. It works nicely as a null modem with a standard PC, using a special null modem gender changer it works with a RS-232 hardware modem, but it does not work with mobile phone or GPS client cables.

You will find it (on amazon for example, $50) and it will be indicated "for sl-5500" ... well do not trust it: it will work for your c1000, too =P

antenna shields
by utx/Stanislav


 * []
 * []

Doc around
KB

The Fn+LeftArrow / Fn+RightArrow key combination to switch between console

escape is the cancel key

atl is ??? one of the jappo key, dunno

forum http://forum.soft32.com/linux/29-rc1-zaurus-spitz-ftopict475511.html

varia doc http://openzaurus.berlios.de/Main_Page

http://www.oesf.org/forum/index.php?showtopic=13238

http://carme.bfh.ch/downloads/Processor_Manuals/XSCALE/XSCALE_PXA27x_Family_Design_Guide_28000102.pdf

http://digit.que.ne.jp/visit/index.cgi?Linux%A5%B6%A5%A6%A5%EB%A5%B9%B3%AB%C8%AF%A5%E1%A5%E2%2F%A5%CF%A1%BC%A5%C9%A5%A6%A5%A7%A5%A2%2FC700%A5%E1%A5%E2%A5%EA%C1%FD%C0%DF

http://www.iral.com/~albertr/linux/zaurus/wireless/

http://www.oesf.org/forum/index.php?showtopic=13562

http://www.rpsys.net/openzaurus/

http://linuxdevices.com/news/NS5128534085.html

http://www.penguin.cz/~utx/zaurus/

http://www.penguin.cz/~utx/zaurus/photos#ce-170ts

http://www.oesf.org/index.php?title=System

ftp://pda.gentoo.ru/projects/handhelds/zaurus-c1000/

http://stuvel.eu/zaurus

http://www.angstrom-distribution.org/c1000-install-instructions

http://www.angstrom-distribution.org/unstable/autobuild/akita/

http://www.angstrom-distribution.org/demo/kexecboot/

http://www.h5.dion.ne.jp/~rimemoon/zaurus/memo_003.htm

hw http://tdiedrich.de/Zaurus

uboot http://www.pdaxrom.org/?q=node/89

IRDA

http://www.oesf.org/forum/index.php?s=554c57276527ae8d0ad02a12001344b1&showtopic=25313&st=0&p=173339&#entry173339

1) irda-utils

2) mknod /dev/ircomm0 c 161 0

3) ircomm

modprobe pxaficp_ir modprobe ircomm modprobe ircomm_tty irattach irda0 -s

4) i modprobe irda too

idea GPS

wiki.navit-project.org

USB

http://en.wikipedia.org/wiki/Universal_Serial_Bus#Types_of_USB_connector

http://en.wikipedia.org/wiki/USB_On-The-Go

i like the idea here, but let me get a few things straight: 1. are you guys trying to use the sharp i/o port's USB port? 2. if not, is this possible? What about stuart? In case you don;t need SIR.

C-860, kernel 2.4, irda --> ttyS01

I believe the scoop is a proprientary Sharp's ASIC, so the datasheet most probably never would be published or made public: it is an ASIC but by EPSON GA_SLA50000, that is a gate array and we probably will never know what sharp has putted into it. It is a pity.

Any of BTUART pins can be used as usualy GPIO pins. This is so called alternate GPIO function and is described in intel's datasheet. So when BTUART is disabled all its pins are working as just any other GPIO pins. And BTUART is disabled by default in kernel source.

static void __init corgi_map_io(void) { pxa_map_io; iotable_init(corgi_io_desc);

/* This enables the BTUART */ CKEN |= CKEN7_BTUART; set_GPIO_mode(GPIO42_BTRXD_MD); set_GPIO_mode(GPIO43_BTTXD_MD); set_GPIO_mode(GPIO44_BTCTS_MD); set_GPIO_mode(GPIO45_BTRTS_MD);
 * 1) if 0
 * 1) endif

/* setup sleep mode values */ PWER = 0x00000002; PFER = 0x00000000; PRER = 0x00000002; PGSR0 = 0x0158C000; PGSR1 = 0x00FF0080; PGSR2 = 0x0001C004; PCFR |= PCFR_OPDE; }

Images of the board




hardware
Notes, these devices are connected to ioexp:
 * IrDA on/off
 * Backlight power on/off
 * Highest bit of baclight intensity
 * Pull-up voltage for remote on/off
 * Microphone bias on/off

These devices use I2C:
 * Akita IOEXP (PXA270 I2C bus)
 * Maxim MAX7310 gpio expander
 * Wolfson Microsystems WM8750 audio chip (PXA270 I2S bus)

you need to add WM8750 and MAX7310 chips (I2C slaves). Wolfson Microsystems WM8750 audio chip and Maxim MAX7310 gpio expander chip are used in the Spitz.

Kernel <=2.6.27 have a bug: If audio initialization fails for any reason, system crashes in suspend (device remains registered, but some pointers are NULL). Later kernels fixed this problem. ... 2.6.30 is still pre commit

> umm, i need the IrDA, too ... but it seems the IrDA transreceiver is not > enabled: it seems it needs a poweron/off made by the max7310 i2c port >expander

Exactly: Irda is connected to one of three serial ports of PXA270, but the transceiver is switched by the GPIO connected to the ioexp on akita and to the spare pin of scoop2 (internal CF slot chip) on spitz.

usb-ethernet
(.) USB CATC NetMate-based Ethernet device support (EXPERIMENTAL) (.) USB KLSI KL5USB101-based ethernet device support (.) USB Pegasus/Pegasus-II based ethernet device support (.) USB RTL8150 based ethernet device support (EXPERIMENTAL)

(.) Multi-purpose USB Networking Framework (.) ASIX AX88xxx Based USB 2.0 Ethernet Adapters Aten UC210T ASIX AX88172 Billionton Systems,USB2AR Buffalo LUA-U2-KTX Corega FEther USB2-TX D-Link DUB-E100 Hawking UF200 Linksys USB200M Netgear FA120 Sitecom LN-029 Intellinet USB 2.0 Ethernet ST Lab USB 2.0 Ethernet TrendNet TU2-ET100 (.) CDC Ethernet support (smart devices such as cable modems) (*) Davicom DM9601 based USB 1.1 10/100 ethernet devices (.) GeneSys GL620USB-A based cables (.) NetChip 1080 based cables (Laplink, ...) (.) Prolific PL-2301/2302 based cables (.) MosChip MCS7830 based Ethernet adapters (.) Host for RNDIS and ActiveSync devices (EXPERIMENTAL) (.) Simple USB Network Links (CDC Ethernet subset) (.) Sharp Zaurus (stock ROMs) and compatible

macbook-air MB442Z/A Apple USB Enternet Adapter

~ ASIX AX88xxx Based

AppleUSBEthernet Chipsets inside: AX88178, AX88772

Apple USB Enternet Adapter: Version: 0.0.1 BUS Power(mA): 500 Speed: Up to 480 MB/sec Manufacturer: Apple Inc. Proudct ID: 0x1402

CONFIG_USB_NET_AX8817X  += asix.o

--- a/drivers/net/usb/asix.c +++ b/drivers/net/usb/asix.c @@ -1444,6 +1444,10 @@ static const struct usb_device_id	produc // Apple USB Ethernet Adapter USB_DEVICE(0x05ac, 0x1402), .driver_info = (unsigned long) &ax88772_info, +}, { +	// Cables-to-Go USB Ethernet Adapter +	USB_DEVICE(0x0b95, 0x772a), +	.driver_info = (unsigned long) &ax88772_info, }, 	{ },		// END };

Hack
PCB.

irda
emerge net-wireless/irda-utils

modprobe pxaficp_ir

mknod /dev/ircomm0 c 161 0

modprobe ircomm

modprobe ircomm_tty

irattach irda0 -s irattach /dev/ttySx

idea from Zaurus C750
Angel remote debug interface (with CE-170TS cable)

* Compile gdb with rdi support: Use gdb-5.3/gcc-3.3, 'configure --target=arm-elf' * Remove battery from Zaurus, hold down D+A, insert battery * If serial port was connected, at 9600 baud it should show:

Angel Debug Monitor for Collie Version 0.42 for SL-C700/5600 : Serial/FIQ : MMU on, Caches enabled : Clock Switching on 1.20 (ARM Ltd / Intel White Angel v208a) built on Feb 21 2003 at 12:41:06 ,PpMc

* In arm-gdb use 'target rdi /dev/ttyS0' (Symlink ttyUSB0 to ttyS0 or ttyS1, rdi target is picky on device name)

(gdb) target rdi /dev/ttyUSB0 Could not open device "/dev/ttyUSB0" (gdb) target rdi /dev/ttyS0 Angel Debug Monitor for Collie Version 0.42 for SL-C700/5600 : Serial/FIQ : MMU on, Caches enabled : Clock Switching on 1.20 (ARM Ltd / Intel White Angel v208a) built on Feb 21 2003 at 12:41:06 SerConnected to ARM RDI target.

* Use 'target rdi /dev/ttyS0 11520' for higher baudrate

Hello world example program:

static const char hello_world[] = "Hello World!\n";

void __attribute((naked)) _start(void) { asm( "      mov r0, #0x04    /* Write0 */\n" \ "       ldr r1, =hello_world         \n" \ "       swi 0x123456                 \n" \ "       mov r0, #0x18    /* ReportException */\n" \ "       ldr r1, =0x20026 /* ADP_Stopped_ApplicationExit */\n" \ "       swi 0x123456" ); }

running with qemu-arm:

$ qemu-arm ./test Hello World!

running with gdb on remote target:

$ gdb GNU gdb 5.3 Copyright 2002 Free Software Foundation, Inc. GDB is free software, covered by the GNU General Public License, and you are welcome to change it and/or distribute copies of it under certain conditions. Type "show copying" to see the conditions. There is absolutely no warranty for GDB. Type "show warranty" for details. This GDB was configured as "--host=i686-pc-linux-gnu --target=arm-elf". (gdb) target rdi /dev/ttyS0 115200 Angel Debug Monitor for Collie Version 0.42 for SL-C700/5600 : Serial/FIQ : MMU on, Caches enabled : Clock Switching on 1.20 (ARM Ltd / Intel White Angel v208a) built on Feb 21 2003 at 12:41:06 SerConnected to ARM RDI target. (gdb) load test Loading section .text, size 0x20 lma 0x8074 Loading section .rodata, size 0x10 lma 0x8094 Start address 0x8074, load size 48 Transfer rate: 384 bits in <1 sec, 24 bytes/write. (gdb) cont Continuing. Hello World!

Program exited normally.

PXA255 memory map

nCS0 0x00000000 - 0x03ffffff (used for rom) nCS1 0x04000000 - 0x07ffffff (?) nCS2 0x08000000 - 0x0bffffff (used for w100) nCS3 0x0c000000 - 0x0fffffff (used for nand) nCS4 0x10000000 - 0x13ffffff (scoop @ 0x10800000) nCS5 0x14000000 - 0x17ffffff (?) cf0 0x20000000 - 0x2fffffff (pcmcia/cf) cf1 0x30000000 - 0x3fffffff (pcmcia/cf) sdr0 0xa0000000 - 0xa3ffffff (sdram bank 0) sdr1 0xa4000000 - 0xa7ffffff (sdram bank 1) sdr2 0xa8000000 - 0xabffffff (sdram bank 2) sdr3 0xac000000 - 0xafffffff (sdram bank 3) regs 0x40000000 - 0x4bffffff (memory mapped register)

Angel memory map

ROM is remapped to 0x04000000 - 0x07ffffff, SCOOP remapped at 0xd200000 - 0xd2010000, code loaded using gdb runs at beginning of logical address space, but memory is also mapped at it's physical location (except for the remapped rom/scoop).

virtual addresses:

scoop 0xd2000000 nand cpld 0xd4000000 rom 0x04000000

MSC0

MSC0 0x7ff01888

RBUFF0

0 (slow device) RRR0 1 (recovery time 2 memclks) RDN0 8 (rom delay next access 9 memclks) RDF0 8 (rom delay first access 9 memclks) RBW0 1 (rom bus width 16 bits) RT0 0 (nonburst rom or flash) RBUFF1 0    RRR1 7 (14 memclks) RDN1 15 (16 memclks) RDF1 15 (16 memclks) RBW1 0 (32 bits) RT1 0 (nonburst rom or flash)

MSC1

MSC1 0x1244123C

RBUFF2

0 (slow) RRR2 1    RDN2 2    RDF2 3    RBW2 1 (16 bits) RT2 4 (variable latency io) RBUFF3 0 (slow) RRR3 1    RDN3 2    RDF3 4    RBW3 0 (32 bits) RT3 4 (variable latency io)

MSC2

MSC2 0x7ff012f4

RBUFF4

0 (slow) RRR4 1    RDN4 2    RDF4 15    RBW4 0 (32 bits) RT4 4 (variable latency io)

Memory

* 8MByte ROM (OTP? NOR-Flash?) at physical address 0x00000000, mirrored (at least) at 0x00800000 * 64MByte NAND-Flash interfaced using Xilinx Coolrunner-II CPLD (7 registers at physical address 0x0c000000) * 64MByte RAM at physical address 0xa0000000 * Graphics aperture (ATI Imageon W100) at physical address 0x08000000, including 2MB of video ram

NAND interface CPLD Registers (all 8bit)

0x0c000000 ECCLPLB (line parity bit 7-0) 0x0c000004 ECCLPUB (line parity bit 15-8) 0x0c000008 ECCCP (column parity bit 5-0) 0x0c00000c ECCCNTR (ecc byte counter) 0x0c000010 ECCCLRR (ecc clear) 0x0c000014 FLASHIO (read/write from flash) 0x0c000018 FLASHCTL (flash control signals)

bit0 => FLCE0 (chip enable 0) bit1 => FLCLE (column latch enable) bit2 => FLALE (address latch enable) bit3 => FLWP (write protect) bit4 => FLCE1 (chip enable 1) bit5 => FLRYBY (readybusy)

Note: Experiments showed that the NAND-Flash CE is connected to CE0, but the 2.4 sharp_sl Linux driver always turns on CE0 _and_ CE1. If the CPLD does indeed feature a CE1 out and this is accessible on the board, it should be possible to add a second NAND Flash chip on top of the old one:

Trying to read id from Flash on CE0 Got maker=98 device=76 Trying to read id from Flash on CE1 Got maker=00 device=00

CE1 is available on a testpad (tested using a kernel module toggling CE0 and CE1+GreenLED alternatingly every second):

TP6 TP5 TP4 -  TP3 -
 * Xilinx | TP2
 * CPLD  |   TP1

TP1 => CE0 TP2 => CE1! (unused?) TP3 => /WP TP4 => /WE TP5 => ALE TP6 => CLE

The C750 P2ROM has two seperate functions for changing ce0 and for changing ce1 state:

loc_404AD28_nand_cpld_ctl_ce0 MOVL   R1, 0xD4000018 CMP    R0, #1 BNE    loc_404AD48 LDR    R0, [R1] BIC    R0, R0, #1 STR    R0, [R1] B      locret_404AD54 loc_404AD48 LDR    R0, [R1] ORR    R0, R0, #1 STR    R0, [R1] locret_404AD54 RET loc_404AD58_nand_cpld_ctl_ce1 MOVL   R1, 0xD4000018 CMP    R0, #1 BNE    loc_404AD78 LDR    R0, [R1] BIC    R0, R0, #0x10 STR    R0, [R1] B      locret_404AD84 loc_404AD78 LDR    R0, [R1] ORR    R0, R0, #0x10 STR    R0, [R1] locret_404AD84 RET

The nand functions I looked at used only the function for ce0. SCOOP GPIO gpio directions

GPCR 0x03F2 => 0000001111110010

PA10,12,13,20-22 input PA11,14-19 output

gpio map nGPIO 	Direction 	Name 	Function PA10 	in 	? ? PA11 	out 	green led 	green (email) led PA12 	in 	switch A 	display backlight on/off (1 = clamshell closed and display facing keyboard; 0 = clamshell open or display facing outwards) PA13 	in 	switch B 	display rotation sense (0 = clamshell open; 1 = old pda style) PA14 	out 	mute_l 	audio mute left PA15 	out 	mute_r 	audio mute right PA16 	out 	akin_pullup 	for audio remote control (RC timing to measure button resistor value) PA17 	out 	apm_on 	? PA18 	out 	backlight_cont 	? PA19 	out 	mic_bias 	maybe controls phantom power for electret microphone? PXA GPIO gpio map nGPIO 	Direction 	Edge detect 	Function 	Comment 0 	in 	no 	Key pressed 	low-active 1 	in 	both 	external power active 	high-active 2 	in 	high 	ATI Imageon W100 interrupt pin 	high-active pxa gpios from include/asm-arm/arch-pxa/poodle.h

GP0 Key pressed GP1 AC in GP4 HP_IN ??? GP5 touch pad GP6 SD_CLK GP7 SD_WP GP8 SD_INT GP9 SD_DETECT GP10 GA_INT GP11 wakeup ('change battery') GP13 battery low / battery cover GP14 CF_CD / CF_STSCHG GP15 removcon_int GP16 CO / chrg_full GP17 CF_IRQ GP21 ADC_TEMP_ON GP22 IR_ON GP33 SD_PWR GP36 bypass_on GP38 charge_on

Alternate Function Configuration

When running angel debug monitor:

pxa gpio reg dump: GAFR0=591A801001001000 GAFR1=0005AAAA900A8451 GAFR2=00000002A0000000 GPLR0=8D5F5829 GPLR1=03FF43BC GPLR2=00C1C000 GPDR0=D3F8B040 GPDR1=00FFA7C3 GPDR2=0001C000 GRER0=00000000 GRER1=00000000 GRER2=00000000 GFER0=00000000 GFER1=00000000 GFER2=00000000 GEDR0=00000000 GEDR1=00000000 GEDR2=00000000

When running cacko 2.4.18:

GAFR0=0x5918801001001000 GAFR1=0x0005AAAA600A8451 GAFR2=0x00000002A0000000 GPLR0=0x8D5E6D2B GPLR1=0x03BFFB96 GPLR2=0x01C1FFFC GPDR0=0xD3F8B040 GPDR1=0x00FFAFC3 GPDR2=0x0001FFFC GRER0=0x00000A12 GRER1=0xFC000000 GRER2=0x00000003 GFER0=0x00004A3A GFER1=0x00000000 GFER2=0x00000000 GEDR0=0x00000000 GEDR1=0x00000000 GEDR2=0x00000000

GAFR0_L 0x01001000 => 0001000001000000 (Bit 0+1 == AF0)

GP0-5,GP7-11,GP13-15 => GPIO GP6 => MMCCLK GP12 => 32kHz out

GAFR0_U 0x59188010 => 1121012020000100 (Bit 0+1 == AF16)

GP18 => Ext. Bus Ready GP23 => SSP clock GP25 => SSP transmit GP26 => SSP receive GP28 => AC97 bit_clk (in) / I2S bit_clk (out) GP29 => I2S Sdata_in GP30 => I2S Sdata_out GP31 => I2S sync

GAFR1_L 0x600A8451 => 1200002220101101 (AF32-47)

GP32 => AC97 Sdata_in1 (in) / I2C sysclk (out) GP34 => FFUART receive GP35 => FFUART cts GP37 => FFUART dsr GP39 => FFUART txd GP40 => FFUART dtr GP41 => FFUART rts GP46 => STD_UART receive data GP47 => STD_UART transmit data

GAFR1_U 0x0005AAAA => 0000001122222222 (AF48-63)

GP48 => OE for Card Space GP49 => WE for Card Space GP50 => IORE for CS        GP51 => IOWE for CS         GP52 => Card Enable 1 for CS         GP53 => Card Enable 2 for CS         GP54 => Socket Select for CS         GP55 => Card Address bit 26 GP56 => Wait signal for CS        GP57 => Bus Width select for IO Card Space

GAFR2_L 0xA0000000 => 2200000000000000 (AF64-79)

GP78 => Active low chip select 2 GP79 => Active low chip select 3

GAFR2_U 0x00000002 => 0000000000000002 (AF80-84)

GP80 => Active low chip select 4

GPIO direction

0 == input, 1 == output

GPDR0 0xD3F8B040 => 11010011111110001011000001000000 (PD31-PD0)

GP0-5,7-11,14,16-18,26,27,29 input GP6,12-13,15,19-25,30,31 output

GPDR1 0x00FFAFC3 => 00000000111111111010111111000011 (PD63-PD32)

GP34-37,44,46,56-63 input GP32,33,38-43,45,47-55 output

GPDR2 0x0001FFFC => 00000000000000011111111111111100 (PD80-PD64)

GP64,65 input GP66-80 output

GPIO edge detect

0 == disable, 1 == enable rising edge

GRER0 0x00000A12 => 00000000000000000000101000010010 GRER1 0xFC000000 => 11111100000000000000000000000000 GRER2 0x00000003 => 00000000000000000000000000000011

GP1,4,9,11,58-65 enable

falling edge

GFER0 0x00004A3A => 00000000000000000100101000111010 GFER1 0x00000000 => 00000000000000000000000000000000 GFER2 0x00000000 => 00000000000000000000000000000000

GP1,3-5,9,11,14 enable

NAND Diag

Fun fact: In the Zaurus NAND Diag Extra Menu, the "***DEMO***" item displays bitmaps from an SD-Card (also CF? untested). These have to be named SLIDE00.BMP, SLIDE01.BMP etc. Truecolor 480x640 bitmaps seem to work, others untested. Sharp 'nandlogical' flash translation layer

The boot partition from 0x000000 to 0x6fffff is managed using the Sharp 'nandlogical' FTL. This FTL reserves 24 erase blocks for wear leveling (so the logical address space is only 0x000000 to 0x69ffff. Flash erase block size is 0x4000, 24*0x4000 == 0x60000).

uc-gentoo
stage3-mips3 big endian is currently running updated to 2008

CHOST="armv5te-softfloat-linux-gnueabi" CFLAGS="-O2 -pipe -march=iwmmxt -mtune=iwmmxt -msoft-float"

A shot
@17-02-2009 root=/dev/hda3

stage3
http://www.gtlib.gatech.edu/pub/gentoo/releases/arm/autobuilds/20090524/armv4tl-softfloat-linux-gnueabi/

About devtools
crossbuilder script made to build up what is needed

change chost
http://www.gentoo.org/doc/en/change-chost.xml

toolchain
using external toolchain http://labs.kernelconcepts.de/Tools/Toolchains/

2.6.23
the current kernel i am running

2.6.26-rp
It is pretty stable, only few crashes in year (all of them are related to hostap_cs driver). RP kernel has a few patches above vanilla: remote control and resume fix. See OpenEmbedded for the complete recipe or my web page.

2.6.26-RP has also several issues: for vanilla).
 * Frame buffer size switching does not work.
 * USB-OTG auto host/client switching is not yet implemented (still valid
 * USB client mode has a lot problems.
 * suspend/resume is still issued

all point to be reported
Known Issues/Bugs:
 * Alarms wouldn't wake the device when suspended
 * Audio works only via internal speaker (no headphone)
 * One time the AC97 codec wasn't detected on startup

about dev 2.6.30

 * email, from Stanislav Brabec a me, Pavel ***

Hallo.

I just improved my script[1] to build both spitz and akita in parallel. Configs and modules are available with the same name suffix.

http://www.penguin.cz/~utx/zaurus/feed/images/

I spent some time to provide a config file with recommended drivers for all chips.

akita and spitz images are in sync, the only differences are kernel command line and CONFIG_GPIO_PCA953X=y.

linux-2.6.30 works for me with known problems:

- Problems with resume. Pavel's patches from arm list fix resume at cost of broken offline charging and broken serial port after resume.

- UDC does not work

- frame buffer mode 320x240

- OTG is not yet implemented

kernel-build.sh
[1] http://www.penguin.cz/~utx/zaurus/feed/tools/kernel-build.sh


 * 1) !/bin/bash

OE_BUILD_DIR=/OE/build/tmp

export PATH=$PATH:$OE_BUILD_DIR/cross/armv5te/bin

function make_kernel {

rm -rf INSTALL mkdir -p INSTALL/boot make ARCH=arm CC=arm-angstrom-linux-gnueabi-gcc LD=arm-angstrom-linux-gnueabi-ld INSTALL_PATH=$PWD/INSTALL/boot INSTALL_MOD_PATH=$PWD/INSTALL -j8 zImage || exit make ARCH=arm CC=arm-angstrom-linux-gnueabi-gcc LD=arm-angstrom-linux-gnueabi-ld INSTALL_PATH=$PWD/INSTALL/boot INSTALL_MOD_PATH=$PWD/INSTALL -j8 || exit make ARCH=arm CC=arm-angstrom-linux-gnueabi-gcc LD=arm-angstrom-linux-gnueabi-ld INSTALL_PATH=$PWD/INSTALL/boot INSTALL_MOD_PATH=$PWD/INSTALL -j8 install || exit make ARCH=arm CC=arm-angstrom-linux-gnueabi-gcc LD=arm-angstrom-linux-gnueabi-ld INSTALL_PATH=$PWD/INSTALL/boot INSTALL_MOD_PATH=$PWD/INSTALL -j8 zinstall || exit make ARCH=arm CC=arm-angstrom-linux-gnueabi-gcc LD=arm-angstrom-linux-gnueabi-ld INSTALL_PATH=$PWD/INSTALL/boot INSTALL_MOD_PATH=$PWD/INSTALL -j8 modules_install || exit rm 2>/dev/null INSTALL/boot/*.old cd INSTALL cd boot mkdir -p $OE_BUILD_DIR/deploy/glibc/images/$1 for KERNEL in vmlinuz* ; do	cp -a $KERNEL $OE_BUILD_DIR/deploy/glibc/images/$1/${KERNEL/vmlinuz/zImage}-$1.bin done cd .. tar -zcf $OE_BUILD_DIR/deploy/glibc/images/$1/modules${KERNEL/vmlinuz}-$1.tgz lib cp -a ../.config $OE_BUILD_DIR/deploy/glibc/images/$1/config${KERNEL/vmlinuz}-$1 tar -zcf ../../$1${KERNEL/vmlinuz}-bin.tar.gz * cd ..
 * 1) make ARCH=arm CC=arm-angstrom-linux-gnueabi-gcc LD=arm-angstrom-linux-gnueabi-ld INSTALL_PATH=$PWD/INSTALL/boot INSTALL_MOD_PATH=$PWD/INSTALL -j8 oldconfig || exit

}

if test -z "$1" ; then

sed -i 's/CONFIG_GPIO_PCA953X=y/# CONFIG_GPIO_PCA953X is not set/;s@root=/dev/mtdblock2 rootfstype=jffs2@root=/dev/hda1 rootfstype=ext3 rootdelay=1 rw@' .config make_kernel spitz sed -i 's/# CONFIG_GPIO_PCA953X is not set/CONFIG_GPIO_PCA953X=y/;s@root=/dev/hda1 rootfstype=ext3 rootdelay=1 rw@root=/dev/mtdblock2 rootfstype=jffs2@' .config make_kernel akita
 * 1) sed -i 's/CONFIG_GPIO_PCA953X=y/# CONFIG_GPIO_PCA953X is not set/;s@root=/dev/mtdblock2 rootfstype=jffs2@root=/dev/hda1 rootfstype=ext3 rootdelay=1 rw@' .config

else make ARCH=arm CC=arm-angstrom-linux-gnueabi-gcc LD=arm-angstrom-linux-gnueabi-ld INSTALL_PATH=$PWD/INSTALL/boot INSTALL_MOD_PATH=$PWD/INSTALL -j8 "$@" fi

loadkeys - load keyboard translation tables
loadkeys [ -c --clearcompose ] [ -d --default ] [ -h --help ] [ -m --mktable ] [ -s --clearstrings ] [ -v --verbose ] [ filename... ]

DESCRIPTION

The program loadkeys reads the file or files specified by filename.... Its main purpose is to load the kernel keymap for the console. RESET TO DEFAULT If the -d (or --default ) option is given, loadkeys loads a default keymap, probably the file defkeymap.map either in //lib/kbd/keymaps or in /usr/src/linux/drivers/char. (Probably the former was user-defined, while the latter is a qwerty keyboard map for PCs - maybe not what was desired.) Sometimes, with a strange keymap loaded (with the minus on some obscure unknown modifier combination) it is easier to type `loadkeys defkeymap'. LOAD KERNEL KEYMAP The main function of loadkeys is to load or modify the keyboard driver's translation tables. When specifying the file names, standard input can be denoted by dash (-). If no file is specified, the data is read from the standard input.

For many countries and keyboard types appropriate keymaps are available already, and a command like `loadkeys uk' might do what you want. On the other hand, it is easy to construct one's own keymap. The user has to tell what symbols belong to each key. She can find the keycode for a key by use of showkey(1), while the keymap format is given in keymaps(5) and can also be seen from the output of dumpkeys(1). LOAD KERNEL ACCENT TABLE If the input file does not contain any compose key definitions, the kernel accent table is left unchanged, unless the -c (or --clearcompose ) option is given, in which case the kernel accent table is emptied. If the input file does contain compose key definitions, then all old definitions are removed, and replaced by the specified new entries. The kernel accent table is a sequence of (by default 68) entries describing how dead diacritical signs and compose keys behave. For example, a line

compose ',' 'c' to ccedilla

means that <,> must be combined to. The current content of this table can be see using `dumpkeys --compose-only'. LOAD KERNEL STRING TABLE The option -s (or --clearstrings ) clears the kernel string table. If this option is not given, loadkeys will only add or replace strings, not remove them. (Thus, the option -s is required to reach a well-defined state.) The kernel string table is a sequence of strings with names like F31. One can make function key F5 (on an ordinary PC keyboard) produce the text `Hello!', and Shift+F5 `Goodbye!' using lines

keycode 63 = F70 F71 string F70 = "Hello!" string F71 = "Goodbye!"

in the keymap. The default bindings for the function keys are certain escape sequences mostly inspired by the VT100 terminal. CREATE KERNEL SOURCE TABLE If the -m (or --mktable ) option is given loadkeys prints to the standard output a file that may be used as /usr/src/linux/drivers/char/defkeymap.c, specifying the default key bindings for a kernel (and does not modify the current keymap). OTHER OPTIONS

-h --help loadkeys prints its version number and a short usage message to the programs standard error output and exits.

WARNING Note that anyone having read access to /dev/console can run loadkeys and thus change the keyboard layout, possibly making it unusable. Note that the keyboard translation table is common for all the virtual consoles, so any changes to the keyboard bindings affect all the virtual consoles simultaneously.

Note that because the changes affect all the virtual consoles, they also outlive your session. This means that even at the login prompt the key bindings may not be what the user expects.

keymaps - keyboard table descriptions for loadkeys and dumpkeys
DESCRIPTION

These files are used by loadkeys(1) to modify the translation tables used by the kernel keyboard driver and generated by dumpkeys(1) from those translation tables.

The format of these files is vaguely similar to the one accepted by xmodmap(1). The file consists of charset or key or string definition lines interspersed with comments.

Comments are introduced with ! or # characters and continue to the end of the line. Anything following one of these characters on that line is ignored. Note that comments need not begin from column one as with xmodmap(1).

The syntax of keymap files is line oriented; a complete definition must fit on a single logical line. Logical lines can, however, be split into multiple physical lines by ending each subline with the backslash character (\). INCLUDE FILES A keymap can include other keymaps using the syntax

include "pathname"

CHARSET DEFINITIONS A character set definition line is of the form:

charset "iso-8859-x"

It defines how following keysyms are to be interpreted. For example, in iso-8859-1 the symbol mu (or micro) has code 0265, while in iso-8859-7 the letter mu has code 0354. COMPLETE KEYCODE DEFINITIONS Each complete key definition line is of the form:

keycode keynumber = keysym keysym keysym...

keynumber is the internal identification number of the key, roughly equivalent to the scan code of it. keynumber can be given in decimal, octal or hexadecimal notation. Octal is denoted by a leading zero and hexadecimal by the prefix 0x.

Each of the keysyms represent keyboard actions, of which up to 256 can be bound to a single key. The actions available include outputting character codes or character sequences, switching consoles or keymaps, booting the machine etc. (The complete list can be obtained from dumpkeys(1) by saying dumpkeys -l .)

Each keysym may be prefixed by a '+' (plus sign), in wich case this keysym is treated as a "letter" and therefore affected by the "CapsLock" the same way as by "Shift" (to be correct, the CapsLock inverts the Shift state). The ASCII letters ('a'-'z' and 'A'-'Z') are made CapsLock'able by default. If Shift+CapsLock should not produce a lower case symbol, put lines like

keycode 30 = +a A

in the map file.

Which of the actions bound to a given key is taken when it is pressed depends on what modifiers are in effect at that moment. The keyboard driver supports 8 modifiers. These modifiers are labeled (completely arbitrarily) Shift, AltGr, Control, Alt, ShiftL, ShiftR, CtrlL and CtrlR. Each of these modifiers has an associated weight of power of two according to the following table:

modifier weight Shift

1    AltGr

2    Control

4    Alt

8    ShiftL

16    ShiftR

32    CtrlL

64    CtrlR 128

The effective action of a key is found out by adding up the weights of all the modifiers in effect. By default, no modifiers are in effect, so action number zero, i.e. the one in the first column in a key definition line, is taken when the key is pressed or released. When e.g. Shift and Alt modifiers are in effect, action number nine (from the 10th column) is the effective one.

Changing the state of what modifiers are in effect can be achieved by binding appropriate key actions to desired keys. For example, binding the symbol Shift to a key sets the Shift modifier in effect when that key is pressed and cancels the effect of that modifier when the key is released. Binding AltGr_Lock to a key sets AltGr in effect when the key is pressed and cancels the effect when the key is pressed again. (By default Shift, AltGr, Control and Alt are bound to the keys that bear a similar label; AltGr may denote the right Alt key.)

Note that you should be very careful when binding the modifier keys, otherwise you can end up with an unusable keyboard mapping. If you for example define a key to have Control in its first column and leave the rest of the columns to be VoidSymbols, you're in trouble. This is because pressing the key puts Control modifier in effect and the following actions are looked up from the fifth column (see the table above). So, when you release the key, the action from the fifth column is taken. It has VoidSymbol in it, so nothing happens. This means that the Control modifier is still in effect, although you have released the key. Re-pressing and releasing the key has no effect. To avoid this, you should always define all the columns to have the same modifier symbol. There is a handy short-hand notation for this, see below.

keysyms can be given in decimal, octal, hexadecimal, unicode or symbolic notation. The numeric notations use the same format as with keynumber. Unicode notation is "U+" followed by four hexadecimal digits. The symbolic notation resembles that used by xmodmap(1). Notable differences are the number symbols. The numeric symbols '0', ..., '9' of xmodmap(1) are replaced with the corresponding words 'zero', 'one', ... 'nine' to avoid confusion with the numeric notation.

It should be noted that using numeric notation for the keysyms is highly unportable as the key action numbers may vary from one kernel version to another and the use of numeric notations is thus strongly discouraged. They are intended to be used only when you know there is a supported keyboard action in your kernel for which your current version of loadkeys(1) has no symbolic name.

There is a number of short-hand notations to add readability and reduce typing work and the probability of typing-errors.

First of all, you can give a map specification line, of the form

keymaps 0-2,4-5,8,12

to indicate that the lines of the keymap will not specify all 256 columns, but only the indicated ones. (In the example: only the plain, Shift, AltGr, Control, Control+Shift, Alt and Control+Alt maps, that is, 7 columns instead of 256.) When no such line is given, the keymaps 0-M will be defined, where M+1 is the maximum number of entries found in any definition line.

Next, you can leave off any trailing VoidSymbol entries from a key definition line. VoidSymbol denotes a keyboard action which produces no output and has no other effects either. For example, to define key number 30 to output 'a' unshifted, 'A' when pressed with Shift and do nothing when pressed with AltGr or other modifiers, you can write

keycode 30 = a A

instead of the more verbose

keycode 30 = a A       VoidSymbol      VoidSymbol \ VoidSymbol VoidSymbol VoidSymbol ...

For added convenience, you can usually get off with still more terse definitions. If you enter a key definition line with only and exactly one action code after the equals sign, it has a special meaning. If the code (numeric or symbolic) is not an ASCII letter, it means the code is implicitly replicated through all columns being defined. If, on the other hand, the action code is an ASCII character in the range 'a', ..., 'z' or 'A', ..., 'Z' in the ASCII collating sequence, the following definitions are made for the different modifier combinations, provided these are actually being defined. (The table lists the two possible cases: either the single action code is a lower case letter, denoted by 'x' or an upper case letter, denoted by 'Y'.)

modifier symbol none x                     Y    Shift X                     y    AltGr x                     Y    Shift+AltGr X                     y    Control Control_x             Control_y Shift+Control Control_x             Control_y AltGr+Control Control_x             Control_y Shift+AltGr+Control Control_x             Control_y Alt Meta_x        Meta_Y Shift+Alt Meta_X        Meta_y AltGr+Alt Meta_x        Meta_Y Shift+AltGr+Alt Meta_X        Meta_y Control+Alt Meta_Control_x Meta_Control_y Shift+Control+Alt Meta_Control_x Meta_Control_y AltGr+Control+Alt Meta_Control_x Meta_Control_y Shift+AltGr+Control+Alt Meta_Control_x Meta_Control_y

SINGLE MODIFIER DEFINITIONS All the previous forms of key definition lines always define all the M+1 possible modifier combinations being defined, whether the line actually contains that many action codes or not. There is, however, a variation of the definition syntax for defining only single actions to a particular modifier combination of a key. This is especially useful, if you load a keymap which doesn't match your needs in only some modifier combinations, like AltGr+function keys. You can then make a small local file redefining only those modifier combinations and loading it after the main file. The syntax of this form is:

{ plain | } keycode keynumber = keysym

, e.g.,

plain keycode 14 = BackSpace control alt keycode 83 = Boot alt keycode 105 = Decr_Console alt keycode 106 = Incr_Console

Using "plain" will define only the base entry of a key (i.e. the one with no modifiers in effect) without affecting the bindings of other modifier combinations of that key. STRING DEFINITIONS In addition to comments and key definition lines, a keymap can contain string definitions. These are used to define what each function key action code sends. The syntax of string definitions is:

string keysym = text

text can contain literal characters, octal character codes in the format of backslash followed by up to three octal digits, and the three escape sequences \n, \\, and \", for newline, backslash and quote, respectively. COMPOSE DEFINITIONS Then there may also be compose definitions. They have syntax

compose 'char' 'char' to 'char'

and describe how two bytes are combined to form a third one (when a dead accent or compose key is used). This is used to get accented letters and the like on a standard keyboard. ABBREVIATIONS Various abbreviations can be used with kbd-0.96 and later.

strings as usual Defines the usual values of the strings (but not the keys they are bound to). compose as usual for "iso-8859-1" Defines the usual compose combinations.

To find out what keysyms there are available for use in keymaps, use the command

dumpkeys --long-info

Unfortunately, there is currently no description of what each symbol does. It has to be guessed from the name or figured out from the kernel sources.

EXAMPLES (Be careful to use a keymaps line, like the first line of `dumpkeys`, or "keymaps 0-15" or so.)

The following entry exchanges the left Control key and the Caps Lock key on the keyboard:

keycode 58 = Control keycode 29 = Caps_Lock

Key number 58 is normally the Caps Lock key, and key number 29 is normally the Control key.

The following entry sets the Shift and Caps Lock keys to behave more nicely, like in older typewriters. That is, pressing Caps Lock key once or more sets the keyboard in CapsLock state and pressing either of the Shift keys releases it.

keycode 42 = Uncaps_Shift keycode 54 = Uncaps_Shift keycode 58 = Caps_On

The following entry sets the layout of the edit pad in the enhanced keyboard to be more like that in the VT200 series terminals:

keycode 102 = Insert keycode 104 = Remove keycode 107 = Prior shift keycode 107 = Scroll_Backward keycode 110 = Find keycode 111 = Select control alt  keycode 111 = Boot control altgr keycode 111 = Boot

Here's an example to bind the string "du\ndf\n" to the key AltGr-D. We use the "spare" action code F100 not normally bound to any key.

altgr keycode 32 = F100 string F100 = "du\ndf\n"

showkey showkey - examine the codes sent by the keyboard
showkey [-h|--help] [-a|--ascii] [-s|--scancodes] [-k|--keycodes]

DESCRIPTION

showkey prints to standard output either the scan codes or the keycode or the `ascii' code of each key pressed. In the first two modes the program runs until 10 seconds have elapsed since the last key press or release event, or until it receives a suitable signal, like SIGTERM, from another process. In `ascii' mode the program terminates when the user types ^D.

When in scancode dump mode, showkey prints in hexadecimal format each byte received from the keyboard to the standard output. A new line is printed when an interval of about 0.1 seconds occurs between the bytes received, or when the internal receive buffer fills up. This can be used to determine roughly, what byte sequences the keyboard sends at once on a given key press. The scan code dumping mode is primarily intended for debugging the keyboard driver or other low level interfaces. As such it shouldn't be of much interest to the regular end-user. However, some modern keyboards have keys or buttons that produce scancodes to which the kernel does not associate a keycode, and, after finding out what these are, the user can assign keycodes with setkeycodes(8).

When in the default keycode dump mode, showkey prints to the standard output the keycode number or each key pressed or released. The kind of the event, press or release, is also reported. Keycodes are numbers assigned by the kernel to each individual physical key. Every key has always only one associated keycode number, whether the keyboard sends single or multiple scan codes when pressing it. Using showkey in this mode, you can find out what numbers to use in your personalized keymap files.

When in `ascii' dump mode, showkey prints to the standard output the decimal, octal, and hexadecimal value(s) of the key pressed, according to he present keymap. OPTIONS

-h --help showkey prints to the standard error output its version number, a compile option and a short usage message, then exits. -s --scancodes Starts showkey in scan code dump mode. -k --keycodes Starts showkey in keycode dump mode. This is the default, when no command line options are present. -a --ascii Starts showkey in `ascii' dump mode.

bridging
This describes how to give network access to Zaurus via ethernet bridging with a PC running Gentoo. This allows a USB-connected Zaurus to appear as another host on the same network as the PC. Bridging is useful only if you can allocate an IP address for the Zaurus that is on the same network as the PC (e.g. you are connected to a private network). Bridging is not appropriate if your PC is connected directly to the internet (via a cable/adsl/modem) and thus has a public IP address, in this case see this howto.

Prerequisites for Gentoo host machine
1. Bridging is supported in the current 2.4 and 2.6 kernels. If you configure your own, you need CONFIG_BRIDGE together with whatever kernel options are necessary to get usbnet working with your Zaurus, for a SL-5500 (collie) these are CONFIG_USB_USBNET and CONFIG_USB_NET_ZAURUS. I compiled all these as modules and they get loaded automatically when required. 2. baselayout-1.11.11 or later 3. The brctl command is provided by the bridge-utils package:

emerge -n net-misc/bridge-utils

Configuring the Gentoo machine
The interface with the Zaurus, usb0, will be combined with eth0 in a virtual interface called br0, this is what will be assigned the IP configuration for the PC.

First you need to tell the Gentoo RC system about usb0 and br0 (I'll assume eth0 is already configured). This is done by creating symbolic links from net.lo to net.usb0 and net.br0 in /etc/init.d.

cd /etc/init.d ln -s net.lo net.usb0 ln -s net.lo net.br0

Next you tell Gentoo how to configure the interfaces. This is done in /etc/conf.d/net. With baselayout-1.11.x, this should contain:

bridge_br0="eth0" depend_br0 { need net.eth0 } config_eth0=( "null" ) config_usb0=( "null" ) config_br0=( "192.168.2.10/24" ) gateway="br0/192.168.2.1" postup { local iface=${1} if [ ${iface} == usb0 ]; then brctl addif br0 ${iface} elif [ ${iface} == br0 ] && ifconfig -a | grep usb0 > /dev/null ; then # if usb0 is already present when br0 is configured (i.e. the              # Zaurus was plugged in and switched on when the PC was booted               # then add it to the bridge.               brctl addif br0 usb0       fi }
 * 1) Add eth0 to the bridge.  usb0 will be added by hotplug when it comes up.
 * 1) Make sure eth0 gets configured before the bridge.
 * 1) Ensure that eth0 and usb0 don't get configured by DHCP
 * 2) The only interface needing IP configuration is br0
 * 1) Give the bridge an IP configuration, either static:
 * 1) or by DHCP:
 * 2) config_br0=( "dhcp" )
 * 3) This is the address by which the Gentoo machine will be known on the network
 * 1) When you plug in the Zaurus, hotplug creates the usb0 interface and
 * 2) issues a network hotplug event which causes Gentoo to configure the
 * 3) interface.  This function causes it to be added to the bridge:

With baselayout-1.12 and later this simplifies to:

bridge_br0="eth0" bridge_add_usb0="br0" config_eth0=( "null" ) config_usb0=( "null" ) config_br0=( "dhcp" ) # or e.g. ( "192.168.2.0/24" ) for static config depend_br0 { need net.eth0 }
 * 1) Add port to bridge br0
 * 1) dynamically add usb0 when the interface comes up
 * 1) Configure the ports to null values so dhcp does not get started
 * 1) Give the bridge an address - dhcp
 * 1) make sure eth0 is up before configuring br0

Obviously change the IP addresses to suit.

Configuring the Zaurus
Use the Network settings GUI to configure usbd0. Either use DHCP, or a static config on the same subnet as the PC, e.g.:

Automatically bring up IP Address = 192.168.2.50 Subnet Mask = 255.255.255.0 Gateway = 192.168.2.1     (same as the PC) First DNS = 192.168.2.10  (same as the PC) Second DNS = 192.168.2.1  (same as the PC)

Test the configuration
On the Gentoo box:

/etc/init.d/net.eth0 pause /etc/init.d/net.br0 start

Then plug in and switch on the PDA and check that both the PC and the PDA have network access.

Make the configuration permanent
On the Gentoo box:

rc-update del net.eth0 rc-update add net.br0 default

Troubleshooting
I found that the MTU assigned to usbd0 on the Zaurus was diferent from that assigned to usb0 on the PC:

gentoo # ifconfig usb0 usb0   Link encap:Ethernet  HWaddr 66:5E:F2:2A:07:79 UP BROADCAST RUNNING MULTICAST MTU:1494  Metric:1 RX packets:198 errors:0 dropped:0 overruns:0 frame:0 TX packets:3368 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:20256 (19.7 Kb) TX bytes:349616 (341.4 Kb)

collie # ifconfig usbd0 usbd0  Link encap:Ethernet  HWaddr 40:00:01:00:00:01 inet addr:192.168.2.50 Bcast:192.168.2.255  Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500  Metric:1 RX packets:3459 errors:2 dropped:2 overruns:0 frame:2 TX packets:251 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:100

This does not prevent logging into the Zaurus using ssh but does prevent downloading files larger than about 1kB. I am not sure why this happens, it may be related to this kernel bug report

The solution is to reduce the MTU on the Zaurus end. You can configure the Zaurus to do this automatically by editing /etc/network/interfaces. Find the section starting 'iface usbd0' and add the following line:

up ifconfig usbd0 mtu 1494

Analyzing zaurus voltage tables
pavelmachek wrote, @ 2009-11-24 09:51:00

Analyzing zaurus voltage tables, I tried analyzing scary-looking spitz_battery_levels_noac and _acin tables... only to realize that _acin is actually noac+3 in <45% charge rates, and that _noac is actually trivial linear function. Oops.

Unfortunately, dependency between voltage and capacity left is actually more complex for li-ion battery, so better tables will be neccessary...

Zaurus C-3000 power questions
I did some measurements of spitz battery subsystem; maybe they are useful for someone.

Unfortunately, concistent numbers are quite hard: longer/thinner cables mean lower voltage and also lower currents :-(. I get quite consistents 5V at power supply, but it goes down to 4.5..4.2V when it reaches zaurus behind ampermeter. (Is zaurus even able to charge battery properly from such low voltage?)

One big surprise was wlan CF card, eating +200mA when initialized.

I'm working on drivers/power/spitz_battery driver, and I'll need to know conversion between ADC readings and milivolts; does someone have those?

Does someone have better/more reliable/other power consumption numbers?

Idle, charging, no backlight, linux 2.6.26: 200mA @ 4.8V bl 1:                  310mA bl 10:                 315mA bl 20                  340mA bl 30:                 390mA bl 40:                 440mA bl 47:                 445mA disk is spinning:                      +50mA find /:                               +200mA cat /dev/zero:                        +100mA make:                                 +240mA

charging, powerdown:                   380mA..440mA charging, ROM menu:                    550mA D+M monitor, not charging:             170mA D+M monitor, half charging:            280mA D+M monitor, full charging:            480mA..550mA

Charging in ROM, from empty @ 8:35:    610mA 8:38:    555mA 8:45:    545mA 8:50:    540mA 9:01:    540mA 9:18:    530mA 9:36:    520mA 9:45:    505mA 9:51:    480mA 10:15:    365mA 10:48:    250mA 11:01:    225mA 11:31:    180mA 11:38:    170mA 12:48:     80mA, charger LED is off.

Measured @ li-ion battery. ROM                                    <7mA Linux 2.6.26 suspend:                  7.5mA, 10mA?! Linux 2.6.26, fully running, charger connected: 50uA :-(                                               100mA charge

System	Status	Comment Base		Basic Machine definitions are done. Now in mainline Compact flash		The internal Compact Flash slot is working. Expansion Jacket works too. MTD		NAND via TC6393xb is working. Backlight		Done. LCD		Done. Keyboard		Done. USB Gadget		Done. Now in mainline Irda		Done. Now in mainline Bluetooth		Done. Checked with my soldered mitsumi module, but should work also with the original. MMC/SD		Done. Now in mainline Sound		Sound via alsa works. Headphone detection missing. Power management		Basic suspend and resume is working on 2.6.23 Battery management		good on 2.6.23 Touchscreen		First running version. Values are noisy. USB Host		USB-Host is working wifi		... LEDs		Done. Expansion Jacket		CF socket works

Some Spitz / Zaurus C-3000 power answers
Ok, so I think I know what is going on with zaurus charging slowly when powered up: misterious "half charge" mode is actually used every time machine is not suspended.

That explains why it gets away with 1A wall charger -- when collie used 2A charger. Also... wifi card I'm using is nastier than I thought. It draws 220mA when active, which would be kind-of expected, but it also draws 70mA when not active. Ouch.

Plus, I got zipit z2 to play with. So far, I'm not too impressed. Yes, device is light and probably cheap, but... it uses obscure miniSD card format, and not even its keyboard works properly -- as soon as you start typing faster, it will loose keystrokes or confuse them. Not good for IM machine...

Zaurus battery charging
9th September 2009, Besides my spitz C-3000 segfaulting about 3 times per kernel compile (do all of them do that, or is just mine affected?), I have some problems with charging. It seems to charge very very slowly why turned on. I learned to shutdown back to Sharp bootloader for charge, but I still forget sometimes.

I have been looking at battery code, and it seems it still leaves something to be desired. First, it goes from 100% to 60% way too quickly (and yes, it may be my cell just going old. OTOH, at this point, most of the cells are old :-). While compiling kernel, brigness 31, I unplugged AC power at 10:00. Before unplug, indicated battery was 219, 100%. Immediately after that, it went to 204, 78% and continued to decline rather quickly:

10:01				 202,  73% 10:04				  199	65% 10:06				  197	60% 10:10				  194	53% 10:13				  193	50% 10:14				  192	48% 10:19				  190	43%

Other problem seems to be in the charging code; it only checks battery temperature once, and only seems to stop charging if temperature is too high. But li-ions should not be charged in too low temperatures, either. (I have summer here just now, but could someone mamybe get temperature values from spitz at cca 5 degrees Celsius?)

What's in pxa tree for the next pull request
[]

What's in pxa tree for the next pull request Eric Miao eric.y.miao at gmail.com Wed Dec 2 08:42:44 EST 2009

* Previous message: [PATCH 8/9 v2] MXC: Add a digital audio multiplexer driver * Next message: [PATCH 1/4]ARM: NUC900: change condition of IRQ_ADC to NR_IRQS for nuc932 * Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]

Below are what queued in branch 'devel', which are going to be pushed in the 1st pull request, please have a review to make sure nothing is missed.

The zeus/raumfeld stuffs are queued in branch 'pending' since there is dependency issues need to be settled, so probably will go in a second git pull request.

The pxa168fb SPI support is still not smooth enough, I've merged the easy part, however, I'd suggest to have a dedicated SPI host controller driver in drivers/spi/* so we may possibly reuse LCD panel drivers in drivers/video/backlight/*.

The following changes since commit 648f4e3e50c4793d9dbf9a09afa193631f76fa26: Linus Torvalds (1): Linux 2.6.32-rc8

are available in the git repository at:

git://git.kernel.org/pub/scm/linux/kernel/git/ycmiao/pxa-linux-2.6.git devel

Antonio Ospite (5): [ARM] pxa/ezx: add camera support for A780 and A910 EZX phones [ARM] pxa/ezx: add leds-lp3944 support for A910 EZX phone [ARM] pxa/ezx: update ezx_defconfig now that ezx-pcap is in     [ARM] pxa/em-x270: don't use pxa_camera init callback [ARM] pxa/pcm990: don't use pxa_camera init callback

Dmitry Artamonow (1): [ARM] pxa/hx4700: actually use platform_lcd driver

Eric Miao (5): [ARM] pxa: re-order platforms in Kconfig and Makefile [ARM] pxa: use platform_device_id table for SSP driver [ARM] pxa: introduce CONFIG_MACH_ZYLONITE{300,320} for CPU_PXA* removing [ARM] pxa: select CPU_PXA310 for MACH_COLIBRI300 [ARM] pxa: make CPU_PXA* to be selectable hidden options

Haojian Zhuang (20): pxamci: introduce mmc_has_26mhz and include pxa935 backlight: da903x_bl: control WLED output current in da9034 [ARM] pxa/saar: set default WLED output current pxa3xx_nand: fix memory out of bound pxa3xx_nand: reset read buffer before reading pxa3xx_nand: adjust timing of Micron NAND flash pxa3xx_nand: remove hardcode register address pxa3xx_nand: remove hardcode irq number pxa3xx_nand: disable nand irq in initialization pxa3xx_nand: add new nand chip support pxa3xx_nand: update dependancy to support ARCH_MMP pxa3xx_nand: move pxa3xx_nand.h common into plat directory [ARM] pxa: add nand device and clock for pxa168/pxa910 [ARM] pxa: add nand support in aspensite board [ARM] pxa: add onenand support for TTC-DKB [ARM] pxa: add onenand support for SAAR [ARM] pxa: update flash structure in onenand info [ARM] pxa: add missing irq events for pxa168 [ARM] pxa: add apmu clock support in mmp [ARM] pxa: rename macro from pxa9xx to pxa93x

Igor Grinberg (12): [ARM] pxa: register U2D clock for pxa3xx [ARM] pxa: add U2D registers and bits definitions [ARM] pxa/cm-x300: add revision difference handling [ARM] pxa/cm-x300: add TDO35S lcd support [ARM] pxa/cm-x300: add ac97 controller registration [ARM] pxa/cm-x300: add Wi2Wi chip (Bluetooth and WiFi) initialization [ARM] pxa/cm-x300: add support for PXA310 cpu [ARM] pxa/cm-x300: enable USB port 2 for PXA300 [ARM] pxa/cm-x300: add da9030 support [ARM] pxa/cm-x300: update authors and copyright [ARM] pxa/cm-x300: update defconfig [ARM] pxa/cm-x300: add PWM backlight support

Jonathan Cameron (1): MAINTAINERS: Add entries for IMote 2 and Stargate 2

Jun Nie (2): pxa168fb: fix offset setting at initialization pxa168fb: remove useless vsync/hsync invert flag

Marc Zyngier (1): [ARM] pxa/viper: convert to use plat_serial8250_port irqflags field

Mike Rapoport (2): backlight: tdo24m: ensure chip select changes between transfers [ARM] pxa: add EXT_WAKEUP interrupts handling for pxa3xx

Pavel Machek (2): [ARM] pxa/zaurus: cleanup sharpsl_pm.c     [ARM] pxa/zaurus: rename spitz_battery_levels_* to sharpsl_*

Pieter Grimmerink (1): pxafb: add transparency field to pxafb_mode_info struct

Russell King (1): [ARM] pxa: allow platforms to control which uarts are registered

Sven Neumann (1): pxafb: use passed fb_var_screeninfo struct in pxafb_pan_display

Tomáš Čech (2): [ARM] pxa/treo: generalisation of Treo680 code [ARM] pxa/treo: add Palm Centro 685 support

MAINTAINERS                                       |   13 + arch/arm/configs/cm_x300_defconfig                |  351 +++++--- arch/arm/configs/ezx_defconfig                    |  947 ++++++++++++++-- arch/arm/mach-mmp/aspenite.c                      |   39 + arch/arm/mach-mmp/clock.c                         |   15 + arch/arm/mach-mmp/clock.h                         |    1 + arch/arm/mach-mmp/include/mach/irqs.h             |    4 +- arch/arm/mach-mmp/include/mach/pxa168.h           |    7 + arch/arm/mach-mmp/include/mach/pxa910.h           |    7 + arch/arm/mach-mmp/pxa168.c                        |    5 + arch/arm/mach-mmp/pxa910.c                        |    4 + arch/arm/mach-mmp/ttc_dkb.c                       |   87 ++ arch/arm/mach-pxa/Kconfig                         |  638 +++++++-- arch/arm/mach-pxa/Makefile                        |   90 +- arch/arm/mach-pxa/balloon3.c                      |    4 + arch/arm/mach-pxa/cm-x2xx.c                       |    4 + arch/arm/mach-pxa/cm-x300.c                       |  260 +++++- arch/arm/mach-pxa/colibri-pxa270.c                |    3 + arch/arm/mach-pxa/colibri-pxa300.c                |    4 + arch/arm/mach-pxa/colibri-pxa320.c                |    4 + arch/arm/mach-pxa/colibri-pxa3xx.c                |    2 +- arch/arm/mach-pxa/corgi.c                         |    4 + arch/arm/mach-pxa/corgi_pm.c                      |    4 +- arch/arm/mach-pxa/csb726.c                        |    3 + arch/arm/mach-pxa/devices.c                       |   30 +- arch/arm/mach-pxa/e330.c                          |    3 + arch/arm/mach-pxa/e350.c                          |    3 + arch/arm/mach-pxa/e400.c                          |    3 + arch/arm/mach-pxa/e740.c                          |    3 + arch/arm/mach-pxa/e750.c                          |    3 + arch/arm/mach-pxa/e800.c                          |    3 + arch/arm/mach-pxa/em-x270.c                       |   13 +- arch/arm/mach-pxa/ezx.c                           |  251 +++++- arch/arm/mach-pxa/generic.h                       |    5 + arch/arm/mach-pxa/gumstix.c                       |    5 + arch/arm/mach-pxa/h5000.c                         |    3 + arch/arm/mach-pxa/himalaya.c                      |    3 + arch/arm/mach-pxa/hx4700.c                        |    5 + arch/arm/mach-pxa/idp.c                           |    3 + arch/arm/mach-pxa/imote2.c                        |    6 +- arch/arm/mach-pxa/include/mach/hardware.h         |    7 +- arch/arm/mach-pxa/include/mach/palmtreo.h         |   67 ++ arch/arm/mach-pxa/include/mach/pxafb.h            |    3 +- arch/arm/mach-pxa/include/mach/regs-u2d.h         |  199 ++++ arch/arm/mach-pxa/include/mach/treo680.h          |   49 - arch/arm/mach-pxa/littleton.c                     |    8 +- arch/arm/mach-pxa/lpd270.c                        |    4 + arch/arm/mach-pxa/lubbock.c                       |    4 + arch/arm/mach-pxa/magician.c                      |    4 + arch/arm/mach-pxa/mainstone.c                     |    4 + arch/arm/mach-pxa/mioa701.c                       |    3 + arch/arm/mach-pxa/mp900.c                         |    3 + arch/arm/mach-pxa/palmld.c                        |    4 + arch/arm/mach-pxa/palmt5.c                        |    4 + arch/arm/mach-pxa/palmtc.c                        |    5 + arch/arm/mach-pxa/palmte2.c                       |    4 + arch/arm/mach-pxa/{treo680.c => palmtreo.c}       |  365 ++++++-- arch/arm/mach-pxa/palmtx.c                        |    4 + arch/arm/mach-pxa/palmz72.c                       |    4 + arch/arm/mach-pxa/pcm027.c                        |    4 + arch/arm/mach-pxa/pcm990-baseboard.c              |    8 +- arch/arm/mach-pxa/poodle.c                        |    4 + arch/arm/mach-pxa/pxa25x.c                        |    7 +- arch/arm/mach-pxa/pxa27x.c                        |    3 - arch/arm/mach-pxa/pxa3xx.c                        |   47 +- arch/arm/mach-pxa/saar.c                          |  105 +++- arch/arm/mach-pxa/sharpsl.h                       |    4 +- arch/arm/mach-pxa/sharpsl_pm.c                    |  112 ++-- arch/arm/mach-pxa/spitz.c                         |    4 + arch/arm/mach-pxa/spitz_pm.c                      |   14 +- arch/arm/mach-pxa/ssp.c                           |   73 +-- arch/arm/mach-pxa/stargate2.c                     |    4 + arch/arm/mach-pxa/tavorevb.c                      |    4 + arch/arm/mach-pxa/tosa.c                          |    5 + arch/arm/mach-pxa/trizeps4.c                      |    4 + arch/arm/mach-pxa/viper.c                         |   15 +- arch/arm/mach-pxa/xcep.c                          |    5 + arch/arm/mach-pxa/zylonite.c                      |    6 +- arch/arm/mm/mmu.c                                 |    2 +- .../mach => plat-pxa/include/plat}/pxa3xx_nand.h  |    0 drivers/mmc/host/pxamci.c                         |   10 +- drivers/mtd/nand/Kconfig                          |    2 +- drivers/mtd/nand/pxa3xx_nand.c                    |   82 ++- drivers/video/backlight/da903x_bl.c               |    7 + drivers/video/backlight/tdo24m.c                  |    1 + drivers/video/pxa168fb.c                          |    1 + drivers/video/pxafb.c                             |   23 +- include/linux/mfd/da903x.h                        |    4 + include/video/pxa168fb.h                          |    2 - 89 files changed, 3068 insertions(+), 1081 deletions(-) create mode 100644 arch/arm/mach-pxa/include/mach/palmtreo.h create mode 100644 arch/arm/mach-pxa/include/mach/regs-u2d.h delete mode 100644 arch/arm/mach-pxa/include/mach/treo680.h rename arch/arm/mach-pxa/{treo680.c => palmtreo.c} (53%) rename arch/arm/{mach-pxa/include/mach => plat-pxa/include/plat}/pxa3xx_nand.h (100%)

* Previous message: [PATCH 8/9 v2] MXC: Add a digital audio multiplexer driver * Next message: [PATCH 1/4]ARM: NUC900: change condition of IRQ_ADC to NR_IRQS for nuc932 * Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]

More information about the linux-arm-kernel mailing list