Driver built into self-built 6.18 (=y): zImage 12.7MB + rv1106-warden.dtb build clean; System.map confirms aicbsp_sdio_driver, aicwf_sdio_driver, rwnx_cfg80211_ops linked with correct bsp->fdrv->btlpm initcall order (host nm/System.map — cross-nm/ar mis-list these, verify with System.map). Recipe captured (driver .c is vendor GPL source in the SDK, not duplicated): - kbuild/ — from-scratch in-tree Kconfig + Makefiles (bsp->fdrv->btlpm link order; tristate->default y; AIC_FW_PATH as a real Kconfig string symbol). - wifi-dt-block.dtsi — sdio_pwrseq (mmc-pwrseq-simple, reset gpio1 PA2) + &sdmmc (mmc@ffaa0000, supports-sdio, cap-sdio-irq, non-removable). - PORT-PROGRESS.md — full file->change log: ~30 timer/netdev renames, 7 cfg80211_ops signature deltas, link_id args, wakeup_source API rewrite, 49 bsp/fdrv symbol collisions renamed aicbsp_priv_*, rwnx_mesh restore. Firmware present on both oem_a+oem_b (/oem/usr/ko/aic8800dc_fw); on-hardware wlan0 verify next. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017wB8KB3MMQztRDXCMCkPrf
190 lines
3.6 KiB
Devicetree
190 lines
3.6 KiB
Devicetree
// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
|
|
/*
|
|
* WardenOS 86-Panel board DT for the self-built Linux 6.18 forward-port.
|
|
*
|
|
* Includes the full vendor rv1106.dtsi (SoC nodes + pinctrl + gpio + dmac), then
|
|
* enables only what our wall-HMI needs — no camera/ISP/CSI. Grows one driver
|
|
* batch at a time toward full parity with the 5.10 kernel (DRIVER-PARITY.md).
|
|
*/
|
|
/dts-v1/;
|
|
|
|
#include "rv1106.dtsi"
|
|
|
|
/ {
|
|
model = "WardenOS 86-Panel (RV1106)";
|
|
compatible = "rockchip,rv1106-warden", "rockchip,rv1106";
|
|
|
|
chosen {
|
|
stdout-path = "serial2:115200n8";
|
|
bootargs = "earlycon=uart8250,mmio32,0xff4c0000 console=ttyS2,115200n8 earlyprintk rootwait";
|
|
};
|
|
|
|
memory@0 {
|
|
device_type = "memory";
|
|
reg = <0x00000000 0x10000000>; /* 256 MiB */
|
|
};
|
|
|
|
/* --- M5: AIC8800DC wifi/BT power sequencing --- */
|
|
sdio_pwrseq: sdio-pwrseq {
|
|
compatible = "mmc-pwrseq-simple";
|
|
pinctrl-names = "default";
|
|
reset-gpios = <&gpio1 RK_PA2 GPIO_ACTIVE_LOW>;
|
|
};
|
|
};
|
|
|
|
/* --- console --- */
|
|
&uart2 {
|
|
status = "okay";
|
|
};
|
|
|
|
/* --- eMMC rootfs (M3) --- */
|
|
&emmc {
|
|
bus-width = <8>;
|
|
cap-mmc-highspeed;
|
|
mmc-hs200-1_8v;
|
|
non-removable;
|
|
status = "okay";
|
|
};
|
|
|
|
/* --- M5: AIC8800DC wifi/BT SDIO (on &sdmmc, mmc@ffaa0000 — NOT &sdio) --- */
|
|
&sdmmc {
|
|
max-frequency = <50000000>;
|
|
bus-width = <4>;
|
|
cap-sd-highspeed;
|
|
cap-sdio-irq;
|
|
keep-power-in-suspend;
|
|
non-removable;
|
|
rockchip,default-sample-phase = <90>;
|
|
supports-sdio;
|
|
mmc-pwrseq = <&sdio_pwrseq>;
|
|
pinctrl-names = "default";
|
|
pinctrl-0 = <&sdmmc0_clk &sdmmc0_cmd &sdmmc0_bus4 &sdmmc0_det>;
|
|
status = "okay";
|
|
};
|
|
|
|
/* --- batch 1: mainline peripherals (wire DT + config) --- */
|
|
&uart1 {
|
|
status = "okay";
|
|
};
|
|
|
|
&uart4 {
|
|
status = "okay";
|
|
};
|
|
|
|
&i2c3 {
|
|
status = "okay";
|
|
};
|
|
|
|
&saradc {
|
|
status = "okay";
|
|
};
|
|
|
|
&wdt {
|
|
status = "okay";
|
|
};
|
|
|
|
/* --- M4: display (VOP + RGB → 720x720 panel + PWM backlight) --- */
|
|
&display_subsystem {
|
|
status = "okay";
|
|
};
|
|
|
|
&vop {
|
|
status = "okay";
|
|
/* mainline rockchip_drm_vop requests named "ahb" + "dclk" resets that the
|
|
* vendor node omits; without them vop_bind fails "failed to get ahb reset". */
|
|
resets = <&cru SRST_H_VOP>, <&cru SRST_D_VOP>;
|
|
reset-names = "ahb", "dclk";
|
|
};
|
|
|
|
/* mainline wires vop_out straight to the panel (no separate rgb node) */
|
|
&vop_out_rgb {
|
|
remote-endpoint = <&panel_in_vop>;
|
|
};
|
|
|
|
&pwm1 {
|
|
status = "okay";
|
|
pinctrl-names = "active";
|
|
pinctrl-0 = <&pwm1m2_pins>;
|
|
};
|
|
|
|
/ {
|
|
backlight: backlight {
|
|
compatible = "pwm-backlight";
|
|
pwms = <&pwm1 0 100000 50000>;
|
|
brightness-levels = <0 32 64 96 128 160 192 224 255>;
|
|
default-brightness-level = <8>;
|
|
status = "okay";
|
|
};
|
|
|
|
panel: panel {
|
|
compatible = "panel-dpi";
|
|
backlight = <&backlight>;
|
|
width-mm = <85>;
|
|
height-mm = <85>;
|
|
|
|
panel-timing {
|
|
clock-frequency = <30000000>;
|
|
hactive = <720>;
|
|
vactive = <720>;
|
|
hback-porch = <44>;
|
|
hfront-porch = <46>;
|
|
vback-porch = <18>;
|
|
vfront-porch = <16>;
|
|
hsync-len = <2>;
|
|
vsync-len = <2>;
|
|
hsync-active = <0>;
|
|
vsync-active = <0>;
|
|
de-active = <0>;
|
|
pixelclk-active = <0>;
|
|
};
|
|
|
|
port {
|
|
panel_in_vop: endpoint {
|
|
remote-endpoint = <&vop_out_rgb>;
|
|
};
|
|
};
|
|
};
|
|
};
|
|
|
|
/* the vendor rgb bridge node has no 6.18 driver and its dangling endpoint
|
|
* corrupts the vop->panel of_graph; disable it so the graph is clean. */
|
|
&rgb {
|
|
status = "disabled";
|
|
};
|
|
|
|
/* --- sweep: USB OTG (eth0 gadget / host) via the ported inno-usb2 phy --- */
|
|
&u2phy {
|
|
status = "okay";
|
|
};
|
|
|
|
&u2phy_otg {
|
|
status = "okay";
|
|
};
|
|
|
|
&usbdrd {
|
|
status = "okay";
|
|
};
|
|
|
|
&usbdrd_dwc3 {
|
|
status = "okay";
|
|
dr_mode = "otg";
|
|
};
|
|
|
|
/* --- sweep: RTC + thermal (tsadc) + I2S audio DAI --- */
|
|
&rtc {
|
|
status = "okay";
|
|
};
|
|
|
|
&tsadc {
|
|
status = "okay";
|
|
};
|
|
|
|
&i2s0_8ch {
|
|
status = "okay";
|
|
};
|
|
|
|
|
|
&rga2 {
|
|
status = "okay";
|
|
};
|