Standardmässig ist der Composite Ausgang des Rock64 nicht aktiviert. Er lässt sich jedoch mit wenigen Handgriffen aktivieren. Ich habe dazu eine eigene DTS-Datei erstellt, da ich noch mehr Änderungen gemacht habe.

Also, erstmal:

root@debian:/usr/src/rockchip# cd arch/arm64/boot/dts/rockchip/
root@debian:/usr/src/rockchip/arch/arm64/boot/dts/rockchip# cp rk3328-rock64.dts rk3328-rock64-bmw.dts
root@debian:/usr/src/rockchip/arch/arm64/boot/dts/rockchip# vi rk3328-rock64_bmw.dts

Zuerst werden zwei Speicherbereiche reserviert, hier kommen die Bootlogos rein:

reserved-memory {
	#address-cells = <2>;
	#size-cells = <2>;
	ranges;

	drm_logo: drm-logo@00000000 {
		compatible = "rockchip,drm-logo";
		reg = <0x0 0x0 0x0 0x0>;
	};

	secure_memory: secure-memory@20000000 {
		compatible = "rockchip,secure-memory";
		reg = <0x0 0x20000000 0x0 0x0>;
		
	};
};

Dann fügt man direkt nach &usbdrd_dwc3 folgenden Block ein:

&tve {
	rockchip,tvemode = <0>;
	status = "okay";
};

Mit rockckchip,tvemode = <0>; kann man noch den Mode für den Ausgang setzen. 0 bedeutet PAL und 1 wäre NTSC.

Ich habe es vor &vop eingefügt, so sieht es dann bei mir aus:

&usbdrd_dwc3 {
	status = "okay";
};

&tve {
	rockchip,tvemode = <0>;
	status = "okay";
};

&vop {
	status = "okay";
};

&vop_mmu {
	status = "okay";
};

&vpu_service {
	status = "okay";
};

&vpu_mmu {
	status = "okay";
};

&vepu {
	status = "okay";
};

&vepu_mmu {
	status = "okay";
};

&venc_srv {
	status = "okay";
};

Damit aktiviert man den tve-Ausgang überhaupt erstmal. Das System weißt aber nicht, was damit anzufangen ist, das reicht jedoch bei weitem nicht aus um den Ausgang zu verwenden. Denn, jetzt muss noch bekannt gemacht werden, wie die Signale geroutet werden sollen. Dazu sucht man in der Datei nach "display-subsystem", in meinem Fall sieht es so aus:

&display_subsystem {
	status = "okay";
};

Für HDMI absolut ausreichend, für HDMI und CVBS viel zu wenig...

Nach der Anpassung sollte es so aussehen:

&display_subsystem {
	logo-memory-region = <&drm_logo>;
	status = "okay";
	secure_memory_region = <&secure_memory>;
	ports = <&vop_out>;

	route {
		route_hdmi: route-hdmi {
			status = "okay";
			logo,uboot = "logo.bmp";
			logo,kernel = "logo_kernel.bmp";
			logo,mode = "fullscreen";
			connect = <&vop_out_hdmi>;
		};

		route_tve: route-tve {
			status = "okay";
			logo,uboot = "logo.bmp";
			logo,kernel = "logo_kernel.bmp";
			logo,mode = "fullscreen";
			connect = <&vop_out_tve>;
		};
	};
};

Damit sagt man dem Kernel, dass er die Signale nicht nur auf HDMI ausgeben soll, sondern auch an CVBS schicken soll.

Als nächstes fügt man die neuerstellte DTS-Datei zum Makefile hinzu, hier einfach vi Makefile, dann den bestehenden Eintrag duplizieren und den Dateinamen anpassen.

Danach noch mit

make dtbs

kompilieren und dtb-Datei an die richtige Stelle kopieren und neustarten.

Um zu sehen, dass der Kernel den Ausgang tatsächlich erkannt hat, macht man ein

root@rock64:~# tree /sys/class/drm/

und erhofft das hier zu sehen:

/sys/class/drm/
|-- card0 -> ../../devices/platform/display-subsystem/drm/card0
|-- card0-HDMI-A-1 -> ../../devices/platform/display-subsystem/drm/card0/card0-HDMI-A-1
|-- card0-TV-1 -> ../../devices/platform/display-subsystem/drm/card0/card0-TV-1
|-- controlD64 -> ../../devices/platform/display-subsystem/drm/controlD64
|-- renderD128 -> ../../devices/platform/display-subsystem/drm/renderD128
`-- version

5 directories, 1 file

In der Zeile 4 sieht man den gefundenen CVBS Ausgang.

Und noch weitere Tests:

root@rock64:# cat /sys/class/drm/card0-TV-1/status
connected
root@rock64:# cat /sys/class/drm/card0-TV-1/modes
720x576i50
720x480i60
root@rock64:# cat /sys/class/drm/card0-TV-1/mode
720x576i50
root@rock64:#