kernel: M4 VOP display driver ported to 6.18 — binds on hardware (connector WIP)
The RV1106 VOP is the RV-series "lite" VOP (rockchip,rv1106-vop, VOP_VERSION 2.0xc),
mainline's VOP1 driver. Its sibling rv1126 is already in 6.18, so rv1106_vop reuses
rv1126's register sub-structs + VOP_FEATURE_INTERNAL_RGB + the smaller raster.
Verified on warden-c8a3: with the driver delta + DT (vop enabled with named
"ahb"/"dclk" resets, vop_out repointed to a panel-dpi 720x720 node, pwm-backlight
on pwm1), the VOP BINDS and DRM initialises (/dev/dri/card0), and the PWM backlight
comes up. The register data / version / feature / resets are validated.
Open: /sys/class/drm/card0 has no connector yet — rockchip_rgb_init isn't producing
one ("Cannot find any crtc"). Last mile of M4; needs a debug print in rgb_init + the
panel bus_format, and the pixels must be verified on the physical panel (can't be
checked over serial/ssh). Full recipe + next steps in display/README.md.
Also batch-2 config: GPIO_SYSFS, PWM_ROCKCHIP, crypto (aes/ccm/ctr/arc4), CFG80211,
DRM_ROCKCHIP/ROCKCHIP_VOP all =y; PSCI-style SMC removed via the psci-node deletion.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017wB8KB3MMQztRDXCMCkPrf
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
79ef2df67a
commit
5abf1c4468
@@ -59,3 +59,72 @@
|
||||
&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";
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user