N800
Contents
Overview
This page is about adding Nokia N800/N810 support to Linux mainline kernels. N800/N810 (from now on called just n8x0) has been in linux-omap tree far too long, we need to get it finally to mainline. There has been discussions on the linux-omap mailing list about this:
- Re: N810: latest linux-omap-2.6.git master
- OMAP support in mainline?
- Re: Things to do after 2.6.29 gets released
All the information about n8x0 mainline inclusion is scattered and the purpose of this page is to collect them into one place. As this is a wiki, it's encouraged for the people to improve the page based on their knowledge.
Status
chip | device | purpose | documented | implemented | merged | board implemented | board merged |
---|---|---|---|---|---|---|---|
OMAP Boot Tags | N8x0 | Provides boot information from bootloader (NOLO) | code | implemented | needs rewrite | N/A | |
tcm825x | N8x0 | Webcam + i2c bus | code | Yes | 2.6.24 | No | No |
* tea5761 | N800 | FM radio | code | Yes | 2.6.26 | No | No |
* lm8323 | N810 | Keyboard | code | Yes | 2.6.31 | Yes | 2.6.32 |
* tsl2563 | N810 (Both?) | Ambient light sensor | code | Yes | 2.6.33 | No | No |
* lp5521 | N810 (Both?) | 3 channel LED | old code | No | No | No | No |
blizzard | Both | LCD controller | code | Yes | 2.6.23 | untested | needing cleanup |
MMC | Both | SD/MMC cards | old code | Yes | 2.6.22 | broken | needing cleanup |
menelaus | Both | GPIO extender + i2c bus + ??? | old code | Yes | 2.6.29 | untested | needing cleanup? |
* tmp105 | Both | Temperature sensor (menelaus GPIO) | old code | no | no | no | no |
??? | Both | Internal UART/Serial | old code | ? | No | No | |
McSPI | Both | SPI bus | old code | Yes | 2.6.23 | Yes | 2.6.32 |
* ??? | Both | LCD panel (compatible with MIPID) | old code | Yes | 2.6.32 | No | No |
* cx3110x / stlc4550 | Both | 802.11 WiFi | old code | Yes | 2.6.31 | Yes | 2.6.32 |
* tsc2301 | Both | Touchscreen controller | old code | No | No | No | No |
Cbus | Both | ??? | old code | Linux-OMAP | needs rewrite | ? | |
* Retu | Both | ??? including watchdog | old code | Linux-OMAP | No | ? | |
* Tahvo | Both | ??? | old code | Linux-OMAP | No | ? | |
OneNAND | Both | Flash memory | old code | Yes | 2.6.15 | Yes | 2.6.32 |
??? | Both | DSP | old code | ? | No | No | |
TUSB6010 | Both | USB | old code | Yes | 2.6.27 | No | No |
Patches
Current patches are available from:
http://www.valot.fi/kalle/n8x0/patches/
The patches are against latest Linus' tree. This is to make merge to the mainline as easy as possible.
The compilation instructions:
make ARCH=arm CROSS_COMPILE=arm-linux- n8x0_defconfig make ARCH=arm CROSS_COMPILE=arm-linux- flasher -k arch/arm/boot/zImage -f -b
The patches have been, at least, tested with Sourcery G++ Lite 2008q3-66.
Communication
All discussion should happen at <linux-omap@vger.kernel.org> (subscription instructions). Kalle Valo <kalle.valo@iki.fi> coordinates all this, so you might want to contact him in case there's something private you want to discuss and CC on all n8x0 related patches. The public communication in the mailing list is the preferred method.
The Plan
This a a draft and very much work in progress!
Most of the drivers needed by n8x0 should be already in mainline, notably exception being the Nokia's proprietary cbus support. But this must be checked.
- platform data support for omap serial driver
- n8x0 board file
- serial port
- onenand
- spi
- display
- touchscreen
- keyboard
- wlan
- usb
- cbus
- should be converted to use spi framework and send to inclusion for mainline
- retu
- should use new cbus driver
- tahvo
- should use new cbus driver
User space interfaces
Diablo user space components use non-standard kernel interfaces and most likely the interfaces are not acceptable to mainline. If we want to get diablo running with latest mainline kernels, this needs to be solved somehow. (Do we really want that or instead focus, for example, on Mer?)
Identified non-standard interfaces:
- watchdog interface used by dsme
- bme interface
- private Wireless Extension calls used by wlancond/eapd
- audio and DSP in general
- maybe also display control
- /proc/component_version read by linuxrc from initfs
- /proc/bootreason read by dsme
In theory it might be possible to implement an out-of-tree module or separate patchset which provide the diablo specific interfaces to user space. This needs to be investigated.
Tips
Simplify make
To avoid using adding ARCH variable to every make command add a file named GNUmakefile
with the contents below and then you can run make without any options. Thanks to Johannes Berg for the tip.
ARCH=arm CROSS_COMPILE=arm-linux- include Makefile
Avoid CodeSourcery G++ Lite 2007q3-53 release
Kernel compiled with 2007q3-53 fails to boot:
<6>OMAP242x GPIO hardware version 1.8 <6>OMAP clockevent source: GPTIMER1 at 32000 Hz Console: colour dummy device 80x30 <6>Calibrating delay loop...