N900

Camera
Camera (front & back) drivers are available from this git:. The code is not in the mainline kernel, because it uses a camera firmware, which can be avoided by changing the driver.

U-Boot
Instead of booting the kernel directly from NOLO (which restricts you to using ONE kernel), U-Boot can be used as second bootloader. The Boot Process will end up like this: NOLO -> U-Boot -> Kernel. The Maemo kernel is appended to U-Boot, since U-Boot will be at the location where the Maemo kernel is located normally.

The U-Boot patches to support the N900 are not yet mainline, but have been proposed for inclusion recently: Nokia RX-51 support

Git repository with N900 patches based on U-Boot master is here: https://gitorious.org/u-boot-shr/u-boot (branch pali)

Thread on talk.maemo.org where is last new version: http://talk.maemo.org/showthread.php?t=81613

Charging
Charging is currently done with a shell script, which and "i2c-dev" kernel module. There are plans to move this into the kernel, so that charging happens automatically once you plug your N900 into a USB port. You can find discussions and some code here. Recently (3.3-rc1) the kernel got a new Charge Manager Framework (Announcement), which will help with this task. You can find its documentation under: Documentation/power/charger-manager.txt

Modem
The modem is connected via a bus called SSI, which is an old version of HSI. In linux multiple things are involved to get it working:


 * SSI driver (not yet mainline, WIP)
 * Status 2012-01-09: http://marc.info/?l=linux-omap&m=132611324318625&w=2
 * HSI framework needed by the SSI driver (mainline since 3.4-rc2)
 * PhoNet for userspace communication (mainline since 2.6.28)

Patches missing mainline to get modem support:


 * HSI: omap_ssi: OMAP SSI driver
 * HSI: omap_ssi: OMAP SSI kernel configuration
 * board data for rx51, get e.g. from meego's board code