diff --git a/arch/arm/boot/dts/overlays/Makefile b/arch/arm/boot/dts/overlays/Makefile
index 10f2efe916f2e9..657994cbbf3020 100644
--- a/arch/arm/boot/dts/overlays/Makefile
+++ b/arch/arm/boot/dts/overlays/Makefile
@@ -334,6 +334,7 @@ dtbo-$(CONFIG_ARCH_BCM2835) += \
vc4-kms-dsi-lt070me05000-v2.dtbo \
vc4-kms-dsi-waveshare-800x480.dtbo \
vc4-kms-dsi-waveshare-panel.dtbo \
+ vc4-kms-dsi-waveshare-panel-v2.dtbo \
vc4-kms-kippah-7inch.dtbo \
vc4-kms-v3d.dtbo \
vc4-kms-v3d-pi4.dtbo \
diff --git a/arch/arm/boot/dts/overlays/README b/arch/arm/boot/dts/overlays/README
index 12e4a974937dfb..d1759512a76176 100644
--- a/arch/arm/boot/dts/overlays/README
+++ b/arch/arm/boot/dts/overlays/README
@@ -5518,6 +5518,26 @@ Params: 2_8_inch 2.8" 480x640
the default DSI1 and i2c_csi_dsi).
+Name: vc4-kms-dsi-waveshare-panel-v2
+Info: Enable the Waveshare DSI-TOUCH series screen
+ Requires vc4-kms-v3d to be loaded.
+Load: dtoverlay=vc4-kms-dsi-waveshare-panel-v2,
+Params: 5_0_inch_a 5.0" 720x1280 2lane
+ 5_5_inch_a 5.5" 720x1280 2lane
+ 7_0_inch_a 7.0" A 720x1280 2lane
+ 7_0_inch_b 7.0" B 720x1280 2lane
+ 8_0_inch_a 8.0" 800x1280 2lane
+ 8_0_inch_a_4lane 8.0" 800x1280 4lane
+ 10_1_inch_a 10.1" 800x1280 2lane
+ 10_1_inch_a_4lane 10.1" 800x1280 4lane
+ disable_touch Disable the touch controller
+ invx Touchscreen inverted x axis
+ invy Touchscreen inverted y axis
+ swapxy Touchscreen swapped x y axis
+ dsi0 Use DSI0 and i2c_csi_dsi0 (rather than
+ the default DSI1 and i2c_csi_dsi).
+
+
Name: vc4-kms-kippah-7inch
Info: This overlay is now deprecated - see vc4-kms-dpi-panel,kippah-7inch
Load:
diff --git a/arch/arm/boot/dts/overlays/vc4-kms-dsi-waveshare-panel-v2-overlay.dts b/arch/arm/boot/dts/overlays/vc4-kms-dsi-waveshare-panel-v2-overlay.dts
new file mode 100644
index 00000000000000..dd983ab59eeb51
--- /dev/null
+++ b/arch/arm/boot/dts/overlays/vc4-kms-dsi-waveshare-panel-v2-overlay.dts
@@ -0,0 +1,94 @@
+/*
+ * vc4-kms-dsi-waveshare-panel-v2-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 = "waveshare,touchscreen-panel-regulator";
+ reg = <0x45>;
+ gpio-controller;
+ #gpio-cells = <2>;
+ enable-gpio = <&display_mcu 2 GPIO_ACTIVE_HIGH>;
+ };
+
+ touch: goodix@5d {
+ compatible = "goodix,gt9271";
+ reg = <0x5d>;
+ reset-gpio = <&display_mcu 9 GPIO_ACTIVE_HIGH>;
+ };
+ };
+ };
+
+ 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 = "waveshare,10.1-dsi-touch-a";
+ reset-gpio = <&display_mcu 1 GPIO_ACTIVE_HIGH>;
+ 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";
+ };
+ };
+
+ __overrides__ {
+ 5_0_inch_a = <&dsi_panel>, "compatible=waveshare,5.0-dsi-touch-a";
+ 5_5_inch_a = <&dsi_panel>, "compatible=waveshare,5.5-dsi-touch-a";
+ 7_0_inch_a = <&dsi_panel>, "compatible=waveshare,7.0-dsi-touch-a";
+ 7_0_inch_b = <&dsi_panel>, "compatible=waveshare,7.0-dsi-touch-b";
+ 8_0_inch_a = <&dsi_panel>, "compatible=waveshare,8.0-dsi-touch-a";
+ 8_0_inch_a_4lane = <&dsi_panel>, "compatible=waveshare,8.0-dsi-touch-a-4lane";
+ 10_1_inch_a = <&dsi_panel>, "compatible=waveshare,10.1-dsi-touch-a";
+ 10_1_inch_a_4lane = <&dsi_panel>, "compatible=waveshare,10.1-dsi-touch-a-4lane";
+ disable_touch = <&touch>, "status=disabled";
+ invx = <&touch>,"touchscreen-inverted-x?";
+ invy = <&touch>,"touchscreen-inverted-y?";
+ swapxy = <&touch>,"touchscreen-swapped-x-y?";
+ dsi0 = <&dsi_frag>, "target:0=",<&dsi0>,
+ <&i2c_frag>, "target:0=",<&i2c_csi_dsi0>;
+ };
+};
diff --git a/arch/arm/configs/bcm2709_defconfig b/arch/arm/configs/bcm2709_defconfig
index 0c2f60e19a539f..e6845b92dfefd6 100644
--- a/arch/arm/configs/bcm2709_defconfig
+++ b/arch/arm/configs/bcm2709_defconfig
@@ -772,6 +772,7 @@ CONFIG_REGULATOR_ARIZONA_LDO1=m
CONFIG_REGULATOR_ARIZONA_MICSUPP=m
CONFIG_REGULATOR_RASPBERRYPI_TOUCHSCREEN_ATTINY=m
CONFIG_REGULATOR_RASPBERRYPI_TOUCHSCREEN_V2=m
+CONFIG_REGULATOR_WAVESHARE_TOUCHSCREEN=m
CONFIG_RC_CORE=y
CONFIG_BPF_LIRC_MODE2=y
CONFIG_LIRC=y
@@ -978,6 +979,7 @@ CONFIG_DRM_PANEL_SITRONIX_ST7701=m
CONFIG_DRM_PANEL_SIMPLE=m
CONFIG_DRM_PANEL_TPO_Y17P=m
CONFIG_DRM_PANEL_WAVESHARE_TOUCHSCREEN=m
+CONFIG_DRM_PANEL_WAVESHARE_TOUCHSCREEN_V2=m
CONFIG_DRM_DISPLAY_CONNECTOR=m
CONFIG_DRM_SIMPLE_BRIDGE=m
CONFIG_DRM_TOSHIBA_TC358762=m
diff --git a/arch/arm/configs/bcm2711_defconfig b/arch/arm/configs/bcm2711_defconfig
index c0b3f55d25e1b4..f79e438bd76c80 100644
--- a/arch/arm/configs/bcm2711_defconfig
+++ b/arch/arm/configs/bcm2711_defconfig
@@ -798,6 +798,7 @@ CONFIG_REGULATOR_ARIZONA_MICSUPP=m
CONFIG_REGULATOR_GPIO=y
CONFIG_REGULATOR_RASPBERRYPI_TOUCHSCREEN_ATTINY=m
CONFIG_REGULATOR_RASPBERRYPI_TOUCHSCREEN_V2=m
+CONFIG_REGULATOR_WAVESHARE_TOUCHSCREEN=m
CONFIG_RC_CORE=y
CONFIG_BPF_LIRC_MODE2=y
CONFIG_LIRC=y
@@ -1007,6 +1008,7 @@ CONFIG_DRM_PANEL_SITRONIX_ST7701=m
CONFIG_DRM_PANEL_SIMPLE=m
CONFIG_DRM_PANEL_TPO_Y17P=m
CONFIG_DRM_PANEL_WAVESHARE_TOUCHSCREEN=m
+CONFIG_DRM_PANEL_WAVESHARE_TOUCHSCREEN_V2=m
CONFIG_DRM_DISPLAY_CONNECTOR=m
CONFIG_DRM_SIMPLE_BRIDGE=m
CONFIG_DRM_TOSHIBA_TC358762=m
diff --git a/arch/arm/configs/bcmrpi_defconfig b/arch/arm/configs/bcmrpi_defconfig
index fa234a7e0744c4..8cb1c695166712 100644
--- a/arch/arm/configs/bcmrpi_defconfig
+++ b/arch/arm/configs/bcmrpi_defconfig
@@ -765,6 +765,7 @@ CONFIG_REGULATOR_ARIZONA_LDO1=m
CONFIG_REGULATOR_ARIZONA_MICSUPP=m
CONFIG_REGULATOR_RASPBERRYPI_TOUCHSCREEN_ATTINY=m
CONFIG_REGULATOR_RASPBERRYPI_TOUCHSCREEN_V2=m
+CONFIG_REGULATOR_WAVESHARE_TOUCHSCREEN=m
CONFIG_RC_CORE=y
CONFIG_BPF_LIRC_MODE2=y
CONFIG_LIRC=y
@@ -971,6 +972,7 @@ CONFIG_DRM_PANEL_SITRONIX_ST7701=m
CONFIG_DRM_PANEL_SIMPLE=m
CONFIG_DRM_PANEL_TPO_Y17P=m
CONFIG_DRM_PANEL_WAVESHARE_TOUCHSCREEN=m
+CONFIG_DRM_PANEL_WAVESHARE_TOUCHSCREEN_V2=m
CONFIG_DRM_DISPLAY_CONNECTOR=m
CONFIG_DRM_SIMPLE_BRIDGE=m
CONFIG_DRM_TOSHIBA_TC358762=m
diff --git a/arch/arm64/configs/bcm2711_defconfig b/arch/arm64/configs/bcm2711_defconfig
index b622d423176171..8e622c64282dd4 100644
--- a/arch/arm64/configs/bcm2711_defconfig
+++ b/arch/arm64/configs/bcm2711_defconfig
@@ -840,6 +840,7 @@ CONFIG_REGULATOR_ARIZONA_MICSUPP=m
CONFIG_REGULATOR_GPIO=y
CONFIG_REGULATOR_RASPBERRYPI_TOUCHSCREEN_ATTINY=m
CONFIG_REGULATOR_RASPBERRYPI_TOUCHSCREEN_V2=m
+CONFIG_REGULATOR_WAVESHARE_TOUCHSCREEN=m
CONFIG_RC_CORE=y
CONFIG_BPF_LIRC_MODE2=y
CONFIG_LIRC=y
@@ -1056,6 +1057,7 @@ CONFIG_DRM_PANEL_SITRONIX_ST7701=m
CONFIG_DRM_PANEL_SIMPLE=m
CONFIG_DRM_PANEL_TPO_Y17P=m
CONFIG_DRM_PANEL_WAVESHARE_TOUCHSCREEN=m
+CONFIG_DRM_PANEL_WAVESHARE_TOUCHSCREEN_V2=m
CONFIG_DRM_DISPLAY_CONNECTOR=m
CONFIG_DRM_SIMPLE_BRIDGE=m
CONFIG_DRM_TOSHIBA_TC358762=m
diff --git a/arch/arm64/configs/bcm2711_rt_defconfig b/arch/arm64/configs/bcm2711_rt_defconfig
index b81c391668a10a..5b742546e07e99 100644
--- a/arch/arm64/configs/bcm2711_rt_defconfig
+++ b/arch/arm64/configs/bcm2711_rt_defconfig
@@ -840,6 +840,7 @@ CONFIG_REGULATOR_ARIZONA_MICSUPP=m
CONFIG_REGULATOR_GPIO=y
CONFIG_REGULATOR_RASPBERRYPI_TOUCHSCREEN_ATTINY=m
CONFIG_REGULATOR_RASPBERRYPI_TOUCHSCREEN_V2=m
+CONFIG_REGULATOR_WAVESHARE_TOUCHSCREEN=m
CONFIG_RC_CORE=y
CONFIG_BPF_LIRC_MODE2=y
CONFIG_LIRC=y
@@ -1056,6 +1057,7 @@ CONFIG_DRM_PANEL_SITRONIX_ST7701=m
CONFIG_DRM_PANEL_SIMPLE=m
CONFIG_DRM_PANEL_TPO_Y17P=m
CONFIG_DRM_PANEL_WAVESHARE_TOUCHSCREEN=m
+CONFIG_DRM_PANEL_WAVESHARE_TOUCHSCREEN_V2=m
CONFIG_DRM_DISPLAY_CONNECTOR=m
CONFIG_DRM_SIMPLE_BRIDGE=m
CONFIG_DRM_TOSHIBA_TC358762=m
diff --git a/arch/arm64/configs/bcm2712_defconfig b/arch/arm64/configs/bcm2712_defconfig
index 090ce6fa1b0a23..7612e1063d992a 100644
--- a/arch/arm64/configs/bcm2712_defconfig
+++ b/arch/arm64/configs/bcm2712_defconfig
@@ -842,6 +842,7 @@ CONFIG_REGULATOR_ARIZONA_MICSUPP=m
CONFIG_REGULATOR_GPIO=y
CONFIG_REGULATOR_RASPBERRYPI_TOUCHSCREEN_ATTINY=m
CONFIG_REGULATOR_RASPBERRYPI_TOUCHSCREEN_V2=m
+CONFIG_REGULATOR_WAVESHARE_TOUCHSCREEN=m
CONFIG_RC_CORE=y
CONFIG_BPF_LIRC_MODE2=y
CONFIG_LIRC=y
@@ -1058,6 +1059,7 @@ CONFIG_DRM_PANEL_SITRONIX_ST7701=m
CONFIG_DRM_PANEL_SIMPLE=m
CONFIG_DRM_PANEL_TPO_Y17P=m
CONFIG_DRM_PANEL_WAVESHARE_TOUCHSCREEN=m
+CONFIG_DRM_PANEL_WAVESHARE_TOUCHSCREEN_V2=m
CONFIG_DRM_DISPLAY_CONNECTOR=m
CONFIG_DRM_SIMPLE_BRIDGE=m
CONFIG_DRM_TOSHIBA_TC358762=m
diff --git a/drivers/gpu/drm/panel/Kconfig b/drivers/gpu/drm/panel/Kconfig
index c0239dcc18361e..928b9f1bf7d52f 100644
--- a/drivers/gpu/drm/panel/Kconfig
+++ b/drivers/gpu/drm/panel/Kconfig
@@ -1001,6 +1001,16 @@ config DRM_PANEL_WAVESHARE_TOUCHSCREEN
DSI Touchscreens. To compile this driver as a module,
choose M here.
+config DRM_PANEL_WAVESHARE_TOUCHSCREEN_V2
+ tristate "Waveshare touchscreen panels V2"
+ depends on DRM_MIPI_DSI
+ depends on I2C
+ depends on BACKLIGHT_CLASS_DEVICE
+ help
+ Say Y here if you want to enable support for the Waveshare
+ DSI Touchscreens. To compile this driver as a module,
+ choose M here.
+
config DRM_PANEL_WIDECHIPS_WS2401
tristate "Widechips WS2401 DPI panel driver"
depends on SPI && GPIOLIB
diff --git a/drivers/gpu/drm/panel/Makefile b/drivers/gpu/drm/panel/Makefile
index 5bd7c11bd287fc..c13a08111d0c26 100644
--- a/drivers/gpu/drm/panel/Makefile
+++ b/drivers/gpu/drm/panel/Makefile
@@ -101,5 +101,6 @@ obj-$(CONFIG_DRM_PANEL_VISIONOX_RM69299) += panel-visionox-rm69299.o
obj-$(CONFIG_DRM_PANEL_VISIONOX_VTDR6130) += panel-visionox-vtdr6130.o
obj-$(CONFIG_DRM_PANEL_VISIONOX_R66451) += panel-visionox-r66451.o
obj-$(CONFIG_DRM_PANEL_WAVESHARE_TOUCHSCREEN) += panel-waveshare-dsi.o
+obj-$(CONFIG_DRM_PANEL_WAVESHARE_TOUCHSCREEN_V2) += panel-waveshare-dsi-v2.o
obj-$(CONFIG_DRM_PANEL_WIDECHIPS_WS2401) += panel-widechips-ws2401.o
obj-$(CONFIG_DRM_PANEL_XINPENG_XPP055C272) += panel-xinpeng-xpp055c272.o
diff --git a/drivers/gpu/drm/panel/panel-waveshare-dsi-v2.c b/drivers/gpu/drm/panel/panel-waveshare-dsi-v2.c
new file mode 100644
index 00000000000000..dea949752f891c
--- /dev/null
+++ b/drivers/gpu/drm/panel/panel-waveshare-dsi-v2.c
@@ -0,0 +1,1312 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright (C) 2024 Waveshare International Limited
+ *
+ * Based on panel-raspberrypi-touchscreen by Broadcom
+ */
+
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+#include
+#include
+
+#include
+#include
+#include
+
+#include