As you may or may not be aware, the Nitrogen6X and Sabre Lite boards are very similar. With a handful of caveats, you can boot a Nitrogen6X using an image created for the Sabre Lite. We've also put together a detection mechanism that will allow those differences to be handled in the start-up of U-Boot and Linux. In this post, we'll walk through the differences in detail, with references to the sources.
Overview
The source of the differences stems from the addition of the TWL127X WiFi-Bluetooth module to the Nitrogen6X. That device uses an SDIO channel to communicate with the WiFi part and a UART to communicate with the Bluetooth component. Because of this, we needed to free up another SDIO channel, and the most convenient was SD2.Unfortunately, the SD2 pads are used to communicate with the SGTL5000
audio codec through AUDMUX
channel 4. On Nitrogen6X, we moved these connections to previously unused pads CSI0:DAT4-7
.Other, more minor changes include:
- We moved the
PHY Reset
signal fromEIM_D23 (GPIO3:23)
toENET_RXD0 (GPIO1:27)
- Both SD cards are microSD, so there's no write-protect pin on
SDHC3
- We're using different ethernet jacks, so the
PHY
address has changed
The details:
Detection
The Linux code to detect a Nitrogen6X is in this patch. It defines a routine is_nitrogen6w()
that returns non-zero if running on a Nitrogen6X and zero if running on a Sabre Lite. That patch also adds a printk
statement so you can see the result by running dmesg
.
AUDMUX
The next patch on our boundary-L3.0.15_12.04.01
branch shows how we re-route the SGTL5000
's pins to AUDMUX3
from AUDMUX4
and also routes the AUDMUX3
channel to pads CSI0:4-7
, which are unused on Sabre Lite.
PHY Reset
The PHY Reset pin is not currently touched by Linux. U-Boot configures the pad and de-asserts both pins in this patch.
SD Card write protect pins
The full-sized SD card on Sabre Lite is connected to SD channel SDHC3
. On the Nitrogen6X, this channel is a microSD card, which doesn't have a write-protect pin. This patch contains fixup code for SDHC3
. It also removes the write-protect pin designation for SDHC4
, since neither Sabre Lite nor Nitrogen6X have a connection for it.
PHY address
The Sabre Lite uses a dual-stack USB+Ethernet connector to save space. Furthermore, the Nitrogen6X supports Power Over Ethernet (PoE) and the RJ-45 connectors which support that are slightly different than those that don't. Because the PHY samples the LED lines to determine the PHY address, each of these communicates on a different address.Under Linux, this PHY detection is handled automatically.To handle this under U-Boot, we've added support for a bit mask of PHY addresses.
Addition of wl12xx WiFI module
WiFi support is added to Nitrogen6X in a few patches.
- This patch configures
SD1 CLK
as an output for the 32KHz oscillator. - This patch enables the SDIO pads on
SDHC2
. - and this patch enables the SDIO channel.
Addition of wl12xx Bluetooth
The Bluetooth channel on the wl12xx
module is connected to the Nitrogen6X through UART3
.This patch enables UART3
on Nitrogen6X. It also disables UART3
on Sabre Lite because those signals aren't routed.Note that this patch is also needed in order to support changing the UART
to 3Mbps.
Nitrogen6X SOM
The Nitrogen6X SOM module has quite a bit more flexibility in its' pin assignments, but our reference carrier board exposes the same functionality as the Nitrogen6X using the same pads, so it's 100% compatible with Nitrogen6X.
Final notes
While reading this, you may have noticed that we're hacking the Sabre Lite board-support files in both Linux and U-Boot to add Nitrogen6X support. We should really stop doing this, but will make that transition when we upgrade to a kernel which supports device trees.Because of the chicken-and-egg problem, we'll cut over to main-line U-Boot first, then we'll follow up with the Linux kernel.Stay tuned for details