diff --git a/arch/arm/boot/dts/overlays/Makefile b/arch/arm/boot/dts/overlays/Makefile
index 56c93053f5979b..398c8d65de1940 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 b673ddf74565b4..a52af8dd618203 100644
--- a/arch/arm/boot/dts/overlays/README
+++ b/arch/arm/boot/dts/overlays/README
@@ -5731,6 +5731,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 d08c0795b3cec6..1920a748d17841 100644
--- a/arch/arm64/configs/bcm2711_defconfig
+++ b/arch/arm64/configs/bcm2711_defconfig
@@ -700,6 +700,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
@@ -1070,6 +1071,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 0c0771cfbb3a9b..50c328e3bdfd3c 100644
--- a/arch/arm64/configs/bcm2712_defconfig
+++ b/arch/arm64/configs/bcm2712_defconfig
@@ -703,6 +703,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
@@ -1072,6 +1073,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 ce422834e2138a..edaaf7eb2f0948 100644
--- a/drivers/gpu/drm/panel/Kconfig
+++ b/drivers/gpu/drm/panel/Kconfig
@@ -228,6 +228,15 @@ config DRM_PANEL_HYDIS_HV101HD1
If M is selected the module will be called panel-hydis-hv101hd1
+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 da8f5161268346..19871edb64366a 100644
--- a/drivers/gpu/drm/panel/Makefile
+++ b/drivers/gpu/drm/panel/Makefile
@@ -23,6 +23,7 @@ obj-$(CONFIG_DRM_PANEL_HIMAX_HX83112A) += panel-himax-hx83112a.o
obj-$(CONFIG_DRM_PANEL_HIMAX_HX83112B) += panel-himax-hx83112b.o
obj-$(CONFIG_DRM_PANEL_HIMAX_HX8394) += panel-himax-hx8394.o
obj-$(CONFIG_DRM_PANEL_HYDIS_HV101HD1) += panel-hydis-hv101hd1.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