diff --git a/arch/arm/boot/dts/overlays/Makefile b/arch/arm/boot/dts/overlays/Makefile
index f4696c04638c35..e32dd9dc89f19a 100644
--- a/arch/arm/boot/dts/overlays/Makefile
+++ b/arch/arm/boot/dts/overlays/Makefile
@@ -338,6 +338,7 @@ dtbo-$(CONFIG_ARCH_BCM2835) += \
vc4-kms-dpi-panel.dtbo \
vc4-kms-dsi-7inch.dtbo \
vc4-kms-dsi-generic.dtbo \
+ vc4-kms-dsi-ili79600-10-1inch.dtbo \
vc4-kms-dsi-ili9881-5inch.dtbo \
vc4-kms-dsi-ili9881-7inch.dtbo \
vc4-kms-dsi-lt070me05000.dtbo \
diff --git a/arch/arm/boot/dts/overlays/README b/arch/arm/boot/dts/overlays/README
index 8f4ae928987846..c88cdae247909b 100644
--- a/arch/arm/boot/dts/overlays/README
+++ b/arch/arm/boot/dts/overlays/README
@@ -5725,6 +5725,21 @@ Params: clock-frequency Display clock frequency (Hz)
Only supported on Pi5 and CM
+Name: vc4-kms-dsi-ili79600-10-1inch
+Info: Enable the Raspberry Pi 10" ILI79600 based touchscreen panel.
+ Requires vc4-kms-v3d to be loaded.
+Load: dtoverlay=vc4-kms-dsi-ili79600-10-1inch,
+Params: sizex Touchscreen size x (default 1200)
+ sizey Touchscreen size y (default 1920)
+ invx Touchscreen inverted x axis
+ invy Touchscreen inverted y axis
+ swapxy Touchscreen swapped x y axis
+ disable_touch Disables the touch screen overlay driver
+ rotation Display rotation {0,90,180,270} (default 0)
+ dsi0 Use DSI0 and i2c_csi_dsi0 (rather than
+ the default DSI1 and i2c_csi_dsi).
+
+
Name: vc4-kms-dsi-ili9881-5inch
Info: Enable the Raspberry Pi 5" ILI9881 based touchscreen panel.
Requires vc4-kms-v3d to be loaded.
diff --git a/arch/arm/boot/dts/overlays/vc4-kms-dsi-ili79600-10-1inch-overlay.dts b/arch/arm/boot/dts/overlays/vc4-kms-dsi-ili79600-10-1inch-overlay.dts
new file mode 100644
index 00000000000000..7aec9e59fcb878
--- /dev/null
+++ b/arch/arm/boot/dts/overlays/vc4-kms-dsi-ili79600-10-1inch-overlay.dts
@@ -0,0 +1,126 @@
+/*
+ * vc4-kms-dsi-ili79600-10-1inch-overlay.dts
+ */
+
+/dts-v1/;
+/plugin/;
+
+#include
+
+/ {
+ compatible = "brcm,bcm2835";
+
+ i2c_frag: fragment@0 {
+ target = <&i2c_csi_dsi>;
+ __overlay__ {
+ #address-cells = <1>;
+ #size-cells = <0>;
+ status = "okay";
+
+ display_mcu: display_mcu@45
+ {
+ compatible = "raspberrypi,v2-touchscreen-panel-regulator";
+ reg = <0x45>;
+ gpio-controller;
+ #gpio-cells = <2>;
+ };
+
+ touch: ts@41 {
+ compatible = "ilitek,ili79600a";
+ reg = <0x41>;
+
+ reset-gpio = <&display_mcu 1 GPIO_ACTIVE_LOW>;
+
+ touchscreen-size-x = < 1200 >;
+ touchscreen-size-y = < 1920 >;
+ vcc-supply = <&display_reg>;
+
+ panel = <&dsi_panel>;
+ };
+ };
+ };
+
+ dsi_frag: fragment@1 {
+ target = <&dsi1>;
+ __overlay__ {
+ #address-cells = <1>;
+ #size-cells = <0>;
+ status = "okay";
+
+ port {
+ dsi_out: endpoint {
+ remote-endpoint = <&panel_in>;
+ };
+ };
+
+ dsi_panel: dsi_panel@0 {
+ reg = <0>;
+ compatible = "raspberrypi,dsi-10-1inch";
+ power-supply = <&display_reg>;
+ backlight = <&display_mcu>;
+
+ port {
+ panel_in: endpoint {
+ remote-endpoint = <&dsi_out>;
+ };
+ };
+ };
+ };
+ };
+
+ fragment@2 {
+ target = <&i2c0if>;
+ __overlay__ {
+ status = "okay";
+ };
+ };
+
+ fragment@3 {
+ target = <&i2c0mux>;
+ __overlay__ {
+ status = "okay";
+ };
+ };
+
+ fragment@4 {
+ target-path = "/";
+ __overlay__ {
+ display_reg: display_reg@1 {
+ reg = <1>;
+ compatible = "regulator-fixed";
+ regulator-name = "display_reg_1";
+ gpio = <&display_mcu 0 GPIO_ACTIVE_HIGH>;
+ startup-delay-us = <50000>;
+ enable-active-high;
+ };
+ };
+ };
+
+ fragment@10 {
+ target = <&touch>;
+ __dormant__ {
+ touchscreen-inverted-x;
+ };
+ };
+
+ fragment@11 {
+ target = <&touch>;
+ __dormant__ {
+ touchscreen-inverted-y;
+ };
+ };
+
+ __overrides__ {
+ sizex = <&touch>,"touchscreen-size-x:0";
+ sizey = <&touch>,"touchscreen-size-y:0";
+ invx = <0>, "+10";
+ invy = <0>, "+11";
+ swapxy = <&touch>,"touchscreen-swapped-x-y?";
+ disable_touch = <&touch>, "status=disabled";
+ rotation = <&dsi_panel>, "rotation:0";
+ dsi0 = <&dsi_frag>, "target:0=",<&dsi0>,
+ <&i2c_frag>, "target:0=",<&i2c_csi_dsi0>,
+ <&display_reg>, "reg:0=0",
+ <&display_reg>, "regulator-name=display_reg_0";
+ };
+};
diff --git a/arch/arm64/configs/bcm2711_defconfig b/arch/arm64/configs/bcm2711_defconfig
index af192047b411be..80d0d8a9ec784f 100644
--- a/arch/arm64/configs/bcm2711_defconfig
+++ b/arch/arm64/configs/bcm2711_defconfig
@@ -709,6 +709,7 @@ CONFIG_TOUCHSCREEN_EXC3000=m
CONFIG_TOUCHSCREEN_GOODIX=m
CONFIG_TOUCHSCREEN_ILI210X=m
CONFIG_TOUCHSCREEN_ILITEK=m
+CONFIG_TOUCHSCREEN_ILITEK_V3=m
CONFIG_TOUCHSCREEN_EDT_FT5X06=m
CONFIG_TOUCHSCREEN_RASPBERRYPI_FW=m
CONFIG_TOUCHSCREEN_USB_COMPOSITE=m
@@ -1076,6 +1077,7 @@ CONFIG_DRM=m
CONFIG_DRM_LOAD_EDID_FIRMWARE=y
CONFIG_DRM_UDL=m
CONFIG_DRM_PANEL_LVDS=m
+CONFIG_DRM_PANEL_ILITEK_IL79600A=m
CONFIG_DRM_PANEL_ILITEK_ILI9806E=m
CONFIG_DRM_PANEL_ILITEK_ILI9806E_SPI=m
CONFIG_DRM_PANEL_ILITEK_ILI9881C=m
diff --git a/arch/arm64/configs/bcm2712_defconfig b/arch/arm64/configs/bcm2712_defconfig
index 91af35ccc0dcae..39874533c079d6 100644
--- a/arch/arm64/configs/bcm2712_defconfig
+++ b/arch/arm64/configs/bcm2712_defconfig
@@ -712,6 +712,7 @@ CONFIG_TOUCHSCREEN_EXC3000=m
CONFIG_TOUCHSCREEN_GOODIX=m
CONFIG_TOUCHSCREEN_ILI210X=m
CONFIG_TOUCHSCREEN_ILITEK=m
+CONFIG_TOUCHSCREEN_ILITEK_V3=m
CONFIG_TOUCHSCREEN_EDT_FT5X06=m
CONFIG_TOUCHSCREEN_RASPBERRYPI_FW=m
CONFIG_TOUCHSCREEN_USB_COMPOSITE=m
@@ -1078,6 +1079,7 @@ CONFIG_DRM=m
CONFIG_DRM_LOAD_EDID_FIRMWARE=y
CONFIG_DRM_UDL=m
CONFIG_DRM_PANEL_LVDS=m
+CONFIG_DRM_PANEL_ILITEK_IL79600A=m
CONFIG_DRM_PANEL_ILITEK_ILI9806E=m
CONFIG_DRM_PANEL_ILITEK_ILI9806E_SPI=m
CONFIG_DRM_PANEL_ILITEK_ILI9881C=m
diff --git a/drivers/gpu/drm/panel/Kconfig b/drivers/gpu/drm/panel/Kconfig
index 928b9f1bf7d52f..c093242c26a77a 100644
--- a/drivers/gpu/drm/panel/Kconfig
+++ b/drivers/gpu/drm/panel/Kconfig
@@ -185,6 +185,15 @@ config DRM_PANEL_HIMAX_HX8394
If M is selected the module will be called panel-himax-hx8394.
+config DRM_PANEL_ILITEK_IL79600A
+ tristate "Ilitek ILI79960A-based panels"
+ depends on OF
+ depends on DRM_MIPI_DSI
+ depends on BACKLIGHT_CLASS_DEVICE
+ help
+ Say Y if you want to enable support for panels based on the
+ Ilitek ILI79960A controller.
+
config DRM_PANEL_ILITEK_IL9322
tristate "Ilitek ILI9322 320x240 QVGA panels"
depends on OF && SPI
diff --git a/drivers/gpu/drm/panel/Makefile b/drivers/gpu/drm/panel/Makefile
index c13a08111d0c26..5760902b7a5581 100644
--- a/drivers/gpu/drm/panel/Makefile
+++ b/drivers/gpu/drm/panel/Makefile
@@ -19,6 +19,7 @@ obj-$(CONFIG_DRM_PANEL_FEIYANG_FY07024DI26A30D) += panel-feiyang-fy07024di26a30d
obj-$(CONFIG_DRM_PANEL_HIMAX_HX83102) += panel-himax-hx83102.o
obj-$(CONFIG_DRM_PANEL_HIMAX_HX83112A) += panel-himax-hx83112a.o
obj-$(CONFIG_DRM_PANEL_HIMAX_HX8394) += panel-himax-hx8394.o
+obj-$(CONFIG_DRM_PANEL_ILITEK_IL79600A) += panel-ilitek-ili79600a.o
obj-$(CONFIG_DRM_PANEL_ILITEK_IL9322) += panel-ilitek-ili9322.o
obj-$(CONFIG_DRM_PANEL_ILITEK_ILI9341) += panel-ilitek-ili9341.o
obj-$(CONFIG_DRM_PANEL_ILITEK_ILI9805) += panel-ilitek-ili9805.o
diff --git a/drivers/gpu/drm/panel/panel-ilitek-ili79600a.c b/drivers/gpu/drm/panel/panel-ilitek-ili79600a.c
new file mode 100644
index 00000000000000..b91ba5511284d7
--- /dev/null
+++ b/drivers/gpu/drm/panel/panel-ilitek-ili79600a.c
@@ -0,0 +1,467 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright (C) 2025, Raspberry Pi
+ */
+
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+#include
+#include
+
+#include
+#include
+#include
+
+#include