Appendix · reference
Hardware reference
Chip-by-chip manifest for the PinePhone Pro and PineTab2.
A flat catalog of every chip we touch on both target boards, with bus
addresses, GPIO/IRQ pin assignments, and a one-line note on driver
status. This is the lookup table essays cross-reference; for deep
status and TODOs see the repo root HARDWARE.md.
GPIO notation is Rockchip-style: GPIOx_Pyz where x is the bank,
y is the group letter (A/B/C/D), and z is the pin within the
group. The decimal number after each pin (= n) is the
bank-offset value used in .dtso files (bank * 32 + group * 8 + z).
PinePhone Pro (RK3399S)
SoC and memory
| Component | Part | Bus / Address | Notes |
|---|
| SoC | Rockchip RK3399S | — | 2× A72 @ 1.5 GHz + 4× A53 @ 1.0 GHz, voltage-locked variant of RK3399 |
| RAM | 4 GiB LPDDR4 | — | Full SMP, 6 cores active |
| eMMC | 128 GiB | dwmmc0 @ 0xfe320000 | 25 MHz/8-bit, HS200 not enabled |
| microSD (boot) | user-supplied | dwmmc1 @ 0xfe330000 | 50 MHz/4-bit, primary boot |
| SPI NOR | GD25LQ128 (16 MiB) | spi1 | rk2aw + Megi U-Boot 2024.04. mx25l driver missing JEDEC ID 0xc86018 |
Power management
| Component | Part | Bus / Address | Notes |
|---|
| PMIC | Rockchip RK818 | i2c0 addr 0x1c | Custom Honeyguide driver |
| Big-cluster regulator | SYR827 | i2c1 | fan53555 driver, A72 VDD |
| Little-cluster reg | SYR828 | i2c1 | fan53555 driver, A53 VDD |
| IO domains | RK3399 internal | MMIO | Both PMU and SoC iodomain attached |
| Battery gauge | RK818 internal | via PMIC | Driver loads, sysctl exposure pending |
| USB-C controller | FUSB302 | i2c4 addr 0x22 | CC detection working, role switch unwired |
Display and GPU
| Component | Part | Bus / Address | Notes |
|---|
| GPU | ARM Mali-T860 MP4 | MMIO 0xff9a0000 | panfrost driver, GLES 3.1 via mesa |
| VOP-Lit | RK3399 VOP | MMIO 0xff8f0000 | 720×1440 @ 60 Hz |
| MIPI DSI bridge | Synopsys DW-MIPI-DSI | MMIO 0xff960000 | 4-lane, custom dw_mipi_dsi driver |
| Display panel | HX8394-controlled IPS | DSI | 720×1440, panel_hx8394 driver |
| Backlight | PWM-controlled | pwm0 | pwm_backlight driver |
| HDMI | Synopsys DW-HDMI | MMIO 0xff940000 | Compiled, untested |
Audio
| Component | Part | Bus / Address | Pins / IRQ |
|---|
| Codec | Realtek RT5640 (ALC5640) | i2c1 addr 0x1c | HP-detect on GPIO4_D4 (wire pending) |
| I2S0 controller | RK3399 I2S0 (8-channel) | MMIO 0xff880000 | BCLK 3.072 MHz, LRCK 48 kHz |
| Speaker amp | AwiNic AW8737SCSR | enable GPIO0_B3 | simple_amplifier, missing VCC supply ref |
| MIC bias | RT5640 MICBIAS1 | — | Headset mic on IN2P |
Connectivity
| Component | Part | Bus / Address | Pins / IRQ |
|---|
| WiFi | Broadcom BCM43455 (in AP6255) | dwmmc0 SDIO | WL_REG_ON = GPIO0_B2 (16). Firmware loads, BCDC timeout. |
| Bluetooth | Broadcom BCM4345C5 (in AP6255) | uart0 @ 1.5/3.0 Mbaud | BT_HOST_WAKE = GPIO0_PA4 (4), BT_DEV_WAKE = GPIO2_PD2 (26), BT_REG_ON = GPIO0_PB1. Crystal 37.4 MHz (Murata Type-1MW build). |
| Cellular modem | Quectel EG25-G | usb (internal) | PWR_EN = GPIO3_B0, PWRKEY = GPIO3_B1, STATUS = GPIO3_C2. Working with power sequence script. |
| GPS | via EG25-G | NMEA on /dev/cuaU1 | Depends on modem power-on |
| Component | Part | Bus / Address | Pins / IRQ |
|---|
| Touchscreen | Goodix GT917S | i2c1 addr 0x14 | IRQ on GPIO1_C0 (active-low), reset GPIO4_D5. 5-touch. Polling fallback in use. |
| Power button | GPIO key | gpiokeys0 | Linux,code 0x74 unmapped |
| Ring-indicator | GPIO key | gpiokeys1 | Linux,code 0x8f unmapped |
| Volume buttons | SARADC keys | SARADC_IN0 | Driver missing. VOL+ ≈ 214 mV, VOL- ≈ 482 mV |
| Accel/Gyro | InvenSense MPU-6500 | i2c4 addr 0x68 | INT on GPIO3_B4. No driver. |
| Light/proximity | Sensortek STK3311 | i2c1 addr 0x48 | INT on GPIO1_B0. No driver. |
| Magnetometer | AF8133J or AK09911 | i2c4 addr 0x0c | No driver. |
USB and peripherals
| Component | Part | Bus / Address | Notes |
|---|
| USB3 OTG | Synopsys DWC3 | MMIO 0xfe800000 | CDC Ethernet gadget on ue0. dr_mode = peripheral. |
| USB2 host | EHCI/OHCI | MMIO 0xfe380000 | Modem + peripherals |
| USB-C PHY | RK3399 TCPHY | MMIO 0xff7c0000 | USB3 + DP alt mode |
| USB2 PHY | RK3399 USB2PHY | MMIO 0xff770000 | OTG + host |
| Watchdog | Synopsys DW WDT | MMIO 0xff848000 | dwwdt0 attached |
| Notification LEDs | GPIO R/G/B | GPIO4_D2/D3/D4 | /dev/led/led-{red,green,blue} |
| Vibrator | GPIO motor | GPIO1_C7 (= 23) | No driver yet |
| Privacy switches | 6 hardware kill switches | — | Switch #6 enables UART on 3.5 mm jack |
Console serial
- 1500000 baud, 8N1, no flow control on the 3.5 mm headphone jack
- Privacy switch #6 must be ON to route serial
- FT232 USB-serial adapter on
/dev/ttyUSB1 — CP2102 on /dev/ttyUSB0
cannot do 1500000 baud
- 3.3 V TTL only; 5 V will damage the SoC
PineTab2 (RK3566)
The PineTab2 shares the Quartz64 RK3566 driver foundation but adds
tablet-specific peripherals that are mostly unsupported on FreeBSD
today. Phase 3+ work; not actively brought up.
SoC and memory
| Component | Part | Bus / Address | Notes |
|---|
| SoC | Rockchip RK3566 | — | 4× Cortex-A55 @ 1.8 GHz |
| RAM | 4 GiB / 8 GiB LPDDR4 | — | |
| eMMC | 64 GiB / 128 GiB | sdhci0 | HS200 198 MHz with covacat sdhci_fdt patches |
| microSD | user-supplied | sdhci1 | |
| GPU | ARM Mali-G52 MP2 | MMIO | Bifrost/Valhall — panfrost won’t fit, needs panthor |
| TSADC | RK3566 TSADC | MMIO 0xfe710000 | Causes reboots; remove via fdt rm in loader.conf |
Power management
| Component | Part | Bus / Address | Notes |
|---|
| PMIC | Rockchip RK817 | i2c0 addr 0x20 | Partial FreeBSD support |
| Battery gauge | RK817 internal | via PMIC | |
| USB-C controller | FUSB302 ×2 | i2c | Two USB-C ports |
| Component | Part | Bus / Address | Notes |
|---|
| Display panel | BOE TH101MB31IG002-28A | MIPI DSI | 10.1” 1280×800 IPS. No FreeBSD MIPI DSI framework — bring up via micro-HDMI instead. |
| HDMI | Synopsys DW-HDMI | MMIO | DW-HDMI driver works (covacat fixes) |
| Touchscreen | Goodix GT9xx | i2c | Adapt PinePhone Pro driver |
| Keyboard | Pogo pin USB 2.0 | usb | Standard USB HID |
Connectivity
| Component | Part | Bus / Address | Notes |
|---|
| WiFi/BT combo | Bestechnic BES2600 | sdio | Out-of-tree driver even on Linux. Use a USB dongle. |
| Ethernet (EQOS) | RK3566 GMAC | MMIO | 1 Gbps with covacat patches |
| USB 3.0 | RK3566 xHCI | MMIO | Combophy selection critical — wrong DTB breaks hardware |
Console serial
- 1500000 baud via USB-C UART dongle (ships with the device)
- Plug into the USB-C port furthest from the power button (only
green light should be on)
- Adapter has an SD BOOT MASKROM switch to bypass eMMC/SPI boot
Cross-references
- Repo root
HARDWARE.md
has TODO lists, working/partial/broken status, and Linux driver
references for every chip.
- The mainline Linux DTS files (
rk3399-pinephone-pro.dts,
rk3566-pinetab2-v2.0.dts) are the source of truth for pin
assignments; FreeBSD imports them under
sys/contrib/device-tree/src/arm64/rockchip/.
- For the porting strategy and history behind these choices, see
Porting research.