evidence · 10.7 KiB

dts-evidence.md

Committed at docs/dts-evidence.md. This is what grounds the requirements that cite it.

Open raw source

Device tree evidence and corrections

Investigated 2026-09-20 against ruyisdk/linux-xuantie-kernel @ 7d4e1f444f461dbe3833bd99a4640e7b6c2cd529 and the vendored sources in repo/.

This was first written up as three published Claude artifacts. Those are superseded and are not maintained: several of their facts were wrong, and they cannot be corrected in place from here. The notes now live in the site, are hand-authored under site/src/pages/hardware/, and are corrected whenever the repository learns something newer:

What the ported pages corrected, relative to the artifacts:

Corrections to docs/findings.md

Wi-Fi is on MMC0/SDIO0, not MMC1

findings.md says “RTL8189FTV on SDIO (MMC1, GPIO26-31)”. That is wrong on both the controller and the pins.

Evidence:

  1. repo/schematic/T-Display K230_V1.0_NEW.pdf — nets WIFI_CLK, WIFI_CMD, WIFI_D0–WIFI_D3 land on the SoC’s MMC0_CLK, MMC0_CMD, MMC0_D0–D3 balls (A5, D6, D5, C5, B5, C6). These are dedicated pads, not FPIOA pins.
  2. repo/canmv_k230/src/rtsmart/rtsmart/kernel/bsp/maix3/configs/k230_canmv_v3p0_defconfig:
    CONFIG_REALTEK_SDIO_DEV0=y
    CONFIG_SDCARD_ON_SDIO_DEV1=y
    CONFIG_SDCARD_ON_SDIO_DEV=1
    
  3. repo/canmv_k230/src/uboot/uboot/arch/riscv/dts/k230_canmv_v3p0.dts muxes IO54–59 as MMC1_* with the comment // MMC1 -> TFCARD, and leaves IO26–31 at SEL=0 (plain GPIO) under the comment // 26-35 ext jp — they go to the expansion header.

So: Wi-Fi → &mmc_sd0 (sdhci0@91580000). TF card → &mmc_sd1 (sdhci1@91581000). That also matches U-Boot’s mmc_boot_dev_num = 1.

GPIO26–31 can be muxed to MMC1_* (FPIOA function 1) — that is presumably where the original claim came from — but they are not muxed that way on this board, and MMC1 is already spoken for by the card.

CONFIG_RT_USING_REALTEK is set for this board

findings.md says “the board defconfig does not enable it, so it is likely not compiled into the shipped image at all.” The Kconfig default is n, but k230_canmv_v3p0_defconfig sets CONFIG_RT_USING_REALTEK=y alongside CONFIG_REALTEK_SDIO_DEV0=y.

So the driver is built in. The remaining root cause for the dead radio is the empty Set_WLAN_Power_On() stub — IO45_WIFI_EN gates an RT9080-33GJ5 LDO that produces WIFI_3V3, and nothing ever asserts it. That part of findings.md stands.

The U-Boot DTS is this board’s DTS

repo/canmv_k230/src/uboot/uboot/arch/riscv/dts/k230_canmv_v3p0.dts has model = "kendryte k230 canmv v3.0", which is exactly the string U-Boot prints on our hardware (findings.md). It is therefore a primary source for this board’s pin assignments, not a reference-board approximation.

Confirmed from it, cross-checked against the FPIOA alternate-function table in repo/canmv_k230/src/canmv/port/machine/machine_fpioa.c (SEL=0 is GPIO, 1–4 are the alternates in column order):

PinSELFunctionUse
IO220GPIO22lcd_rst — AMOLED reset
IO230GPIO23commented hdmi_int; is our touch INT
IO240GPIO24commented hdmi_rset; is our touch RST
IO250GPIO25LCD_EN
IO36/371IIC3_SCL/SDAtouch bus (comment on IO37 says BT_UART_TXD; wrong)
IO38/391UART0_TXD/RXDconsole via CH342 ch0
IO40/412IIC1_SCL/SDAcamera
IO450GPIO45IO45_WIFI_EN
IO48/493IIC0_SCL/SDA—
IO7/82IIC4_SCL/SDA—
IO50/511UART3_TXD/RXDCH342 ch1
IO54–592MMC1_CMD/CLK/D0–D3TF card

Touch is on i2c3 at 0x5d — confirmed independently by CONFIG_TOUCH_GT9895_I2C_DEV="i2c3" / CONFIG_TOUCH_GT9895_I2C_ADDR=0x5d.

LCD reset and enable pins confirmed by canmv_k230/include/config/auto.conf: CONFIG_MPP_DSI_LCD_RESET_PIN=22, CONFIG_MPP_DSI_LCD_BACKLIGHT_PIN=25.

Structural facts about the Linux DTS

Upstream nodes that conflict with our board

k230-canmv-v3.dts declares an LT9611 HDMI bridge on &i2c3 with reset-gpios = <&gpio0_ports 24> and interrupts = <23 ...>. On our board those two GPIOs are the GT9895’s RST and INT. The I2C addresses do not collide (0x3b vs 0x5d); the GPIOs do. Our board file must not carry the LT9611 node as written.

Whether HDMI and the AMOLED touch are physically mutually exclusive on this board has not been established — the schematic around that section has not been read. Treat it as a DT-level constraint for now.

Panel notes for change 3

Full detail is in the third artifact. The load-bearing points:

Not established — do not assume