Appendix · reference

PinePhone Pro component support matrix

Every chip, sensor, and on-SoC block on the RK3399S phone — with FreeBSD driver status, our-tree path, and upstream reference.

This is the PinePhone Pro per-component reference index. The phone is a Rockchip RK3399S system with a few dozen distinct devices on board — some on-SoC, some on i2c, some on SDIO, some on USB. Every one has its own page with identity (part number, bus, GPIO/IRQ), driver status, our-tree and upstream pointers, and open work.

The PineTab2 now has its own component matrix so the tablet work can grow without muddying the phone’s support map. The repo root HARDWARE.md is the source-of-truth manifest with TODOs; this index is the navigable, status-pilled view. The hardware reference appendix is a flat manifest table organized for cross-essay lookup.

Counts

Out of 45 components catalogued:

(Wave-1 + wave-2 implementation runs of 2026-04-30 moved gd25lq128 from blocked → partial, and rk-efuse / magnetometer / vibrator / sgm3140 from not-started → partial. The 2026-05-02/03 PD bring-up arc additionally promoted RK818 (full USB-PD sink → battery charging), RK3399 TSADC (live cpu/gpu temps, later corrected to use hardware QSEL rather than trim), AF8133J magnetometer (reset-gpio polarity fix → real X/Y/Z reads), and SGM3140 (/dev/led/flash torch + flash strobe verified by hand) from partial → working. A 2026-05-03 status pass also promoted MPU-6500, STK3311, vibrator, and RK3399 eFuse — all have working drivers exposing their full kernel-side feature set; “partial” was actually about userspace policy that lives outside each driver, not about driver completeness. See the per-component pages for what’s left to wire into userspace nicely. TSADC moved back to partial on 2026-05-05 after live overheat evidence exposed a readout bug; the follow-up fixed sensor reporting with RK3399 hardware QSEL and kernel #195 proved guarded code-domain comparator IRQs. It remains partial because hardware TSHUT is still disarmed. The power-domain controller also moved back to partial: the sysctl-only driver round-tripped RGA on kernel #144, but PINEPHONE_PRO disables it after a warm-reboot boot-refusal correlation.)

Status wording is intentionally conservative. partial usually means “candidate code and a verifier exist, but live behaviour is flaky or only one mode is verified.” The not-yet-phone-tested set is: GD25LQ128 (no SPI-NOR driver attached → /dev/flash0 absent; the bench tooling assumes a flashctl(8) that doesn’t exist in FreeBSD), PL330 DMA (driver wired in kernel config, no consumer yet exercises it), and rk_power_domain (driver exists but is disabled until the attach/boot issue is isolated). Treat their pages as compile-ready / bench-pending until bench:phone or the component-specific verifier captures real PinePhone Pro output.

SoC and memory

ComponentStatusBus / address
Rockchip RK3399S ● working — (application processor)
ARM Mali-T860 MP4 ◐ partial MMIO 0xff9a0000
Internal eMMC (128 GiB) ● working sdhci @ 0xfe330000
microSD slot ● working sdmmc / DWMMC @ 0xfe320000
GD25LQ128 SPI NOR (16 MiB) ◐ partial spi1

Clocks, pinctrl, DMA, power, IOMMU

ComponentStatusBus / address
RK3399 CRU ● working MMIO 0xff760000
RK3399 pinctrl + GPIO ● working MMIO 0xff320000 (PMU GRF) + per-bank
RK3399 IO domain controller ● working MMIO (PMU + SoC GRF)
RK3399 power domain controller ◐ partial PMU @ 0xff310000
Rockchip IOMMU (×6) · not started MMIO per-instance
ARM PL330 DMA (×2) ◐ partial MMIO 0xff6d0000 + 0xff6e0000
RK3399 eFuse ● working MMIO 0xff690000

SoC peripherals

ComponentStatusBus / address
RK3399 VOP-Lit ◐ partial MMIO 0xff8f0000
RK3399 SARADC ● working MMIO 0xff100000
RK3399 TSADC ◐ partial MMIO 0xff260000
DesignWare watchdog ● working MMIO 0xff848000
RK3399 RGA · not started MMIO 0xff680000
RK3399 crypto · not started MMIO (×2)

USB

ComponentStatusBus / address
Synopsys DWC3 ● working MMIO 0xfe800000
RK3399 USB2 PHY ● working MMIO 0xff770000
RK3399 TCPHY (USB-C / DP) ● working MMIO 0xff7c0000
Onsemi FUSB302B ● working i2c addr 0x22

Display

ComponentStatusBus / address
DesignWare MIPI DSI ● working MMIO 0xff960000
DesignWare HDMI · not started MMIO 0xff940000
Himax HX8394 panel ● working DSI
PWM backlight ● working pwm0

Audio

ComponentStatusBus / address
Realtek RT5640 ◐ partial i2c1 addr 0x1c
RK3399 I2S0 ● working MMIO 0xff880000
AwiNic AW8737 ● working enable GPIO0_B3

Power

ComponentStatusBus / address
Rockchip RK818 ● working i2c0 addr 0x1c
SYR827 / SYR828 ● working i2c (CPU + GPU VDD)

Wireless and modem

ComponentStatusBus / address
Broadcom BCM43455 WiFi ◐ partial sdio0 / DWMMC @ 0xfe310000
Broadcom BCM4345C5 Bluetooth ● working UART0 @ 1.5 / 3.0 Mbaud
Quectel EG25-G modem ◐ partial internal USB

Sensors

ComponentStatusBus / address
Goodix GT917S touchscreen ● working DTS &i2c3 addr 0x14
InvenSense MPU-6500 accel/gyro ● working i2c4 addr 0x68
Sensortek STK3311 light/proximity ● working DTS &i2c3 addr 0x48
Voltafield AF8133J magnetometer ● working DTS &i2c4 addr 0x1c

Input and indicators

ComponentStatusBus / address
GPIO keys (power, ring, kill switches) ● working GPIO
ADC keys (volume up / down) ● working SARADC ch1
Front-panel RGB LEDs ● working GPIO4_D2/D5/D6
Vibration motor ● working GPIO3_B1

Cameras

ComponentStatusBus / address
Sony IMX258 rear (13 MP) · not started MIPI CSI / DTS &i2c1 addr 0x1a
OmniVision OV8858 front (8 MP) · not started MIPI CSI
SGMicro SGM3140 flash ● working gpio4 RK_PC6 + gpio1 RK_PA3 (gpioled overlay)

Notes on cataloguing

The PineTab2 (RK3566) shares the family — same PMIC family (RK817 vs RK818), same touchscreen vendor, same DSI panel topology — but is catalogued separately under PineTab2 hardware and PineTab2 components because the SoC and several peripherals differ.

A few component pages flag specific discrepancies between the upstream PinePhone Pro DTS, our schematic notes, and live driver behaviour:

When in doubt, the per-component page wins over the index. The index exists to find pages, not to summarize them — every one-line cell here is reductive.