======================================================== Display pipeline — DSI transport to the color e-ink TCON ======================================================== The Note Air5 C is a **color e-ink** device, but the firmware describes a Qualcomm **DSI/AMOLED** display stack: the standard SM6350 SDE/DPU + DSI pipeline is present and *used* — but only as the **pixel transport** into an Onyx e-ink **TCON** (timing controller), which drives the actual EPD panel. The AMOLED panel *names* are reference-design vestiges; the panel *timings* are e-ink. This consolidates facts that were split across :doc:`/boot/boot-image` (kernel e-ink firmware), :doc:`/boot/dtbo` (per-PCB TCON id) and :doc:`/display/splash`, and adds the device-tree evidence (including the EPD PMICs below). The stock DSI/DPU pipeline (base DTB) ===================================== ``artifacts/boot_a/board.dts`` carries the full, unmodified SM6350 MDSS display subsystem: - **DPU/SDE** — ``qcom,sde-kms`` (``qcom,mdss_mdp``), ``mdp_phys`` **``0xae00000``** (+ VBIF ``0xaeb0000``, RegDMA ``0xaeac000``, SID ``0xae8f000``, SW-fuse ``0xaf50000``), display IRQ ``0x53``, two mixers, primary display preference. - **DSI** — ``qcom,dsi-ctrl-hw-v2.4`` "dsi-ctrl-0" **``0xae94000``**; ``qcom,dsi-phy-v3.0`` "dsi-phy-0" **``0xae94400``**; ``qcom,mdss_dsi_pll_10nm`` at ``0xae94a00``; a ``qcom,mdss_dp_pll_10nm`` (DisplayPort PLL) is also present. A whole-file scan finds **no** EPD/EBC/e-ink display-controller ``compatible`` in the base DTB — only this DSI/DPU path. (Apparent "ebc" hits are the clock literal ``0xbEBC200`` = 200 MHz, not a controller.) So at the SoC level the only display output described is DSI; the e-ink specifics live one layer out. The panel node: AMOLED name, e-ink reality ========================================== The overlay (:doc:`/boot/dtbo`) attaches the panel. The node is *named* for a Visionox AMOLED part but is overridden for e-ink: - name ``qcom,mdss_dsi_rm69299_visionox_amoled_video`` / ``-panel-name = "rm69299 amoled fhd+ video mode dsi visionox panel"`` — a reference-design **AMOLED** identifier; - but it declares **``onyx,tcon-mode-support``** — the Onyx property that puts the DSI link into **TCON mode** (the DSI feeds a timing controller, not a panel); - and its timing is **``2480 × 1860``** (``panel-width = 0x9b0``, ``panel-height = 0x744``) at **38 Hz** (``framerate = 0x26``), h-porches 40/40 (``0x28``), physical **207 × 155 mm** (``0xcf`` × ``0x9b``), RGB888 (``bpp = 0x18``). That is a ~10.3-inch, ~300-dpi **e-ink** panel geometry — **not** the ~1080-wide AMOLED "fhd+" the name implies; - and its DSI ``on``/``off`` commands are *trivial* — only DCS ``0x11`` (sleep-out) / ``0x10`` (sleep-in) (``on-command = [05 01 00 00 ff 00 02 11 00]``, ``off-command = […10 00]``). A real AMOLED panel would typically need a long init sequence here; a lone sleep-out is consistent instead with a **TCON front-end**, where the FPGA — not the DSI link — initialises the actual panel, matching ``onyx,tcon-mode-support`` above. (The long DSI init blobs elsewhere in the overlay belong to the *unused* reference AMOLED nodes.) So the DSI output is genuinely used, but its endpoint is the e-ink TCON, which converts the DSI pixel stream into EPD source/gate drive. The overlay carries several such reference DSI panel definitions (``rm69299`` video and command mode, ``r66451`` AMOLED with DSC), all in TCON mode; the per-PCB variant is selected by board id (:doc:`/boot/dtbo`). E-ink firmware (compiled into the kernel) ========================================= The e-ink-specific firmware is **baked into the kernel image** via ``CONFIG_EXTRA_FIRMWARE`` (so it ships inside ``boot_a``, not as its own partition — :doc:`/boot/boot-image`): .. list-table:: :header-rows: 1 :widths: 40 60 * - Firmware blob(s) - Role * - ``waveform/eink_waveform.wbf`` - the EPD **waveform** table — the per-temperature voltage/timing sequences that drive grayscale/color pixel transitions * - ``mxo/mxo1300_nvcm_{81,82,83,84,86,87}.ied`` (85 absent from the bundle), ``mxo/mxo4300_nvcm_{81,82}.ied`` - **MXO** EPD source-driver / controller NVCM (non-volatile config) images — several panel/stepping variants * - ``lfcpnx/lfcpnx100_tcon_fw_{99,9e,9f,a2,a5,a7}.bin`` - **LFCPNX100 TCON** firmware — the FPGA **bitstream** for the timing controller (a Lattice **ECP5-UM / LFE5UM-85F**), several variants; this PCB's DT (:doc:`/boot/dtbo` ``overlay_0.dts``) carries two fragments targeting the same TCON node — an earlier one (``fragment@69``) sets ``fw-product-id = 0x9e``, but a later one (``fragment@80``) overrides it to ``0xa7``. Under DT-overlay apply semantics the later fragment wins, so the effective value is ``0xa7``, selecting ``…_a7.bin``, not ``…_9e.bin``. The FPGA loads it over bit-banged SPI; the driver-side protocol is in :doc:`/display/tcon`. Multiple variants of each are bundled so one kernel serves the PCB revisions; the running TCON/EPD-controller id selects the match (the same pattern as the Bluetooth patch set, :doc:`/wireless/bluetooth`). EPD power (XBL) =============== EPD panels need specialized high-voltage rails (±15 V gate/source, VCOM). Those are sequenced in **XBL DXE** by the e-ink PMICs, not by the SoC PMIC RPMh rails: ``fp9931_power_on`` / ``max17135_power_on`` (FP9931, MAX17135 EPD PMICs), ``gvdd``/``gvee`` power-up/down and ``gpio_pmic_pwrgood`` (found directly in the XBL DXE strings). XBL brings EPD power up for the boot splash (:doc:`/display/splash`) and hands a live panel to the kernel. Reference-design vestiges vs. what is real ========================================== Reference-design item vs. actual status: .. list-table:: :header-rows: 1 :widths: 40 26 34 * - Item - Status - Note * - SDE/DPU + DSI ctrl/phy (base DTB) - **real / used** - the pixel transport into the TCON * - ``rm69299`` / ``r66451`` AMOLED panel *names* - vestigial - reference-design identifiers; timings are overridden to e-ink 2480×1860 * - ``qcom,mdss_dp_pll`` (DisplayPort) - unused - stock SM6350 asset; no DP connector * - XBL AMOLED splash path - partly vestigial - the AMOLED panel references are leftovers; EPD power/splash is real (:doc:`/display/splash`) * - TCON fw / EPD waveform / MXO NVCM / FP9931 / MAX17135 - **real / e-ink** - the actual color e-ink pipeline This is the same reference-design-carried-unchanged pattern as the mmWave/5G RF-card assets (unpopulated configuration for absent boards, not to be confused with the separately-dormant MPSS baseband) in :doc:`/audio/dsp-firmware`. Provenance ========== :Source: ``artifacts/boot_a/board.dts`` (SDE/DSI nodes, addresses), ``artifacts/dtbo_a/overlay_0.dts`` (panel node: ``onyx,tcon-mode-support``, 2480×1860 timing, physical size), ``artifacts/boot_a/kernel_config.txt`` (``CONFIG_EXTRA_FIRMWARE`` e-ink blob list), and the XBL DXE EPD-PMIC strings found directly in ``xbl_a.bin``. :Method: DTB/overlay node reading and a whole-file EPD/EBC controller scan (negative); firmware-name extraction from the kernel config. No code executed. :Cross-refs: :doc:`/boot/boot-image` (kernel ``EXTRA_FIRMWARE``, onyx input), :doc:`/boot/dtbo` (per-PCB TCON product-id, panel selection), :doc:`/display/splash` (boot splash on the EPD panel), :doc:`/display/tcon` (the kernel-side FPGA-TCON / EPDC / EPD-PMIC register-level drivers), :doc:`/audio/dsp-firmware` (reference-base RF leftovers, same pattern).