* [PATCH 0/4] drm/panel: simple: add Waveshare LCD panels
@ 2026-03-30 13:25 Dmitry Baryshkov
2026-03-30 13:25 ` [PATCH 1/4] dt-bindings: display: waveshare,dsp2dpi: describe DSI2LVDS setup Dmitry Baryshkov
` (4 more replies)
0 siblings, 5 replies; 15+ messages in thread
From: Dmitry Baryshkov @ 2026-03-30 13:25 UTC (permalink / raw)
To: Neil Armstrong, Jessica Zhang, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, David Airlie, Simona Vetter, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Thierry Reding, Sam Ravnborg,
Joseph Guo, Marek Vasut, Andrzej Hajda, Robert Foss,
Laurent Pinchart, Jonas Karlman, Jernej Skrabec
Cc: dri-devel, devicetree, linux-kernel
Waveshare have a serie of DSI panel kits with the DPI or LVDS panel
being attached to the DSI2DPI or DSI2LVDS bridge. Commit 80b0eb11f8e0
("dt-bindings: display: panel: Add waveshare DPI panel support")
described two of them in the bindings and commit 46be11b678e0
("drm/panel: simple: Add Waveshare 13.3" panel support") added
definitions for one of those panels. Add support for the rest of them.
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
---
Dmitry Baryshkov (4):
dt-bindings: display: waveshare,dsp2dpi: describe DSI2LVDS setup
drm/bridge: waveshare-dsi: support DSI LCD kits with LVDS panels
dt-bindings: display: panel: add Waveshare LCD panels
drm/panel: simple: add Waveshare LCD panels
.../bindings/display/bridge/waveshare,dsi2dpi.yaml | 4 +-
.../bindings/display/panel/panel-simple.yaml | 28 ++
drivers/gpu/drm/bridge/waveshare-dsi.c | 5 +-
drivers/gpu/drm/panel/panel-simple.c | 381 +++++++++++++++++++++
4 files changed, 415 insertions(+), 3 deletions(-)
---
base-commit: 3b058d1aeeeff27a7289529c4944291613b364e9
change-id: 20260330-ws-lcd-b65c03c5ac17
Best regards,
--
With best wishes
Dmitry
^ permalink raw reply [flat|nested] 15+ messages in thread
* [PATCH 1/4] dt-bindings: display: waveshare,dsp2dpi: describe DSI2LVDS setup
2026-03-30 13:25 [PATCH 0/4] drm/panel: simple: add Waveshare LCD panels Dmitry Baryshkov
@ 2026-03-30 13:25 ` Dmitry Baryshkov
2026-03-31 8:40 ` Krzysztof Kozlowski
2026-03-30 13:25 ` [PATCH 2/4] drm/bridge: waveshare-dsi: support DSI LCD kits with LVDS panels Dmitry Baryshkov
` (3 subsequent siblings)
4 siblings, 1 reply; 15+ messages in thread
From: Dmitry Baryshkov @ 2026-03-30 13:25 UTC (permalink / raw)
To: Neil Armstrong, Jessica Zhang, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, David Airlie, Simona Vetter, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Thierry Reding, Sam Ravnborg,
Joseph Guo, Marek Vasut, Andrzej Hajda, Robert Foss,
Laurent Pinchart, Jonas Karlman, Jernej Skrabec
Cc: dri-devel, devicetree, linux-kernel
Several the Waveshare DSI LCD panel kits use DSI2LVDS ICN6202 bridge
together with the LVDS panels. Define new compatible for the on-kit
bridge setup (it is not defailed and it uses Waveshare prefix since the
rest of the integration details are not known).
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
---
.../devicetree/bindings/display/bridge/waveshare,dsi2dpi.yaml | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/Documentation/devicetree/bindings/display/bridge/waveshare,dsi2dpi.yaml b/Documentation/devicetree/bindings/display/bridge/waveshare,dsi2dpi.yaml
index 3820dd7e11af..0d9372fd2ff9 100644
--- a/Documentation/devicetree/bindings/display/bridge/waveshare,dsi2dpi.yaml
+++ b/Documentation/devicetree/bindings/display/bridge/waveshare,dsi2dpi.yaml
@@ -14,7 +14,9 @@ description:
properties:
compatible:
- const: waveshare,dsi2dpi
+ enum:
+ - waveshare,dsi2dpi
+ - waveshare,dsi2lvds
reg:
maxItems: 1
--
2.47.3
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH 2/4] drm/bridge: waveshare-dsi: support DSI LCD kits with LVDS panels
2026-03-30 13:25 [PATCH 0/4] drm/panel: simple: add Waveshare LCD panels Dmitry Baryshkov
2026-03-30 13:25 ` [PATCH 1/4] dt-bindings: display: waveshare,dsp2dpi: describe DSI2LVDS setup Dmitry Baryshkov
@ 2026-03-30 13:25 ` Dmitry Baryshkov
2026-03-30 13:25 ` [PATCH 3/4] dt-bindings: display: panel: add Waveshare LCD panels Dmitry Baryshkov
` (2 subsequent siblings)
4 siblings, 0 replies; 15+ messages in thread
From: Dmitry Baryshkov @ 2026-03-30 13:25 UTC (permalink / raw)
To: Neil Armstrong, Jessica Zhang, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, David Airlie, Simona Vetter, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Thierry Reding, Sam Ravnborg,
Joseph Guo, Marek Vasut, Andrzej Hajda, Robert Foss,
Laurent Pinchart, Jonas Karlman, Jernej Skrabec
Cc: dri-devel, devicetree, linux-kernel
Several Waveshare DSI LCD kits use LVDS panels and the ICN6202 DSI2LVDS
bridge. Support that setup by handling waveshare,dsi2lvds compatible.
The only difference with the existing waveshare,dsi2dpi is the bridge's
output type (LVDS vs DPI).
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
---
drivers/gpu/drm/bridge/waveshare-dsi.c | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/bridge/waveshare-dsi.c b/drivers/gpu/drm/bridge/waveshare-dsi.c
index 32d40414adb9..ded57f298d64 100644
--- a/drivers/gpu/drm/bridge/waveshare-dsi.c
+++ b/drivers/gpu/drm/bridge/waveshare-dsi.c
@@ -177,7 +177,7 @@ static int ws_bridge_probe(struct i2c_client *i2c)
regmap_write(ws->reg_map, 0xc2, 0x01);
regmap_write(ws->reg_map, 0xac, 0x01);
- ws->bridge.type = DRM_MODE_CONNECTOR_DPI;
+ ws->bridge.type = (uintptr_t)i2c_get_match_data(i2c);
ws->bridge.of_node = dev->of_node;
devm_drm_bridge_add(dev, &ws->bridge);
@@ -185,7 +185,8 @@ static int ws_bridge_probe(struct i2c_client *i2c)
}
static const struct of_device_id ws_bridge_of_ids[] = {
- {.compatible = "waveshare,dsi2dpi",},
+ {.compatible = "waveshare,dsi2dpi", .data = (void *)DRM_MODE_CONNECTOR_DPI, },
+ {.compatible = "waveshare,dsi2lvds", .data = (void *)DRM_MODE_CONNECTOR_LVDS, },
{ }
};
--
2.47.3
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH 3/4] dt-bindings: display: panel: add Waveshare LCD panels
2026-03-30 13:25 [PATCH 0/4] drm/panel: simple: add Waveshare LCD panels Dmitry Baryshkov
2026-03-30 13:25 ` [PATCH 1/4] dt-bindings: display: waveshare,dsp2dpi: describe DSI2LVDS setup Dmitry Baryshkov
2026-03-30 13:25 ` [PATCH 2/4] drm/bridge: waveshare-dsi: support DSI LCD kits with LVDS panels Dmitry Baryshkov
@ 2026-03-30 13:25 ` Dmitry Baryshkov
2026-03-31 8:40 ` Krzysztof Kozlowski
2026-03-30 13:25 ` [PATCH 4/4] drm/panel: simple: " Dmitry Baryshkov
2026-03-30 17:21 ` [PATCH 0/4] " Marek Vasut
4 siblings, 1 reply; 15+ messages in thread
From: Dmitry Baryshkov @ 2026-03-30 13:25 UTC (permalink / raw)
To: Neil Armstrong, Jessica Zhang, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, David Airlie, Simona Vetter, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Thierry Reding, Sam Ravnborg,
Joseph Guo, Marek Vasut, Andrzej Hajda, Robert Foss,
Laurent Pinchart, Jonas Karlman, Jernej Skrabec
Cc: dri-devel, devicetree, linux-kernel
Waveshare has a family of LVDS / DPI panels bundled with the DSI2DPI or
DSI2LVDS bridge. The bridge and the rest of the logic are covered by the
waveshare,dsi2dpi compatible. The bindings already include several
entries for the panels from this series (waveshare,13.3inch-panel,
waveshare,7.0inch-c-panel). Define compatible strings for the rest of
the panels from that series.
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
---
.../bindings/display/panel/panel-simple.yaml | 28 ++++++++++++++++++++++
1 file changed, 28 insertions(+)
diff --git a/Documentation/devicetree/bindings/display/panel/panel-simple.yaml b/Documentation/devicetree/bindings/display/panel/panel-simple.yaml
index 9b8fa03f7cbc..c9ac59e04118 100644
--- a/Documentation/devicetree/bindings/display/panel/panel-simple.yaml
+++ b/Documentation/devicetree/bindings/display/panel/panel-simple.yaml
@@ -343,10 +343,38 @@ properties:
- vivax,tpc9150-panel
# VXT 800x480 color TFT LCD panel
- vxt,vl050-8048nt-c01
+ # Waveshare 10.1" WXGA (1280x800) LCD panel
+ - waveshare,10.1inch-c-panel
+ # Waveshare 11.9" (320x1480) LCD panel
+ - waveshare,11.9inch-panel
# Waveshare 13.3" FHD (1920x1080) LCD panel
- waveshare,13.3inch-panel
+ # Waveshare 2.8" VGA (480x640) LCD panel
+ - waveshare,2.8inch-panel
+ # Waveshare 3.4" (800x800) LCD panel
+ - waveshare,3.4inch-c-panel
+ # Waveshare 4.0" WVGA (480x800) LCD panel
+ - waveshare,4.0inch-panel
+ # Waveshare 4.0" (720x720) LCD panel
+ - waveshare,4.0inch-c-panel
+ # Waveshare 5.0" WSVGA (1024x600) LCD panel
+ - waveshare,5.0inch-c-panel
+ # Waveshare 5.0" HD 720p (720x1280) LCD panel
+ - waveshare,5.0inch-d-panel
+ # Waveshare 6.25" (720x1560) LCD panel
+ - waveshare,6.25inch-panel
# Waveshare 7.0" WSVGA (1024x600) LCD panel
- waveshare,7.0inch-c-panel
+ # Waveshare 7.0" WXGA (1280x800) LCD panel
+ - waveshare,7.0inch-e-panel
+ # Waveshare 7.0" HD 720p (720x1280) LCD panel
+ - waveshare,7.0inch-h-panel
+ # Waveshare 7.9" (400x1280) LCD panel
+ - waveshare,7.9inch-panel
+ # Waveshare 8.0" WXGA (1280x800) LCD panel
+ - waveshare,8.0inch-c-panel
+ # Waveshare 8.8" (480x1920) LCD panel
+ - waveshare,8.8inch-panel
# Winstar Display Corporation 3.5" QVGA (320x240) TFT LCD panel
- winstar,wf35ltiacd
# Yes Optoelectronics YTC700TLAG-05-201C 7" TFT LCD panel
--
2.47.3
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH 4/4] drm/panel: simple: add Waveshare LCD panels
2026-03-30 13:25 [PATCH 0/4] drm/panel: simple: add Waveshare LCD panels Dmitry Baryshkov
` (2 preceding siblings ...)
2026-03-30 13:25 ` [PATCH 3/4] dt-bindings: display: panel: add Waveshare LCD panels Dmitry Baryshkov
@ 2026-03-30 13:25 ` Dmitry Baryshkov
2026-04-09 12:58 ` Neil Armstrong
2026-03-30 17:21 ` [PATCH 0/4] " Marek Vasut
4 siblings, 1 reply; 15+ messages in thread
From: Dmitry Baryshkov @ 2026-03-30 13:25 UTC (permalink / raw)
To: Neil Armstrong, Jessica Zhang, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, David Airlie, Simona Vetter, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Thierry Reding, Sam Ravnborg,
Joseph Guo, Marek Vasut, Andrzej Hajda, Robert Foss,
Laurent Pinchart, Jonas Karlman, Jernej Skrabec
Cc: dri-devel, devicetree, linux-kernel
Waveshare have a serie of DSI panel kits with the DPI or LVDS panel
being attached to the DSI2DPI or DSI2LVDS bridge. The commit
46be11b678e0 ("drm/panel: simple: Add Waveshare 13.3" panel support")
added definitions for one of those panels, describe the rest of them.
Note, since the panels are hidden behind the bridges which are not being
programmed by the kernel, I could not confirm the pixel format for the
panels.
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
---
drivers/gpu/drm/panel/panel-simple.c | 381 +++++++++++++++++++++++++++++++++++
1 file changed, 381 insertions(+)
diff --git a/drivers/gpu/drm/panel/panel-simple.c b/drivers/gpu/drm/panel/panel-simple.c
index 236bd56208cc..b2708a1fe464 100644
--- a/drivers/gpu/drm/panel/panel-simple.c
+++ b/drivers/gpu/drm/panel/panel-simple.c
@@ -5061,6 +5061,342 @@ static const struct panel_desc vl050_8048nt_c01 = {
.bus_flags = DRM_BUS_FLAG_DE_HIGH | DRM_BUS_FLAG_PIXDATA_SAMPLE_NEGEDGE,
};
+static const struct drm_display_mode waveshare_28_lcd_mode = {
+ .clock = 50000,
+ .hdisplay = 480,
+ .hsync_start = 480 + 150,
+ .hsync_end = 480 + 150 + 50,
+ .htotal = 480 + 150 + 50 + 150,
+ .vdisplay = 640,
+ .vsync_start = 640 + 150,
+ .vsync_end = 640 + 150 + 50,
+ .vtotal = 640 + 150 + 50 + 150,
+ .flags = DRM_MODE_FLAG_PVSYNC | DRM_MODE_FLAG_PHSYNC,
+};
+
+static const struct panel_desc waveshare_28_lcd_panel = {
+ .modes = &waveshare_28_lcd_mode,
+ .num_modes = 1,
+ .bpc = 8,
+ .size = {
+ .width = 44,
+ .height = 58,
+ },
+ .bus_format = MEDIA_BUS_FMT_RGB888_1X24,
+ .connector_type = DRM_MODE_CONNECTOR_DPI,
+ .bus_flags = DRM_BUS_FLAG_PIXDATA_SAMPLE_POSEDGE |
+ DRM_BUS_FLAG_SYNC_SAMPLE_POSEDGE,
+};
+
+static const struct drm_display_mode waveshare_34_lcd_c_mode = {
+ .clock = 50000,
+ .hdisplay = 800,
+ .hsync_start = 800 + 32,
+ .hsync_end = 800 + 32 + 6,
+ .htotal = 800 + 32 + 6 + 120,
+ .vdisplay = 800,
+ .vsync_start = 800 + 8,
+ .vsync_end = 800 + 8 + 4,
+ .vtotal = 800 + 8 + 4 + 16,
+};
+
+static const struct panel_desc waveshare_34_lcd_c_panel = {
+ .modes = &waveshare_34_lcd_c_mode,
+ .num_modes = 1,
+ .bpc = 8,
+ .size = {
+ .width = 88,
+ .height = 88,
+ },
+ .bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG,
+ .connector_type = DRM_MODE_CONNECTOR_LVDS,
+};
+
+static const struct drm_display_mode waveshare_40_lcd_mode = {
+ .clock = 50000,
+ .hdisplay = 480,
+ .hsync_start = 480 + 150,
+ .hsync_end = 480 + 150 + 100,
+ .htotal = 480 + 150 + 100 + 150,
+ .vdisplay = 800,
+ .vsync_start = 800 + 20,
+ .vsync_end = 800 + 20 + 100,
+ .vtotal = 800 + 20 + 100 + 20,
+ .flags = DRM_MODE_FLAG_PVSYNC | DRM_MODE_FLAG_PHSYNC,
+};
+
+static const struct panel_desc waveshare_40_lcd_panel = {
+ .modes = &waveshare_40_lcd_mode,
+ .num_modes = 1,
+ .bpc = 8,
+ .size = {
+ .width = 52,
+ .height = 87,
+ },
+ .bus_format = MEDIA_BUS_FMT_RGB888_1X24,
+ .connector_type = DRM_MODE_CONNECTOR_DPI,
+ .bus_flags = DRM_BUS_FLAG_PIXDATA_SAMPLE_POSEDGE |
+ DRM_BUS_FLAG_SYNC_SAMPLE_POSEDGE,
+};
+
+static const struct drm_display_mode waveshare_40_lcd_c_mode = {
+ .clock = 50000,
+ .hdisplay = 720,
+ .hsync_start = 720 + 32,
+ .hsync_end = 720 + 32 + 200,
+ .htotal = 720 + 32 + 200 + 120,
+ .vdisplay = 720,
+ .vsync_start = 720 + 8,
+ .vsync_end = 720 + 8 + 4,
+ .vtotal = 720 + 8 + 4 + 16,
+};
+
+static const struct panel_desc waveshare_40_lcd_c_panel = {
+ .modes = &waveshare_40_lcd_c_mode,
+ .num_modes = 1,
+ .bpc = 8,
+ .size = {
+ .width = 102,
+ .height = 102,
+ },
+ .bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG,
+ .connector_type = DRM_MODE_CONNECTOR_LVDS,
+};
+
+static const struct drm_display_mode waveshare_50_lcd_c_mode = {
+ .clock = 50000,
+ .hdisplay = 1024,
+ .hsync_start = 1024 + 100,
+ .hsync_end = 1024 + 100 + 100,
+ .htotal = 1024 + 100 + 100 + 100,
+ .vdisplay = 600,
+ .vsync_start = 600 + 10,
+ .vsync_end = 600 + 10 + 10,
+ .vtotal = 600 + 10 + 10 + 10,
+ .flags = DRM_MODE_FLAG_PVSYNC | DRM_MODE_FLAG_PHSYNC,
+};
+
+static const struct panel_desc waveshare_50_lcd_c_panel = {
+ .modes = &waveshare_50_lcd_c_mode,
+ .num_modes = 1,
+ .bpc = 8,
+ .size = {
+ .width = 109,
+ .height = 66,
+ },
+ .bus_format = MEDIA_BUS_FMT_RGB888_1X24,
+ .connector_type = DRM_MODE_CONNECTOR_DPI,
+ .bus_flags = DRM_BUS_FLAG_PIXDATA_SAMPLE_POSEDGE |
+ DRM_BUS_FLAG_SYNC_SAMPLE_POSEDGE,
+};
+
+static const struct drm_display_mode waveshare_50_lcd_d_mode = {
+ .clock = 83333,
+ .hdisplay = 720,
+ .hsync_start = 720 + 100,
+ .hsync_end = 720 + 100 + 80,
+ .htotal = 720 + 100 + 80 + 100,
+ .vdisplay = 1280,
+ .vsync_start = 1280 + 20,
+ .vsync_end = 1280 + 20 + 20,
+ .vtotal = 1280 + 20 + 20 + 20,
+};
+
+static const struct panel_desc waveshare_50_lcd_d_panel = {
+ .modes = &waveshare_50_lcd_d_mode,
+ .num_modes = 1,
+ .bpc = 8,
+ .size = {
+ .width = 62,
+ .height = 110,
+ },
+ .bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG,
+ .connector_type = DRM_MODE_CONNECTOR_LVDS,
+};
+
+static const struct drm_display_mode waveshare_625_lcd_mode = {
+ .clock = 83333,
+ .hdisplay = 720,
+ .hsync_start = 720 + 50,
+ .hsync_end = 720 + 50 + 50,
+ .htotal = 720 + 50 + 50 + 50,
+ .vdisplay = 1560,
+ .vsync_start = 1560 + 20,
+ .vsync_end = 1560 + 20 + 20,
+ .vtotal = 1560 + 20 + 20 + 20,
+};
+
+static const struct panel_desc waveshare_625_lcd_panel = {
+ .modes = &waveshare_625_lcd_mode,
+ .num_modes = 1,
+ .bpc = 8,
+ .size = {
+ .width = 66,
+ .height = 144,
+ },
+ .bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG,
+ .connector_type = DRM_MODE_CONNECTOR_LVDS,
+};
+
+static const struct panel_desc waveshare_70_lcd_c_panel = {
+ .modes = &waveshare_50_lcd_c_mode,
+ .num_modes = 1,
+ .bpc = 8,
+ .size = {
+ .width = 155,
+ .height = 87,
+ },
+ .bus_format = MEDIA_BUS_FMT_RGB888_1X24,
+ .connector_type = DRM_MODE_CONNECTOR_DPI,
+ .bus_flags = DRM_BUS_FLAG_PIXDATA_SAMPLE_POSEDGE |
+ DRM_BUS_FLAG_SYNC_SAMPLE_POSEDGE,
+};
+
+static const struct drm_display_mode waveshare_80_lcd_c_mode;
+static const struct panel_desc waveshare_70_lcd_e_panel = {
+ .modes = &waveshare_80_lcd_c_mode,
+ .num_modes = 1,
+ .bpc = 8,
+ .size = {
+ .width = 152,
+ .height = 95,
+ },
+ .bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG,
+ .connector_type = DRM_MODE_CONNECTOR_LVDS,
+};
+
+static const struct drm_display_mode waveshare_70_lcd_h_mode = {
+ .clock = 83333,
+ .hdisplay = 1280,
+ .hsync_start = 1280 + 64,
+ .hsync_end = 1280 + 64 + 64,
+ .htotal = 1280 + 64 + 64 + 64,
+ .vdisplay = 720,
+ .vsync_start = 720 + 64,
+ .vsync_end = 720 + 64 + 64,
+ .vtotal = 720 + 64 + 64 + 64,
+};
+
+static const struct panel_desc waveshare_70_lcd_h_panel = {
+ .modes = &waveshare_70_lcd_h_mode,
+ .num_modes = 1,
+ .bpc = 8,
+ .size = {
+ .width = 155,
+ .height = 88,
+ },
+ .bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG,
+ .connector_type = DRM_MODE_CONNECTOR_LVDS,
+};
+
+static const struct drm_display_mode waveshare_79_lcd_mode = {
+ .clock = 50000,
+ .hdisplay = 400,
+ .hsync_start = 400 + 40,
+ .hsync_end = 400 + 40 + 30,
+ .htotal = 400 + 40 + 30 + 40,
+ .vdisplay = 1280,
+ .vsync_start = 1280 + 20,
+ .vsync_end = 1280 + 20 + 10,
+ .vtotal = 1280 + 20 + 10 + 20,
+};
+
+static const struct panel_desc waveshare_79_lcd_panel = {
+ .modes = &waveshare_79_lcd_mode,
+ .num_modes = 1,
+ .bpc = 8,
+ .size = {
+ .width = 60,
+ .height = 191,
+ },
+ .bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG,
+ .connector_type = DRM_MODE_CONNECTOR_LVDS,
+};
+
+static const struct drm_display_mode waveshare_80_lcd_c_mode = {
+ .clock = 83333,
+ .hdisplay = 1280,
+ .hsync_start = 1280 + 156,
+ .hsync_end = 1280 + 156 + 20,
+ .htotal = 1280 + 156 + 20 + 40,
+ .vdisplay = 800,
+ .vsync_start = 800 + 40,
+ .vsync_end = 800 + 40 + 48,
+ .vtotal = 800 + 40 + 48 + 40,
+};
+
+static const struct panel_desc waveshare_80_lcd_c_panel = {
+ .modes = &waveshare_80_lcd_c_mode,
+ .num_modes = 1,
+ .bpc = 8,
+ .size = {
+ .width = 173,
+ .height = 108,
+ },
+ .bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG,
+ .connector_type = DRM_MODE_CONNECTOR_LVDS,
+};
+
+static const struct drm_display_mode waveshare_88_lcd_mode = {
+ .clock = 83333,
+ .hdisplay = 480,
+ .hsync_start = 480 + 50,
+ .hsync_end = 480 + 50 + 50,
+ .htotal = 480 + 50 + 50 + 50,
+ .vdisplay = 1920,
+ .vsync_start = 1920 + 20,
+ .vsync_end = 1920 + 20 + 20,
+ .vtotal = 1920 + 20 + 20 + 20,
+};
+
+static const struct panel_desc waveshare_88_lcd_panel = {
+ .modes = &waveshare_88_lcd_mode,
+ .num_modes = 1,
+ .bpc = 8,
+ .size = {
+ .width = 56,
+ .height = 220,
+ },
+ .bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG,
+ .connector_type = DRM_MODE_CONNECTOR_LVDS,
+};
+
+static const struct panel_desc waveshare_101_lcd_c_panel = {
+ .modes = &waveshare_80_lcd_c_mode,
+ .num_modes = 1,
+ .bpc = 8,
+ .size = {
+ .width = 217,
+ .height = 136,
+ },
+ .bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG,
+ .connector_type = DRM_MODE_CONNECTOR_LVDS,
+};
+
+static const struct drm_display_mode waveshare_119_lcd_mode = {
+ .clock = 50000,
+ .hdisplay = 320,
+ .hsync_start = 320 + 60,
+ .hsync_end = 320 + 60 + 60,
+ .htotal = 320 + 60 + 60 + 60,
+ .vdisplay = 1480,
+ .vsync_start = 1480 + 60,
+ .vsync_end = 1480 + 60 + 60,
+ .vtotal = 1480 + 60 + 60 + 60,
+};
+
+static const struct panel_desc waveshare_119_lcd_panel = {
+ .modes = &waveshare_119_lcd_mode,
+ .num_modes = 1,
+ .bpc = 8,
+ .size = {
+ .width = 58,
+ .height = 268,
+ },
+ .bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG,
+ .connector_type = DRM_MODE_CONNECTOR_LVDS,
+};
+
static const struct drm_display_mode waveshare_133inch_mode = {
.clock = 148500,
.hdisplay = 1920,
@@ -5697,6 +6033,51 @@ static const struct of_device_id platform_of_match[] = {
}, {
.compatible = "vxt,vl050-8048nt-c01",
.data = &vl050_8048nt_c01,
+ }, {
+ .compatible = "waveshare,2.8inch-panel",
+ .data = &waveshare_28_lcd_panel
+ }, {
+ .compatible = "waveshare,3.4inch-c-panel",
+ .data = &waveshare_34_lcd_c_panel
+ }, {
+ .compatible = "waveshare,4.0inch-panel",
+ .data = &waveshare_40_lcd_panel
+ }, {
+ .compatible = "waveshare,4.0inch-c-panel",
+ .data = &waveshare_40_lcd_c_panel
+ }, {
+ .compatible = "waveshare,5.0inch-c-panel",
+ .data = &waveshare_50_lcd_c_panel
+ }, {
+ .compatible = "waveshare,5.0inch-d-panel",
+ .data = &waveshare_50_lcd_d_panel
+ }, {
+ .compatible = "waveshare,6.25inch-panel",
+ .data = &waveshare_625_lcd_panel
+ }, {
+ .compatible = "waveshare,7.0inch-c-panel",
+ .data = &waveshare_70_lcd_c_panel
+ }, {
+ .compatible = "waveshare,7.0inch-e-panel",
+ .data = &waveshare_70_lcd_e_panel
+ }, {
+ .compatible = "waveshare,7.0inch-h-panel",
+ .data = &waveshare_70_lcd_h_panel
+ }, {
+ .compatible = "waveshare,7.9inch-panel",
+ .data = &waveshare_79_lcd_panel
+ }, {
+ .compatible = "waveshare,8.0inch-c-panel",
+ .data = &waveshare_80_lcd_c_panel
+ }, {
+ .compatible = "waveshare,8.8inch-panel",
+ .data = &waveshare_88_lcd_panel
+ }, {
+ .compatible = "waveshare,10.1inch-c-panel",
+ .data = &waveshare_101_lcd_c_panel
+ }, {
+ .compatible = "waveshare,11.9inch-panel",
+ .data = &waveshare_119_lcd_panel
}, {
.compatible = "waveshare,13.3inch-panel",
.data = &waveshare_133inch,
--
2.47.3
^ permalink raw reply related [flat|nested] 15+ messages in thread
* Re: [PATCH 0/4] drm/panel: simple: add Waveshare LCD panels
2026-03-30 13:25 [PATCH 0/4] drm/panel: simple: add Waveshare LCD panels Dmitry Baryshkov
` (3 preceding siblings ...)
2026-03-30 13:25 ` [PATCH 4/4] drm/panel: simple: " Dmitry Baryshkov
@ 2026-03-30 17:21 ` Marek Vasut
2026-03-31 1:22 ` Dmitry Baryshkov
4 siblings, 1 reply; 15+ messages in thread
From: Marek Vasut @ 2026-03-30 17:21 UTC (permalink / raw)
To: Dmitry Baryshkov, Neil Armstrong, Jessica Zhang,
Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, David Airlie,
Simona Vetter, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
Thierry Reding, Sam Ravnborg, Joseph Guo, Marek Vasut,
Andrzej Hajda, Robert Foss, Laurent Pinchart, Jonas Karlman,
Jernej Skrabec
Cc: dri-devel, devicetree, linux-kernel
On 3/30/26 3:25 PM, Dmitry Baryshkov wrote:
> Waveshare have a serie of DSI panel kits with the DPI or LVDS panel
> being attached to the DSI2DPI or DSI2LVDS bridge. Commit 80b0eb11f8e0
> ("dt-bindings: display: panel: Add waveshare DPI panel support")
> described two of them in the bindings and commit 46be11b678e0
> ("drm/panel: simple: Add Waveshare 13.3" panel support") added
> definitions for one of those panels. Add support for the rest of them.
Can we by any chance use the icn6211 driver in tree for this ?
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH 0/4] drm/panel: simple: add Waveshare LCD panels
2026-03-30 17:21 ` [PATCH 0/4] " Marek Vasut
@ 2026-03-31 1:22 ` Dmitry Baryshkov
2026-03-31 3:11 ` Marek Vasut
0 siblings, 1 reply; 15+ messages in thread
From: Dmitry Baryshkov @ 2026-03-31 1:22 UTC (permalink / raw)
To: Marek Vasut
Cc: Neil Armstrong, Jessica Zhang, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, David Airlie, Simona Vetter, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Thierry Reding, Sam Ravnborg,
Joseph Guo, Marek Vasut, Andrzej Hajda, Robert Foss,
Laurent Pinchart, Jonas Karlman, Jernej Skrabec, dri-devel,
devicetree, linux-kernel
On Tue, 31 Mar 2026 at 00:07, Marek Vasut <marek.vasut@mailbox.org> wrote:
>
> On 3/30/26 3:25 PM, Dmitry Baryshkov wrote:
> > Waveshare have a serie of DSI panel kits with the DPI or LVDS panel
> > being attached to the DSI2DPI or DSI2LVDS bridge. Commit 80b0eb11f8e0
> > ("dt-bindings: display: panel: Add waveshare DPI panel support")
> > described two of them in the bindings and commit 46be11b678e0
> > ("drm/panel: simple: Add Waveshare 13.3" panel support") added
> > definitions for one of those panels. Add support for the rest of them.
> Can we by any chance use the icn6211 driver in tree for this ?
As far as I can see, no. Waveshare kits have an extra ASIC in front of
ICN6211 / ICN6202, which completely hides all programming. So far the
interface is really better expressed by the waveshare,dsi2dpi /
dsi2lvds: this way, even if they decide to change the actual
implementation (like they did for DPI -> LVDS), we won't have to worry
about it for as long as their programming interface remains stable.
--
With best wishes
Dmitry
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH 0/4] drm/panel: simple: add Waveshare LCD panels
2026-03-31 1:22 ` Dmitry Baryshkov
@ 2026-03-31 3:11 ` Marek Vasut
2026-03-31 15:36 ` Dmitry Baryshkov
0 siblings, 1 reply; 15+ messages in thread
From: Marek Vasut @ 2026-03-31 3:11 UTC (permalink / raw)
To: Dmitry Baryshkov
Cc: Neil Armstrong, Jessica Zhang, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, David Airlie, Simona Vetter, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Thierry Reding, Sam Ravnborg,
Joseph Guo, Marek Vasut, Andrzej Hajda, Robert Foss,
Laurent Pinchart, Jonas Karlman, Jernej Skrabec, dri-devel,
devicetree, linux-kernel
On 3/31/26 3:22 AM, Dmitry Baryshkov wrote:
> On Tue, 31 Mar 2026 at 00:07, Marek Vasut <marek.vasut@mailbox.org> wrote:
>>
>> On 3/30/26 3:25 PM, Dmitry Baryshkov wrote:
>>> Waveshare have a serie of DSI panel kits with the DPI or LVDS panel
>>> being attached to the DSI2DPI or DSI2LVDS bridge. Commit 80b0eb11f8e0
>>> ("dt-bindings: display: panel: Add waveshare DPI panel support")
>>> described two of them in the bindings and commit 46be11b678e0
>>> ("drm/panel: simple: Add Waveshare 13.3" panel support") added
>>> definitions for one of those panels. Add support for the rest of them.
>> Can we by any chance use the icn6211 driver in tree for this ?
>
> As far as I can see, no. Waveshare kits have an extra ASIC in front of
> ICN6211 / ICN6202, which completely hides all programming. So far the
> interface is really better expressed by the waveshare,dsi2dpi /
> dsi2lvds: this way, even if they decide to change the actual
> implementation (like they did for DPI -> LVDS), we won't have to worry
> about it for as long as their programming interface remains stable.
Hmmm, I've seen this before, but I don't think this is extra ASIC. The
ICN6211 pulls its register settings from EEPROM, does it not ?
But no matter how the ICN loads its configuration, this is not waveshare
specific. I have another display from another manufacturer here which is
also ICN6211 that is preprogrammed. Can we instead have some generic-dsi
display , because I don't think these proprogrammed DSI displays are
going to be only ICN6211 based and only made by waveshare ?
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH 1/4] dt-bindings: display: waveshare,dsp2dpi: describe DSI2LVDS setup
2026-03-30 13:25 ` [PATCH 1/4] dt-bindings: display: waveshare,dsp2dpi: describe DSI2LVDS setup Dmitry Baryshkov
@ 2026-03-31 8:40 ` Krzysztof Kozlowski
2026-03-31 15:01 ` Dmitry Baryshkov
2026-03-31 15:44 ` Dmitry Baryshkov
0 siblings, 2 replies; 15+ messages in thread
From: Krzysztof Kozlowski @ 2026-03-31 8:40 UTC (permalink / raw)
To: Dmitry Baryshkov
Cc: Neil Armstrong, Jessica Zhang, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, David Airlie, Simona Vetter, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Thierry Reding, Sam Ravnborg,
Joseph Guo, Marek Vasut, Andrzej Hajda, Robert Foss,
Laurent Pinchart, Jonas Karlman, Jernej Skrabec, dri-devel,
devicetree, linux-kernel
On Mon, Mar 30, 2026 at 04:25:50PM +0300, Dmitry Baryshkov wrote:
> Several the Waveshare DSI LCD panel kits use DSI2LVDS ICN6202 bridge
If you know the hardware bridge used, should not it be the front
compatible (with waveshare,dsi2lvds fallback)? Or even alone? Can the
waveshare kits come with different bridges? I guess yes, they could.
> together with the LVDS panels. Define new compatible for the on-kit
> bridge setup (it is not defailed and it uses Waveshare prefix since the
typo: detailed
> rest of the integration details are not known).
>
Please also update at least description:
"...converts DSI to DPI or LVDS."
or similar.
Best regards,
Krzysztof
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH 3/4] dt-bindings: display: panel: add Waveshare LCD panels
2026-03-30 13:25 ` [PATCH 3/4] dt-bindings: display: panel: add Waveshare LCD panels Dmitry Baryshkov
@ 2026-03-31 8:40 ` Krzysztof Kozlowski
0 siblings, 0 replies; 15+ messages in thread
From: Krzysztof Kozlowski @ 2026-03-31 8:40 UTC (permalink / raw)
To: Dmitry Baryshkov
Cc: Neil Armstrong, Jessica Zhang, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, David Airlie, Simona Vetter, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Thierry Reding, Sam Ravnborg,
Joseph Guo, Marek Vasut, Andrzej Hajda, Robert Foss,
Laurent Pinchart, Jonas Karlman, Jernej Skrabec, dri-devel,
devicetree, linux-kernel
On Mon, Mar 30, 2026 at 04:25:52PM +0300, Dmitry Baryshkov wrote:
> Waveshare has a family of LVDS / DPI panels bundled with the DSI2DPI or
> DSI2LVDS bridge. The bridge and the rest of the logic are covered by the
> waveshare,dsi2dpi compatible. The bindings already include several
> entries for the panels from this series (waveshare,13.3inch-panel,
> waveshare,7.0inch-c-panel). Define compatible strings for the rest of
> the panels from that series.
>
> Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
> ---
> .../bindings/display/panel/panel-simple.yaml | 28 ++++++++++++++++++++++
> 1 file changed, 28 insertions(+)
Acked-by: Krzysztof Kozlowski <krzysztof.kozlowski@oss.qualcomm.com>
Best regards,
Krzysztof
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH 1/4] dt-bindings: display: waveshare,dsp2dpi: describe DSI2LVDS setup
2026-03-31 8:40 ` Krzysztof Kozlowski
@ 2026-03-31 15:01 ` Dmitry Baryshkov
2026-03-31 15:44 ` Dmitry Baryshkov
1 sibling, 0 replies; 15+ messages in thread
From: Dmitry Baryshkov @ 2026-03-31 15:01 UTC (permalink / raw)
To: Krzysztof Kozlowski
Cc: Neil Armstrong, Jessica Zhang, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, David Airlie, Simona Vetter, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Thierry Reding, Sam Ravnborg,
Joseph Guo, Marek Vasut, Andrzej Hajda, Robert Foss,
Laurent Pinchart, Jonas Karlman, Jernej Skrabec, dri-devel,
devicetree, linux-kernel
On Tue, Mar 31, 2026 at 10:40:12AM +0200, Krzysztof Kozlowski wrote:
> On Mon, Mar 30, 2026 at 04:25:50PM +0300, Dmitry Baryshkov wrote:
> > Several the Waveshare DSI LCD panel kits use DSI2LVDS ICN6202 bridge
>
> If you know the hardware bridge used, should not it be the front
> compatible (with waveshare,dsi2lvds fallback)? Or even alone? Can the
> waveshare kits come with different bridges? I guess yes, they could.
I assume so. I have only several samples. Probably we can decode it from
the kit images, when available.
>
> > together with the LVDS panels. Define new compatible for the on-kit
> > bridge setup (it is not defailed and it uses Waveshare prefix since the
>
> typo: detailed
>
> > rest of the integration details are not known).
> >
>
> Please also update at least description:
> "...converts DSI to DPI or LVDS."
> or similar.
>
> Best regards,
> Krzysztof
>
--
With best wishes
Dmitry
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH 0/4] drm/panel: simple: add Waveshare LCD panels
2026-03-31 3:11 ` Marek Vasut
@ 2026-03-31 15:36 ` Dmitry Baryshkov
2026-03-31 21:46 ` Marek Vasut
0 siblings, 1 reply; 15+ messages in thread
From: Dmitry Baryshkov @ 2026-03-31 15:36 UTC (permalink / raw)
To: Marek Vasut
Cc: Neil Armstrong, Jessica Zhang, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, David Airlie, Simona Vetter, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Thierry Reding, Sam Ravnborg,
Joseph Guo, Marek Vasut, Andrzej Hajda, Robert Foss,
Laurent Pinchart, Jonas Karlman, Jernej Skrabec, dri-devel,
devicetree, linux-kernel
On Tue, Mar 31, 2026 at 05:11:43AM +0200, Marek Vasut wrote:
> On 3/31/26 3:22 AM, Dmitry Baryshkov wrote:
> > On Tue, 31 Mar 2026 at 00:07, Marek Vasut <marek.vasut@mailbox.org> wrote:
> > >
> > > On 3/30/26 3:25 PM, Dmitry Baryshkov wrote:
> > > > Waveshare have a serie of DSI panel kits with the DPI or LVDS panel
> > > > being attached to the DSI2DPI or DSI2LVDS bridge. Commit 80b0eb11f8e0
> > > > ("dt-bindings: display: panel: Add waveshare DPI panel support")
> > > > described two of them in the bindings and commit 46be11b678e0
> > > > ("drm/panel: simple: Add Waveshare 13.3" panel support") added
> > > > definitions for one of those panels. Add support for the rest of them.
> > > Can we by any chance use the icn6211 driver in tree for this ?
> >
> > As far as I can see, no. Waveshare kits have an extra ASIC in front of
> > ICN6211 / ICN6202, which completely hides all programming. So far the
> > interface is really better expressed by the waveshare,dsi2dpi /
> > dsi2lvds: this way, even if they decide to change the actual
> > implementation (like they did for DPI -> LVDS), we won't have to worry
> > about it for as long as their programming interface remains stable.
> Hmmm, I've seen this before, but I don't think this is extra ASIC. The
> ICN6211 pulls its register settings from EEPROM, does it not ?
The kits that I have at hand don't have I2C EEPROMs. They have 25Q8
QSPI. Also note that neither ICN6211 nor ICN6202 datasheets describe I2C
master interface. It is defined as a purely I2C slave.
The kits have WSVTH01 chip (CPLD?) and 25Q8 QSPI NOR. I assume the
bridge settings are loaded from by the WSVTH01 and programmed into the
ICN bridge.
> But no matter how the ICN loads its configuration, this is not waveshare
> specific. I have another display from another manufacturer here which is
> also ICN6211 that is preprogrammed. Can we instead have some generic-dsi
> display , because I don't think these proprogrammed DSI displays are going
> to be only ICN6211 based and only made by waveshare ?
If it was just about the bridge config, I would completely agree with
you. However if you check the waveshare-dsi.c, you'd notice that it is
not directly related to either of ICN bridges. It controls backlight
and panel regulators.
For the reference, *technically* the signal sequence should be:
DSI host -> ICN6202 -> WSVTH01 -> panel. But describing it this way
would require additional changes to the bridge driver to stop it from
programming the bridge (over the DSI). As such I really assume that it's
easier to omit the ICN bridges from the picture.
--
With best wishes
Dmitry
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH 1/4] dt-bindings: display: waveshare,dsp2dpi: describe DSI2LVDS setup
2026-03-31 8:40 ` Krzysztof Kozlowski
2026-03-31 15:01 ` Dmitry Baryshkov
@ 2026-03-31 15:44 ` Dmitry Baryshkov
1 sibling, 0 replies; 15+ messages in thread
From: Dmitry Baryshkov @ 2026-03-31 15:44 UTC (permalink / raw)
To: Krzysztof Kozlowski
Cc: Neil Armstrong, Jessica Zhang, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, David Airlie, Simona Vetter, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Thierry Reding, Sam Ravnborg,
Joseph Guo, Marek Vasut, Andrzej Hajda, Robert Foss,
Laurent Pinchart, Jonas Karlman, Jernej Skrabec, dri-devel,
devicetree, linux-kernel
On Tue, Mar 31, 2026 at 10:40:12AM +0200, Krzysztof Kozlowski wrote:
> On Mon, Mar 30, 2026 at 04:25:50PM +0300, Dmitry Baryshkov wrote:
> > Several the Waveshare DSI LCD panel kits use DSI2LVDS ICN6202 bridge
>
> If you know the hardware bridge used, should not it be the front
> compatible (with waveshare,dsi2lvds fallback)? Or even alone? Can the
> waveshare kits come with different bridges? I guess yes, they could.
After additional thought (and an email to Marek): the actual ICN bridge
chip is an integrated entity. It is not (and it should not) be
programmed by the host. The kit handles it internally. As such, I don't
think we should be a part of the DT.
--
With best wishes
Dmitry
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH 0/4] drm/panel: simple: add Waveshare LCD panels
2026-03-31 15:36 ` Dmitry Baryshkov
@ 2026-03-31 21:46 ` Marek Vasut
0 siblings, 0 replies; 15+ messages in thread
From: Marek Vasut @ 2026-03-31 21:46 UTC (permalink / raw)
To: Dmitry Baryshkov
Cc: Neil Armstrong, Jessica Zhang, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, David Airlie, Simona Vetter, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Thierry Reding, Sam Ravnborg,
Joseph Guo, Marek Vasut, Andrzej Hajda, Robert Foss,
Laurent Pinchart, Jonas Karlman, Jernej Skrabec, dri-devel,
devicetree, linux-kernel
On 3/31/26 5:36 PM, Dmitry Baryshkov wrote:
> On Tue, Mar 31, 2026 at 05:11:43AM +0200, Marek Vasut wrote:
>> On 3/31/26 3:22 AM, Dmitry Baryshkov wrote:
>>> On Tue, 31 Mar 2026 at 00:07, Marek Vasut <marek.vasut@mailbox.org> wrote:
>>>>
>>>> On 3/30/26 3:25 PM, Dmitry Baryshkov wrote:
>>>>> Waveshare have a serie of DSI panel kits with the DPI or LVDS panel
>>>>> being attached to the DSI2DPI or DSI2LVDS bridge. Commit 80b0eb11f8e0
>>>>> ("dt-bindings: display: panel: Add waveshare DPI panel support")
>>>>> described two of them in the bindings and commit 46be11b678e0
>>>>> ("drm/panel: simple: Add Waveshare 13.3" panel support") added
>>>>> definitions for one of those panels. Add support for the rest of them.
>>>> Can we by any chance use the icn6211 driver in tree for this ?
>>>
>>> As far as I can see, no. Waveshare kits have an extra ASIC in front of
>>> ICN6211 / ICN6202, which completely hides all programming. So far the
>>> interface is really better expressed by the waveshare,dsi2dpi /
>>> dsi2lvds: this way, even if they decide to change the actual
>>> implementation (like they did for DPI -> LVDS), we won't have to worry
>>> about it for as long as their programming interface remains stable.
>> Hmmm, I've seen this before, but I don't think this is extra ASIC. The
>> ICN6211 pulls its register settings from EEPROM, does it not ?
>
> The kits that I have at hand don't have I2C EEPROMs. They have 25Q8
> QSPI. Also note that neither ICN6211 nor ICN6202 datasheets describe I2C
> master interface. It is defined as a purely I2C slave.
>
> The kits have WSVTH01 chip (CPLD?) and 25Q8 QSPI NOR. I assume the
> bridge settings are loaded from by the WSVTH01 and programmed into the
> ICN bridge.
>
>> But no matter how the ICN loads its configuration, this is not waveshare
>> specific. I have another display from another manufacturer here which is
>> also ICN6211 that is preprogrammed. Can we instead have some generic-dsi
>> display , because I don't think these proprogrammed DSI displays are going
>> to be only ICN6211 based and only made by waveshare ?
>
> If it was just about the bridge config, I would completely agree with
> you. However if you check the waveshare-dsi.c, you'd notice that it is
> not directly related to either of ICN bridges. It controls backlight
> and panel regulators.
Oh ok, this part, I understand.
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH 4/4] drm/panel: simple: add Waveshare LCD panels
2026-03-30 13:25 ` [PATCH 4/4] drm/panel: simple: " Dmitry Baryshkov
@ 2026-04-09 12:58 ` Neil Armstrong
0 siblings, 0 replies; 15+ messages in thread
From: Neil Armstrong @ 2026-04-09 12:58 UTC (permalink / raw)
To: Dmitry Baryshkov, Jessica Zhang, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, David Airlie, Simona Vetter, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Thierry Reding, Sam Ravnborg,
Joseph Guo, Marek Vasut, Andrzej Hajda, Robert Foss,
Laurent Pinchart, Jonas Karlman, Jernej Skrabec
Cc: dri-devel, devicetree, linux-kernel
On 3/30/26 15:25, Dmitry Baryshkov wrote:
> Waveshare have a serie of DSI panel kits with the DPI or LVDS panel
> being attached to the DSI2DPI or DSI2LVDS bridge. The commit
> 46be11b678e0 ("drm/panel: simple: Add Waveshare 13.3" panel support")
> added definitions for one of those panels, describe the rest of them.
>
> Note, since the panels are hidden behind the bridges which are not being
> programmed by the kernel, I could not confirm the pixel format for the
> panels.
>
> Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
> ---
> drivers/gpu/drm/panel/panel-simple.c | 381 +++++++++++++++++++++++++++++++++++
> 1 file changed, 381 insertions(+)
>
> diff --git a/drivers/gpu/drm/panel/panel-simple.c b/drivers/gpu/drm/panel/panel-simple.c
> index 236bd56208cc..b2708a1fe464 100644
> --- a/drivers/gpu/drm/panel/panel-simple.c
> +++ b/drivers/gpu/drm/panel/panel-simple.c
> @@ -5061,6 +5061,342 @@ static const struct panel_desc vl050_8048nt_c01 = {
> .bus_flags = DRM_BUS_FLAG_DE_HIGH | DRM_BUS_FLAG_PIXDATA_SAMPLE_NEGEDGE,
> };
>
> +static const struct drm_display_mode waveshare_28_lcd_mode = {
> + .clock = 50000,
> + .hdisplay = 480,
> + .hsync_start = 480 + 150,
> + .hsync_end = 480 + 150 + 50,
> + .htotal = 480 + 150 + 50 + 150,
> + .vdisplay = 640,
> + .vsync_start = 640 + 150,
> + .vsync_end = 640 + 150 + 50,
> + .vtotal = 640 + 150 + 50 + 150,
> + .flags = DRM_MODE_FLAG_PVSYNC | DRM_MODE_FLAG_PHSYNC,
> +};
> +
> +static const struct panel_desc waveshare_28_lcd_panel = {
> + .modes = &waveshare_28_lcd_mode,
> + .num_modes = 1,
> + .bpc = 8,
> + .size = {
> + .width = 44,
> + .height = 58,
> + },
> + .bus_format = MEDIA_BUS_FMT_RGB888_1X24,
> + .connector_type = DRM_MODE_CONNECTOR_DPI,
> + .bus_flags = DRM_BUS_FLAG_PIXDATA_SAMPLE_POSEDGE |
> + DRM_BUS_FLAG_SYNC_SAMPLE_POSEDGE,
> +};
> +
> +static const struct drm_display_mode waveshare_34_lcd_c_mode = {
> + .clock = 50000,
> + .hdisplay = 800,
> + .hsync_start = 800 + 32,
> + .hsync_end = 800 + 32 + 6,
> + .htotal = 800 + 32 + 6 + 120,
> + .vdisplay = 800,
> + .vsync_start = 800 + 8,
> + .vsync_end = 800 + 8 + 4,
> + .vtotal = 800 + 8 + 4 + 16,
> +};
> +
> +static const struct panel_desc waveshare_34_lcd_c_panel = {
> + .modes = &waveshare_34_lcd_c_mode,
> + .num_modes = 1,
> + .bpc = 8,
> + .size = {
> + .width = 88,
> + .height = 88,
> + },
> + .bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG,
> + .connector_type = DRM_MODE_CONNECTOR_LVDS,
> +};
> +
> +static const struct drm_display_mode waveshare_40_lcd_mode = {
> + .clock = 50000,
> + .hdisplay = 480,
> + .hsync_start = 480 + 150,
> + .hsync_end = 480 + 150 + 100,
> + .htotal = 480 + 150 + 100 + 150,
> + .vdisplay = 800,
> + .vsync_start = 800 + 20,
> + .vsync_end = 800 + 20 + 100,
> + .vtotal = 800 + 20 + 100 + 20,
> + .flags = DRM_MODE_FLAG_PVSYNC | DRM_MODE_FLAG_PHSYNC,
> +};
> +
> +static const struct panel_desc waveshare_40_lcd_panel = {
> + .modes = &waveshare_40_lcd_mode,
> + .num_modes = 1,
> + .bpc = 8,
> + .size = {
> + .width = 52,
> + .height = 87,
> + },
> + .bus_format = MEDIA_BUS_FMT_RGB888_1X24,
> + .connector_type = DRM_MODE_CONNECTOR_DPI,
> + .bus_flags = DRM_BUS_FLAG_PIXDATA_SAMPLE_POSEDGE |
> + DRM_BUS_FLAG_SYNC_SAMPLE_POSEDGE,
> +};
> +
> +static const struct drm_display_mode waveshare_40_lcd_c_mode = {
> + .clock = 50000,
> + .hdisplay = 720,
> + .hsync_start = 720 + 32,
> + .hsync_end = 720 + 32 + 200,
> + .htotal = 720 + 32 + 200 + 120,
> + .vdisplay = 720,
> + .vsync_start = 720 + 8,
> + .vsync_end = 720 + 8 + 4,
> + .vtotal = 720 + 8 + 4 + 16,
> +};
> +
> +static const struct panel_desc waveshare_40_lcd_c_panel = {
> + .modes = &waveshare_40_lcd_c_mode,
> + .num_modes = 1,
> + .bpc = 8,
> + .size = {
> + .width = 102,
> + .height = 102,
> + },
> + .bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG,
> + .connector_type = DRM_MODE_CONNECTOR_LVDS,
> +};
> +
> +static const struct drm_display_mode waveshare_50_lcd_c_mode = {
> + .clock = 50000,
> + .hdisplay = 1024,
> + .hsync_start = 1024 + 100,
> + .hsync_end = 1024 + 100 + 100,
> + .htotal = 1024 + 100 + 100 + 100,
> + .vdisplay = 600,
> + .vsync_start = 600 + 10,
> + .vsync_end = 600 + 10 + 10,
> + .vtotal = 600 + 10 + 10 + 10,
> + .flags = DRM_MODE_FLAG_PVSYNC | DRM_MODE_FLAG_PHSYNC,
> +};
> +
> +static const struct panel_desc waveshare_50_lcd_c_panel = {
> + .modes = &waveshare_50_lcd_c_mode,
> + .num_modes = 1,
> + .bpc = 8,
> + .size = {
> + .width = 109,
> + .height = 66,
> + },
> + .bus_format = MEDIA_BUS_FMT_RGB888_1X24,
> + .connector_type = DRM_MODE_CONNECTOR_DPI,
> + .bus_flags = DRM_BUS_FLAG_PIXDATA_SAMPLE_POSEDGE |
> + DRM_BUS_FLAG_SYNC_SAMPLE_POSEDGE,
> +};
> +
> +static const struct drm_display_mode waveshare_50_lcd_d_mode = {
> + .clock = 83333,
> + .hdisplay = 720,
> + .hsync_start = 720 + 100,
> + .hsync_end = 720 + 100 + 80,
> + .htotal = 720 + 100 + 80 + 100,
> + .vdisplay = 1280,
> + .vsync_start = 1280 + 20,
> + .vsync_end = 1280 + 20 + 20,
> + .vtotal = 1280 + 20 + 20 + 20,
> +};
> +
> +static const struct panel_desc waveshare_50_lcd_d_panel = {
> + .modes = &waveshare_50_lcd_d_mode,
> + .num_modes = 1,
> + .bpc = 8,
> + .size = {
> + .width = 62,
> + .height = 110,
> + },
> + .bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG,
> + .connector_type = DRM_MODE_CONNECTOR_LVDS,
> +};
> +
> +static const struct drm_display_mode waveshare_625_lcd_mode = {
> + .clock = 83333,
> + .hdisplay = 720,
> + .hsync_start = 720 + 50,
> + .hsync_end = 720 + 50 + 50,
> + .htotal = 720 + 50 + 50 + 50,
> + .vdisplay = 1560,
> + .vsync_start = 1560 + 20,
> + .vsync_end = 1560 + 20 + 20,
> + .vtotal = 1560 + 20 + 20 + 20,
> +};
> +
> +static const struct panel_desc waveshare_625_lcd_panel = {
> + .modes = &waveshare_625_lcd_mode,
> + .num_modes = 1,
> + .bpc = 8,
> + .size = {
> + .width = 66,
> + .height = 144,
> + },
> + .bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG,
> + .connector_type = DRM_MODE_CONNECTOR_LVDS,
> +};
> +
> +static const struct panel_desc waveshare_70_lcd_c_panel = {
> + .modes = &waveshare_50_lcd_c_mode,
> + .num_modes = 1,
> + .bpc = 8,
> + .size = {
> + .width = 155,
> + .height = 87,
> + },
> + .bus_format = MEDIA_BUS_FMT_RGB888_1X24,
> + .connector_type = DRM_MODE_CONNECTOR_DPI,
> + .bus_flags = DRM_BUS_FLAG_PIXDATA_SAMPLE_POSEDGE |
> + DRM_BUS_FLAG_SYNC_SAMPLE_POSEDGE,
> +};
> +
> +static const struct drm_display_mode waveshare_80_lcd_c_mode;
> +static const struct panel_desc waveshare_70_lcd_e_panel = {
> + .modes = &waveshare_80_lcd_c_mode,
> + .num_modes = 1,
> + .bpc = 8,
> + .size = {
> + .width = 152,
> + .height = 95,
> + },
> + .bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG,
> + .connector_type = DRM_MODE_CONNECTOR_LVDS,
> +};
> +
> +static const struct drm_display_mode waveshare_70_lcd_h_mode = {
> + .clock = 83333,
> + .hdisplay = 1280,
> + .hsync_start = 1280 + 64,
> + .hsync_end = 1280 + 64 + 64,
> + .htotal = 1280 + 64 + 64 + 64,
> + .vdisplay = 720,
> + .vsync_start = 720 + 64,
> + .vsync_end = 720 + 64 + 64,
> + .vtotal = 720 + 64 + 64 + 64,
> +};
> +
> +static const struct panel_desc waveshare_70_lcd_h_panel = {
> + .modes = &waveshare_70_lcd_h_mode,
> + .num_modes = 1,
> + .bpc = 8,
> + .size = {
> + .width = 155,
> + .height = 88,
> + },
> + .bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG,
> + .connector_type = DRM_MODE_CONNECTOR_LVDS,
> +};
> +
> +static const struct drm_display_mode waveshare_79_lcd_mode = {
> + .clock = 50000,
> + .hdisplay = 400,
> + .hsync_start = 400 + 40,
> + .hsync_end = 400 + 40 + 30,
> + .htotal = 400 + 40 + 30 + 40,
> + .vdisplay = 1280,
> + .vsync_start = 1280 + 20,
> + .vsync_end = 1280 + 20 + 10,
> + .vtotal = 1280 + 20 + 10 + 20,
> +};
> +
> +static const struct panel_desc waveshare_79_lcd_panel = {
> + .modes = &waveshare_79_lcd_mode,
> + .num_modes = 1,
> + .bpc = 8,
> + .size = {
> + .width = 60,
> + .height = 191,
> + },
> + .bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG,
> + .connector_type = DRM_MODE_CONNECTOR_LVDS,
> +};
> +
> +static const struct drm_display_mode waveshare_80_lcd_c_mode = {
> + .clock = 83333,
> + .hdisplay = 1280,
> + .hsync_start = 1280 + 156,
> + .hsync_end = 1280 + 156 + 20,
> + .htotal = 1280 + 156 + 20 + 40,
> + .vdisplay = 800,
> + .vsync_start = 800 + 40,
> + .vsync_end = 800 + 40 + 48,
> + .vtotal = 800 + 40 + 48 + 40,
> +};
> +
> +static const struct panel_desc waveshare_80_lcd_c_panel = {
> + .modes = &waveshare_80_lcd_c_mode,
> + .num_modes = 1,
> + .bpc = 8,
> + .size = {
> + .width = 173,
> + .height = 108,
> + },
> + .bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG,
> + .connector_type = DRM_MODE_CONNECTOR_LVDS,
> +};
> +
> +static const struct drm_display_mode waveshare_88_lcd_mode = {
> + .clock = 83333,
> + .hdisplay = 480,
> + .hsync_start = 480 + 50,
> + .hsync_end = 480 + 50 + 50,
> + .htotal = 480 + 50 + 50 + 50,
> + .vdisplay = 1920,
> + .vsync_start = 1920 + 20,
> + .vsync_end = 1920 + 20 + 20,
> + .vtotal = 1920 + 20 + 20 + 20,
> +};
> +
> +static const struct panel_desc waveshare_88_lcd_panel = {
> + .modes = &waveshare_88_lcd_mode,
> + .num_modes = 1,
> + .bpc = 8,
> + .size = {
> + .width = 56,
> + .height = 220,
> + },
> + .bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG,
> + .connector_type = DRM_MODE_CONNECTOR_LVDS,
> +};
> +
> +static const struct panel_desc waveshare_101_lcd_c_panel = {
> + .modes = &waveshare_80_lcd_c_mode,
> + .num_modes = 1,
> + .bpc = 8,
> + .size = {
> + .width = 217,
> + .height = 136,
> + },
> + .bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG,
> + .connector_type = DRM_MODE_CONNECTOR_LVDS,
> +};
> +
> +static const struct drm_display_mode waveshare_119_lcd_mode = {
> + .clock = 50000,
> + .hdisplay = 320,
> + .hsync_start = 320 + 60,
> + .hsync_end = 320 + 60 + 60,
> + .htotal = 320 + 60 + 60 + 60,
> + .vdisplay = 1480,
> + .vsync_start = 1480 + 60,
> + .vsync_end = 1480 + 60 + 60,
> + .vtotal = 1480 + 60 + 60 + 60,
> +};
> +
> +static const struct panel_desc waveshare_119_lcd_panel = {
> + .modes = &waveshare_119_lcd_mode,
> + .num_modes = 1,
> + .bpc = 8,
> + .size = {
> + .width = 58,
> + .height = 268,
> + },
> + .bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG,
> + .connector_type = DRM_MODE_CONNECTOR_LVDS,
> +};
> +
> static const struct drm_display_mode waveshare_133inch_mode = {
> .clock = 148500,
> .hdisplay = 1920,
> @@ -5697,6 +6033,51 @@ static const struct of_device_id platform_of_match[] = {
> }, {
> .compatible = "vxt,vl050-8048nt-c01",
> .data = &vl050_8048nt_c01,
> + }, {
> + .compatible = "waveshare,2.8inch-panel",
> + .data = &waveshare_28_lcd_panel
> + }, {
> + .compatible = "waveshare,3.4inch-c-panel",
> + .data = &waveshare_34_lcd_c_panel
> + }, {
> + .compatible = "waveshare,4.0inch-panel",
> + .data = &waveshare_40_lcd_panel
> + }, {
> + .compatible = "waveshare,4.0inch-c-panel",
> + .data = &waveshare_40_lcd_c_panel
> + }, {
> + .compatible = "waveshare,5.0inch-c-panel",
> + .data = &waveshare_50_lcd_c_panel
> + }, {
> + .compatible = "waveshare,5.0inch-d-panel",
> + .data = &waveshare_50_lcd_d_panel
> + }, {
> + .compatible = "waveshare,6.25inch-panel",
> + .data = &waveshare_625_lcd_panel
> + }, {
> + .compatible = "waveshare,7.0inch-c-panel",
> + .data = &waveshare_70_lcd_c_panel
> + }, {
> + .compatible = "waveshare,7.0inch-e-panel",
> + .data = &waveshare_70_lcd_e_panel
> + }, {
> + .compatible = "waveshare,7.0inch-h-panel",
> + .data = &waveshare_70_lcd_h_panel
> + }, {
> + .compatible = "waveshare,7.9inch-panel",
> + .data = &waveshare_79_lcd_panel
> + }, {
> + .compatible = "waveshare,8.0inch-c-panel",
> + .data = &waveshare_80_lcd_c_panel
> + }, {
> + .compatible = "waveshare,8.8inch-panel",
> + .data = &waveshare_88_lcd_panel
> + }, {
> + .compatible = "waveshare,10.1inch-c-panel",
> + .data = &waveshare_101_lcd_c_panel
> + }, {
> + .compatible = "waveshare,11.9inch-panel",
> + .data = &waveshare_119_lcd_panel
> }, {
> .compatible = "waveshare,13.3inch-panel",
> .data = &waveshare_133inch,
>
LGTM, panel-simple for panels that autoconfigures themselves from a flash
Reviewed-by: Neil Armstrong <neil.armstrong@linaro.org>
Thanks,
Neil
^ permalink raw reply [flat|nested] 15+ messages in thread
end of thread, other threads:[~2026-04-09 12:59 UTC | newest]
Thread overview: 15+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-03-30 13:25 [PATCH 0/4] drm/panel: simple: add Waveshare LCD panels Dmitry Baryshkov
2026-03-30 13:25 ` [PATCH 1/4] dt-bindings: display: waveshare,dsp2dpi: describe DSI2LVDS setup Dmitry Baryshkov
2026-03-31 8:40 ` Krzysztof Kozlowski
2026-03-31 15:01 ` Dmitry Baryshkov
2026-03-31 15:44 ` Dmitry Baryshkov
2026-03-30 13:25 ` [PATCH 2/4] drm/bridge: waveshare-dsi: support DSI LCD kits with LVDS panels Dmitry Baryshkov
2026-03-30 13:25 ` [PATCH 3/4] dt-bindings: display: panel: add Waveshare LCD panels Dmitry Baryshkov
2026-03-31 8:40 ` Krzysztof Kozlowski
2026-03-30 13:25 ` [PATCH 4/4] drm/panel: simple: " Dmitry Baryshkov
2026-04-09 12:58 ` Neil Armstrong
2026-03-30 17:21 ` [PATCH 0/4] " Marek Vasut
2026-03-31 1:22 ` Dmitry Baryshkov
2026-03-31 3:11 ` Marek Vasut
2026-03-31 15:36 ` Dmitry Baryshkov
2026-03-31 21:46 ` Marek Vasut
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox