N900
The Nokia N900 is a Linux based smartphone from Nokia, which has been released in November 2009. It's sold with Maemo using a patched 2.6.28 kernel (adding board support and lots of drivers). Since then board support has been added to the mainline kernel and most hardware can be used with a current kernel. Details can be seen in the table below.
Contents
Kernel Status
Colors:
- Green = Available
- Yellow = Work in Progress (WIP), for docs: no documentation, but kernel code available
- Red = Missing
- Gray = Deprecated
- Cyan = Not Available (N/A)
Chip | Driver name | Purpose | Docs | Driver | Board | Device Tree | Firmware | ||
---|---|---|---|---|---|---|---|---|---|
Patch | Mainline | Patch | Mainline | ||||||
OMAP3430 | System-on-chip | OMAP34xx TRM | Yes | Yes | 3.13 | ||||
* Cortex A8 | CPU | ARM infocenter | Yes | N/A | 3.13 | ||||
* * ARMv7 | Instruction set | ARM infocenter | Yes | N/A | |||||
* * NEON | Media Extensions | ARM infocenter | Yes | N/A | |||||
* * Thumb | Code compression | ARM infocenter | 2.6.12 | N/A | |||||
* * Thumb2 | Code compression | ARM infocenter | Yes | 3.13-rc1 | PATCHv1 (2014-02-05) | ||||
* * ThumbEE | Instruction Set for JIT compilers | ARM infocenter | Yes | N/A (Userspace: Java VM?) | |||||
* * VFP | Floating-point coprocessor | ARM infocenter | 2.6.12 | N/A | |||||
* M-Shield | omap-aes omap-sham | AES, SHA1 and MD5 acceleration (needs updated X-Loader) | code | 2.6.37-rc1 | Yes | 3.13-rc3 | |||
* OMAP 3 Camera ISP | omap3-isp | OMAP3 Camera Chip Connection Bus | OMAP34xx TRM | 2.6.39-rc1 | N/A | No | |||
* OMAP DSS | ??? | Video HW abstraction layer | OMAP34xx TRM | Yes | N/A | PATCHv3 (2014-01-21) | |||
* OMAP DRM | ??? | KMS video driver | N/A | 3.3-rc1 | N/A | No | |||
* TMS320 C64x | tidspbridge | DSP (also called IVA 2+) | datasheet | Yes | N/A (Userspace: gst-dsp) | No | |||
* * | DSP patches for Maemo/N900 | code | Yes | No | N/A | ||||
* PowerVR SGX530 | pvrsrvkm omaplfb | OpenGL ES and OpenVG acceleration | No | No | No | No | No | No | |
* OMAP Watchdog | omap_wdt | Watchdog | OMAP34xx TRM | 3.8 | Yes | 3.13 | |||
* OMAP MMC/SD/SDIO | ??? | eMMC | OMAP34xx TRM | Yes | Yes | 3.13-rc3 | |||
* OMAP MMC/SD/SDIO | ??? | SD/MMC card | OMAP34xx TRM | Yes | Yes | 3.13 | |||
TI TWL4030 | ??? | multifunction (I2C) | TPS65950 TRM | N/A | 3.13 | ||||
* | ??? | Audio | part of TI TWL4030 | Yes | Yes | 3.13 | |||
* | twl4030-vibra | Vibrator | part of TI TWL4030 | Yes | 2.6.39-rc1 | 3.13 | |||
* | rtc-twl | Real-Time Clock | part of TI TWL4030 | Yes | N/A | 3.13 | |||
* | twl4030_wdt | Watchdog | part of TI TWL4030 | 3.8 | Yes | 3.13 | |||
* | twl4030_keypad | Keypad | part of TI TWL4030 | 2.6.33 | Yes | queued for 3.14 | |||
* | twl4030_pwrbutton | Power Button | part of TI TWL4030 | Yes | Yes | queued for 3.14 | |||
* | twl4030_madc | Analog Digital Converter | part of TI TWL4030 | Yes | Yes | No | |||
GPIO | ??? | Camera button | N/A | Yes | Yes | 3.13 | |||
Taos TSL2563 | tsl2563 | Ambient light sensor | datasheet | 2.6.33 | Yes | queued for 3.14 | |||
LP5523 | leds-lp5523 | LED driver | documentation | 2.6.37-rc2 | 3.1-rc1 | Patch 1: 3.13, Patch 2: 3.13 | |||
Sony ACX565AKM | ??? | LCD panel | code | 2.6.35 | 2.6.36 | part of omapdss | |||
TI TSC2005 | tsc2005 | Touchscreen controller | datasheet | 2.6.39-rc1 | 3.3-rc1 | WIP (2013-12-05) | |||
WL1251 | wl1251_spi wl1251 | 802.11b/g WiFi | code | 2.6.31 | 2009-11-22 | WIP (2013-12-05) | wl1251-fw.bin wl1251-nvs.bin | ||
* | Packet injection support | code | Yes | WIP | N/A | ||||
Si4713 | radio-si4713 si4713-i2c | FM transmitter | datasheet | 2.6.32 | Yes | No | |||
TPA6130a2 | ??? | Headphone amplifier | datasheet | 2.6.33 | Yes | 3.13-rc1 | |||
TLV320AIC3X | ??? | Digital audio data serial | ti.com | 2.6.25 | Yes | 3.13 | |||
Board | ??? | Sound SoC Wiring | N/A | Yes | Yes | No | RFC (2013-10-27) | ||
* | All sound alsa switches and channels | In maemo fremantle kernel | No | No | N/A | ||||
GPIO | ??? | Proximity sensor | N/A | Yes | Yes | 3.13 | |||
Phonet | phonet | Modem protocol | code | 2.6.28 | N/A | ||||
HSI | hsi | Modem Bus Framework | code | 3.4-rc2 | N/A | ||||
* hsi_char | hsi_char | HSI client driver used by N900 | code | 3.4-rc2 | No | RFCv4 (2013-12-16) | |||
* ssi_protocol | ssi_protocol | HSI client driver used by N900 | code | RFCv4 (2013-12-16) | No | RFCv4 (2013-12-16) | |||
* cmt_speech | cmt_speech | HSI client driver used by N900 | code | Yes | No | No | No | ||
Omap SSI | omap_ssi | Synchronous Serial Interface | code | RFCv4 (2013-12-16) | No | RFCv4 (2013-12-16) | |||
cmt | cmt | modem | code | RFCv4 (2013-12-16) | No | RFCv4 (2013-12-16) | |||
* TI NaviLink NL5350 | GPS (via Phonet modem protocol) | reveng | Userspace gps2.c | ||||||
* | A-GPS | No | Client SUPL application: http://www.tajuma.com/supl/index.html | ||||||
rx51_battery | rx51_battery | Battery design capacity, battery temperature | code | 3.8 | 3.8 | No, depends on twl4030-madc | |||
bq27200 | bq27x00_battery | Battery monitor chip | documentation | 2.6.28 | 3.3-rc1 | 3.13 | |||
isp1707a | isp1704_charger | USB charger detector | datasheet | 2.6.37-rc1 | 2011-04-20 | queued for 3.14 | |||
bq24150a | bq2415x_charger | Battery charger | documentation | 3.8 | queued for 3.14 | queued for 3.14 | |||
OneNAND | ??? | Flash memory | code | 2.6.15 | Yes | 3.13 | |||
LIS302DL | lis3lv02d_i2c lis3lv02d | Accelerometers | datasheet | 2.6.32 | 3.5-rc1 | WIP (2013-12-13) | |||
ADP 1653 | adp1653 | Flash Torch | datasheet | 3.1-rc1 | WIP | No, depends on omap3isp | |||
STM VS6555 | smiapp | Front Webcam | datasheet | 3.4-rc4 | Yes | No | No, depends on omap3isp | No firmware needed | |
ET8EK8 | et8ek8 | Main Camera | datasheet | Yes | No | Yes | No | No, depends on omap3isp | Firmware was integrated into driver (it was only data structure) |
AD5820 | ad5820 | Autofocus | datasheet for AD5821, which may be similar | Yes | No | Yes | No | No, depends on omap3isp | |
BCM2048 | hci_h4p | Bluetooth | old code | staging (queued for 3.15) | Yes | No | No | bcmfw.bin | |
* | radio-bcm2048 | FM/RDS receiver | old code | staging (3.14-rc1) | Yes | No | No | ||
IR Diode on PWM GPIO | ir-rx51 | Infrared/CIR transmitter | N/A | 3.7-rc1 | 3.7-rc1 | No | |||
omap3-rom-rng | omap3-rom-rng | OMAP3 ROM Random Number Generator support | code | 3.13-rc2 | 3.13-rc1 | No |
Kernel git repository for N900
There is git repository for upstream linux kernel with all N900 patches.
https://gitorious.org/linux-n900/linux-n900
This git repository is used for development. All other git repositories on internet are older and does not contains all patches.
Kernel Compilation
export ARCH=arm export CROSS_COMPILE=arm-linux-gnueabi- make rx51_defconfig make zImage modules
DT Kernel Compilation
Make sure this is enabled in the kernel configuration:
CONFIG_ARM_APPENDED_DTB=y CONFIG_ARM_ATAG_DTB_COMPAT=y CONFIG_ARM_ATAG_DTB_COMPAT_CMDLINE_EXTEND=y CONFIG_PINCTRL_SINGLE=y CONFIG_REGULATOR_TWL4030=y CONFIG_REGULATOR_FIXED_VOLTAGE=y
Compile Kernel, Modules and DTB file:
export ARCH=arm export CROSS_COMPILE=arm-linux-gnueabi- make zImage make modules make omap3-n900.dtb
Create combined kernel image by appending the DTB file:
cat arch/arm/boot/zImage arch/arm/boot/dts/omap3-n900.dtb > zImage
Install Modules:
make INSTALL_MOD_PATH=/mnt/target modules_install
Modem Status in Mainline Kernel
Missing drivers to have a working modem in the mainline kernel:
- omap-ssi - the modem is attached via ssi, this driver adds support for the ssi hardware of the omap processor.
- ssi-protocol - this adds support for the protocol used to to communicate with the modem (AKA McSAAB).
- cmt-speech - this adds support for the protocol used to exchange peech data with the modem
- cmt - this driver handles the modem's GPIO pins and is needed by ssi-protocol and cmt-speech.
sre is currently working on getting the modem supported in the mainline kernel. Basic modem support (= everything except cmt-speech) is expected to be ready for 3.14 or 3.15.
Bluetooth Status in Mainline Kernel
This is the TODO list to get the hci_h4p driver into the mainline kernel:
Use hdev->setup callback for firmware loading and initial setup Note 1: Since they are all HCI commands anyway, you can nicely use the sync interface we added for that Note 2: Example: btusb.c Review MAC address setup (driver, which loads config from eeprom?) https://lkml.org/lkml/2013/10/24/375
M-Shield
For M-Shield AES, SHA1 and MD5 acceleration is needed updated signed bootloader X-Loader. Without it M-Shield crashing.
More info on: http://maemo.org/community/maemo-developers/n900_aes_and_sha1-md5_hw_acceleration_drivers/
U-Boot
Instead of booting the kernel directly from NOLO (which restricts you to using exactly one kernel), U-Boot can be used as second bootloader. The Maemo kernel can be appended to U-Boot to keep the existing Maemo installation working (U-Boot must be located at the location of the Maemo kernel). The resulting boot process will end up like this: NOLO -> U-Boot -> Kernel.
Pali Rohár has been working on getting the N900 support into the mainline U-Boot:
description | date | status |
---|---|---|
Board Support | 2012-10-29 | mainline |
Bootmenu Support | 2013-03-07 | mainline |
Now all N900 patches are in upstream U-Boot mainline project (part of U-Boot 2013.04). Source code is on http://git.denx.de/?p=u-boot.git
Debian packaging for Maemo is in this git repository: https://gitorious.org/u-boot-shr/u-boot (branch maemo).
There's also a thread on talk.maemo.org, where the latest released & tested version can be found: http://talk.maemo.org/showthread.php?t=81613
More info about U-Boot on N900 is in first post.
Flashing
There is an open source flasher application called 0xFFFF, which is working with the Nokia N900.
- Git repository is on: https://gitorious.org/0xffff/0xffff
- Packages are available in Debian & Ubuntu (apt-get install 0xffff)
- Gentoo Ebuild is available in ixit overlay (emerge -av sys-apps/0xffff::ixit )