diff --git a/arch/arm/boot/dts/overlays/Makefile b/arch/arm/boot/dts/overlays/Makefile
index 1df451bb418d31a432958a7c8ab4d8c3197055ad..52f62bdeb993de044fed9bf9f713e685ac6b25d3 100644
--- a/arch/arm/boot/dts/overlays/Makefile
+++ b/arch/arm/boot/dts/overlays/Makefile
@@ -211,6 +211,7 @@ dtbo-$(CONFIG_ARCH_BCM2835) += \
vc4-kms-kippah-7inch.dtbo \
vc4-kms-v3d.dtbo \
vc4-kms-v3d-pi4.dtbo \
+ vc4-kms-vga666.dtbo \
vga666.dtbo \
w1-gpio.dtbo \
w1-gpio-pullup.dtbo \
diff --git a/arch/arm/boot/dts/overlays/README b/arch/arm/boot/dts/overlays/README
index 6a0b874730d862c7b8e83de337d3be86ce1d1e28..090e7c107986a3affd2f723b99fd348131a38b5e 100644
--- a/arch/arm/boot/dts/overlays/README
+++ b/arch/arm/boot/dts/overlays/README
@@ -3120,10 +3120,20 @@ Params: cma-512 CMA is 512MB
outputs)
+Name: vc4-kms-vga666
+Info: Enable the VGA666 (resistor ladder ADC) for the vc4-kms-v3d driver.
+ Requires vc4-kms-v3d to be loaded.
+Load: dtoverlay=vc4-kms-vga666,
+Params: ddc Enables GPIOs 0&1 as the I2C to read the EDID
+ from the display. NB These are NOT 5V tolerant
+ GPIOs, therefore level shifters are required.
+
+
Name: vga666
Info: Overlay for the Fen Logic VGA666 board
This uses GPIOs 2-21 (so no I2C), and activates the output 2-3 seconds
after the kernel has started.
+ NOT for use with vc4-kms-v3d.
Load: dtoverlay=vga666
Params:
diff --git a/arch/arm/boot/dts/overlays/vc4-kms-vga666-overlay.dts b/arch/arm/boot/dts/overlays/vc4-kms-vga666-overlay.dts
new file mode 100644
index 0000000000000000000000000000000000000000..6e787099e861640c1e7fbca6a24a5081bf69cf7b
--- /dev/null
+++ b/arch/arm/boot/dts/overlays/vc4-kms-vga666-overlay.dts
@@ -0,0 +1,100 @@
+/*
+ * vc4-kms-vga666-overlay.dts
+ * Configures a FenLogic or similar VGA666 DPI adapter when using the
+ * vc4-kms-v3d driver.
+ * If a suitable I2C level shifter is connected to GPIOs 0&1 and the VGA
+ * ID1/SDA (pin 12) and ID3/SCL (pin 15) lines, then there is the option to
+ * enable reading the EDID from the display.
+ */
+
+/dts-v1/;
+/plugin/;
+
+#include
+
+/ {
+ compatible = "brcm,bcm2835";
+
+ fragment@0 {
+ target-path = "/";
+ __overlay__ {
+ vga_connector: vga_connector {
+ compatible = "vga-connector";
+ label = "vga";
+
+ port {
+ vga_con_in: endpoint {
+ remote-endpoint = <&vga666_out>;
+ };
+ };
+ };
+
+ vga_dac {
+ compatible = "dumb-vga-dac";
+
+ ports {
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ port@0 {
+ reg = <0>;
+
+ vga666_in: endpoint {
+ remote-endpoint = <&dpi_out>;
+ };
+ };
+
+ port@1 {
+ reg = <1>;
+
+ vga666_out: endpoint {
+ remote-endpoint = <&vga_con_in>;
+ };
+ };
+ };
+ };
+
+ };
+ };
+
+ fragment@1 {
+ target = <&dpi>;
+ __overlay__ {
+ status = "okay";
+
+ pinctrl-names = "default";
+ pinctrl-0 = <&dpi_18bit_gpio2>;
+
+ port {
+ dpi_out: endpoint@0 {
+ remote-endpoint = <&vga666_in>;
+ };
+ };
+ };
+ };
+
+ fragment@2 {
+ target = <&vga_connector>;
+ __dormant__ {
+ ddc-i2c-bus = <&i2c_vc>;
+ };
+ };
+
+ fragment@3 {
+ target = <&i2c0if>;
+ __dormant__ {
+ status = "okay";
+ };
+ };
+
+ fragment@4 {
+ target = <&i2c0mux>;
+ __dormant__ {
+ status = "okay";
+ };
+ };
+
+ __overrides__ {
+ ddc = <0>,"=2", <0>,"=3", <0>,"=4";
+ };
+};