* [PATCH v3 0/2] drm/panel: simple: add Waveshare LCD panels
@ 2026-04-12 17:32 Dmitry Baryshkov
2026-04-12 17:32 ` [PATCH v3 1/2] dt-bindings: display: waveshare,dsp2dpi: describe DSI2LVDS setup Dmitry Baryshkov
` (2 more replies)
0 siblings, 3 replies; 11+ messages in thread
From: Dmitry Baryshkov @ 2026-04-12 17:32 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>
---
Changes in v3:
- Rebased on drm-misc-next, dropping applied patches
- Link to v2: https://patch.msgid.link/20260331-ws-lcd-v2-0-a1add63b6eb6@oss.qualcomm.com
Changes in v2:
- Updated waveshare,dsi2dpi schema to implicitly mention LVDS
(Krzysztof)
- Updated commit message to explain why the ICN6202 / ICN6211 bridges
are not a part of the DT bindings.
- Link to v1: https://patch.msgid.link/20260330-ws-lcd-v1-0-309834a435c0@oss.qualcomm.com
---
Dmitry Baryshkov (2):
dt-bindings: display: waveshare,dsp2dpi: describe DSI2LVDS setup
drm/bridge: waveshare-dsi: support DSI LCD kits with LVDS panels
.../devicetree/bindings/display/bridge/waveshare,dsi2dpi.yaml | 9 ++++++---
drivers/gpu/drm/bridge/waveshare-dsi.c | 5 +++--
2 files changed, 9 insertions(+), 5 deletions(-)
---
base-commit: efcd474ed273ae7da614b30e798651c6d57d3109
change-id: 20260330-ws-lcd-b65c03c5ac17
Best regards,
--
With best wishes
Dmitry
^ permalink raw reply [flat|nested] 11+ messages in thread* [PATCH v3 1/2] dt-bindings: display: waveshare,dsp2dpi: describe DSI2LVDS setup 2026-04-12 17:32 [PATCH v3 0/2] drm/panel: simple: add Waveshare LCD panels Dmitry Baryshkov @ 2026-04-12 17:32 ` Dmitry Baryshkov 2026-04-13 6:51 ` [PATCH v3 1/2] dt-bindings: display: waveshare, dsp2dpi: " Krzysztof Kozlowski 2026-04-13 8:54 ` Claude review: dt-bindings: display: waveshare,dsp2dpi: " Claude Code Review Bot 2026-04-12 17:32 ` [PATCH v3 2/2] drm/bridge: waveshare-dsi: support DSI LCD kits with LVDS panels Dmitry Baryshkov 2026-04-13 8:54 ` Claude review: drm/panel: simple: add Waveshare LCD panels Claude Code Review Bot 2 siblings, 2 replies; 11+ messages in thread From: Dmitry Baryshkov @ 2026-04-12 17:32 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 itmized and it uses Waveshare prefix since the rest of the integration details are not known). Note: the ICN6202 / ICN6211 bridges are completely handled by the board itself, they should not be programmed by the host (which otherwise might override correct params), etc. As such, it doesn't make sense to use those in the compat strings. I consider those to be an internal detail of the setup. Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com> --- .../devicetree/bindings/display/bridge/waveshare,dsi2dpi.yaml | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/Documentation/devicetree/bindings/display/bridge/waveshare,dsi2dpi.yaml b/Documentation/devicetree/bindings/display/bridge/waveshare,dsi2dpi.yaml index 3820dd7e11af..4d34a92192bf 100644 --- a/Documentation/devicetree/bindings/display/bridge/waveshare,dsi2dpi.yaml +++ b/Documentation/devicetree/bindings/display/bridge/waveshare,dsi2dpi.yaml @@ -10,11 +10,14 @@ maintainers: - Joseph Guo <qijian.guo@nxp.com> description: - Waveshare bridge board is part of Waveshare panel which converts DSI to DPI. + Waveshare bridge board is part of Waveshare panel which converts DSI to DPI + or LVDS. properties: compatible: - const: waveshare,dsi2dpi + enum: + - waveshare,dsi2dpi + - waveshare,dsi2lvds reg: maxItems: 1 @@ -53,7 +56,7 @@ properties: port@1: $ref: /schemas/graph.yaml#/properties/port description: - Video port for MIPI DPI output panel. + Video port for MIPI DPI or LVDS output to the panel. required: - port@0 -- 2.47.3 ^ permalink raw reply related [flat|nested] 11+ messages in thread
* Re: [PATCH v3 1/2] dt-bindings: display: waveshare, dsp2dpi: describe DSI2LVDS setup 2026-04-12 17:32 ` [PATCH v3 1/2] dt-bindings: display: waveshare,dsp2dpi: describe DSI2LVDS setup Dmitry Baryshkov @ 2026-04-13 6:51 ` Krzysztof Kozlowski 2026-04-13 8:54 ` Claude review: dt-bindings: display: waveshare,dsp2dpi: " Claude Code Review Bot 1 sibling, 0 replies; 11+ messages in thread From: Krzysztof Kozlowski @ 2026-04-13 6:51 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 Sun, Apr 12, 2026 at 08:32:24PM +0300, Dmitry Baryshkov wrote: > 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 itmized and it uses Waveshare prefix since the > rest of the integration details are not known). > > Note: the ICN6202 / ICN6211 bridges are completely handled by the board > itself, they should not be programmed by the host (which otherwise might > override correct params), etc. As such, it doesn't make sense to use > those in the compat strings. I consider those to be an internal detail > of the setup. > > Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com> > --- > .../devicetree/bindings/display/bridge/waveshare,dsi2dpi.yaml | 9 ++++++--- > 1 file changed, 6 insertions(+), 3 deletions(-) Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@oss.qualcomm.com> Best regards, Krzysztof ^ permalink raw reply [flat|nested] 11+ messages in thread
* Claude review: dt-bindings: display: waveshare,dsp2dpi: describe DSI2LVDS setup 2026-04-12 17:32 ` [PATCH v3 1/2] dt-bindings: display: waveshare,dsp2dpi: describe DSI2LVDS setup Dmitry Baryshkov 2026-04-13 6:51 ` [PATCH v3 1/2] dt-bindings: display: waveshare, dsp2dpi: " Krzysztof Kozlowski @ 2026-04-13 8:54 ` Claude Code Review Bot 1 sibling, 0 replies; 11+ messages in thread From: Claude Code Review Bot @ 2026-04-13 8:54 UTC (permalink / raw) To: dri-devel-reviews Patch Review **Subject line typo**: The subject says `dsp2dpi` but the binding file is `dsi2dpi`. This is a minor cosmetic issue in the commit subject only (the actual file path in the diff is correct). The binding changes are straightforward: 1. **Compatible changed from `const` to `enum`** — correctly adds `waveshare,dsi2lvds` alongside the existing `waveshare,dsi2dpi`: ```yaml compatible: - const: waveshare,dsi2dpi + enum: + - waveshare,dsi2dpi + - waveshare,dsi2lvds ``` This is the standard approach for extending a single-compatible binding. 2. **Description updates** — appropriately broadened to mention "or LVDS": ```yaml - Waveshare bridge board is part of Waveshare panel which converts DSI to DPI. + Waveshare bridge board is part of Waveshare panel which converts DSI to DPI + or LVDS. ``` and: ```yaml - Video port for MIPI DPI output panel. + Video port for MIPI DPI or LVDS output to the panel. ``` The commit message has a useful note explaining why the ICN6202/ICN6211 bridges are not itemized in the compatible strings (they're handled entirely on the board, not by the host). This is good context for DT reviewers. Minor nit: "itmized" in the commit body is a typo for "itemized". No issues with the binding schema itself. --- Generated by Claude Code Patch Reviewer ^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH v3 2/2] drm/bridge: waveshare-dsi: support DSI LCD kits with LVDS panels 2026-04-12 17:32 [PATCH v3 0/2] drm/panel: simple: add Waveshare LCD panels Dmitry Baryshkov 2026-04-12 17:32 ` [PATCH v3 1/2] dt-bindings: display: waveshare,dsp2dpi: describe DSI2LVDS setup Dmitry Baryshkov @ 2026-04-12 17:32 ` Dmitry Baryshkov 2026-04-13 8:54 ` Claude review: " Claude Code Review Bot 2026-04-13 8:54 ` Claude review: drm/panel: simple: add Waveshare LCD panels Claude Code Review Bot 2 siblings, 1 reply; 11+ messages in thread From: Dmitry Baryshkov @ 2026-04-12 17:32 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] 11+ messages in thread
* Claude review: drm/bridge: waveshare-dsi: support DSI LCD kits with LVDS panels 2026-04-12 17:32 ` [PATCH v3 2/2] drm/bridge: waveshare-dsi: support DSI LCD kits with LVDS panels Dmitry Baryshkov @ 2026-04-13 8:54 ` Claude Code Review Bot 0 siblings, 0 replies; 11+ messages in thread From: Claude Code Review Bot @ 2026-04-13 8:54 UTC (permalink / raw) To: dri-devel-reviews Patch Review Clean driver change. The approach uses `i2c_get_match_data()` to retrieve the connector type from the OF match table, which is the preferred kernel pattern for parameterizing drivers by compatible string. 1. **Match data retrieval**: ```c - ws->bridge.type = DRM_MODE_CONNECTOR_DPI; + ws->bridge.type = (uintptr_t)i2c_get_match_data(i2c); ``` The `(uintptr_t)` cast from `const void *` is the standard idiom seen throughout the DRM subsystem (e.g., `display-connector.c`, `lvds-codec.c`). `DRM_MODE_CONNECTOR_DPI` is 17 and `DRM_MODE_CONNECTOR_LVDS` is 7 — both non-zero, so there's no ambiguity with NULL. `i2c_get_match_data` will check OF match data, which is correct here since the driver only has an `of_device_id` table (no `i2c_device_id` table with data). 2. **Match table update**: ```c - {.compatible = "waveshare,dsi2dpi",}, + {.compatible = "waveshare,dsi2dpi", .data = (void *)DRM_MODE_CONNECTOR_DPI, }, + {.compatible = "waveshare,dsi2lvds", .data = (void *)DRM_MODE_CONNECTOR_LVDS, }, ``` Correct — maintains backward compatibility for existing `dsi2dpi` DTs while adding the new LVDS variant. One minor observation: there's no `MODULE_DESCRIPTION` update to mention LVDS (currently says "Waveshare DSI2DPI bridge driver"), but that's cosmetic and not worth holding the patch for. No functional issues. The series is minimal, correct, and ready to apply. --- Generated by Claude Code Patch Reviewer ^ permalink raw reply [flat|nested] 11+ messages in thread
* Claude review: drm/panel: simple: add Waveshare LCD panels 2026-04-12 17:32 [PATCH v3 0/2] drm/panel: simple: add Waveshare LCD panels Dmitry Baryshkov 2026-04-12 17:32 ` [PATCH v3 1/2] dt-bindings: display: waveshare,dsp2dpi: describe DSI2LVDS setup Dmitry Baryshkov 2026-04-12 17:32 ` [PATCH v3 2/2] drm/bridge: waveshare-dsi: support DSI LCD kits with LVDS panels Dmitry Baryshkov @ 2026-04-13 8:54 ` Claude Code Review Bot 2 siblings, 0 replies; 11+ messages in thread From: Claude Code Review Bot @ 2026-04-13 8:54 UTC (permalink / raw) To: dri-devel-reviews Overall Series Review Subject: drm/panel: simple: add Waveshare LCD panels Author: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com> Patches: 4 Reviewed: 2026-04-13T18:54:38.289708 --- This is a clean, well-scoped 2-patch series from Dmitry Baryshkov (v3) adding LVDS panel support to the existing Waveshare DSI bridge infrastructure. The series extends the DT binding to allow a `waveshare,dsi2lvds` compatible string and teaches the driver to set the bridge output type accordingly. The approach is minimal and follows established kernel patterns. No functional issues found. The series looks good and is ready to merge. --- Generated by Claude Code Patch Reviewer ^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH v2 0/4] drm/panel: simple: add Waveshare LCD panels
@ 2026-03-31 15:44 Dmitry Baryshkov
2026-03-31 15:44 ` [PATCH v2 4/4] " Dmitry Baryshkov
2026-03-31 21:39 ` Claude Code Review Bot
0 siblings, 2 replies; 11+ messages in thread
From: Dmitry Baryshkov @ 2026-03-31 15:44 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, Krzysztof Kozlowski
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>
---
Changes in v2:
- Updated waveshare,dsi2dpi schema to implicitly mention LVDS
(Krzysztof)
- Updated commit message to explain why the ICN6202 / ICN6211 bridges
are not a part of the DT bindings.
- Link to v1: https://patch.msgid.link/20260330-ws-lcd-v1-0-309834a435c0@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 | 9 +-
.../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, 418 insertions(+), 5 deletions(-)
---
base-commit: 3b058d1aeeeff27a7289529c4944291613b364e9
change-id: 20260330-ws-lcd-b65c03c5ac17
Best regards,
--
With best wishes
Dmitry
^ permalink raw reply [flat|nested] 11+ messages in thread* [PATCH v2 4/4] drm/panel: simple: add Waveshare LCD panels 2026-03-31 15:44 [PATCH v2 0/4] " Dmitry Baryshkov @ 2026-03-31 15:44 ` Dmitry Baryshkov 2026-03-31 21:39 ` Claude review: " Claude Code Review Bot 2026-03-31 21:39 ` Claude Code Review Bot 1 sibling, 1 reply; 11+ messages in thread From: Dmitry Baryshkov @ 2026-03-31 15:44 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] 11+ messages in thread
* Claude review: drm/panel: simple: add Waveshare LCD panels 2026-03-31 15:44 ` [PATCH v2 4/4] " Dmitry Baryshkov @ 2026-03-31 21:39 ` Claude Code Review Bot 0 siblings, 0 replies; 11+ messages in thread From: Claude Code Review Bot @ 2026-03-31 21:39 UTC (permalink / raw) To: dri-devel-reviews Patch Review This is the bulk of the series, adding 15 panel definitions. Several observations: **1. Missing trailing commas in OF table entries.** Every new `.data` line is missing a trailing comma, while the existing entries all have them: ```c }, { .compatible = "waveshare,2.8inch-panel", .data = &waveshare_28_lcd_panel /* <-- missing comma */ }, { ``` Compare with existing style: ```c }, { .compatible = "waveshare,13.3inch-panel", .data = &waveshare_133inch, /* <-- has comma */ }, { ``` All 15 new entries are missing the trailing comma. While this compiles fine (the comma is optional before `}`), the existing code consistently uses trailing commas and this should match for style consistency. **2. Forward declaration of `waveshare_80_lcd_c_mode`.** The patch uses: ```c 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, ``` ...with the actual definition appearing later. This works in C but is unusual for this file. It could be avoided by simply reordering the definitions so `waveshare_80_lcd_c_mode` and `waveshare_80_lcd_c_panel` appear before `waveshare_70_lcd_e_panel`. Since the panels are ordered numerically, moving 8.0" before 7.0"-E would be a minor ordering inconsistency, but the forward declaration is more surprising than a slightly out-of-order definition. Either approach is acceptable; just noting the trade-off. **3. Mode reuse pattern.** Several panels share display modes: - `waveshare_70_lcd_c_panel` reuses `waveshare_50_lcd_c_mode` (both 1024x600) - `waveshare_70_lcd_e_panel` reuses `waveshare_80_lcd_c_mode` (both 1280x800) - `waveshare_101_lcd_c_panel` reuses `waveshare_80_lcd_c_mode` (both 1280x800) This is fine and follows existing practice in panel-simple.c where panels with identical timings share mode structs. **4. Clock values.** The `waveshare_34_lcd_c_mode` has `.clock = 50000` for an 800x800 panel with htotal=958, vtotal=828. That gives a refresh rate of 50000000/(958*828) = ~63 Hz, which seems reasonable. The `.clock = 83333` entries (e.g., for 720x1280 @ 83333000/(1000*1340) = ~62 Hz) also check out. The timings appear plausible. **5. Pixel format note.** The commit message honestly states: "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." This is worth keeping in mind -- the LVDS panels all use `MEDIA_BUS_FMT_RGB888_1X7X4_SPWG` (JEIDA mapping), which is a reasonable default but may need correction if specific panels actually use VESA mapping (`MEDIA_BUS_FMT_RGB888_1X7X4_JEIDA` -- though SPWG and JEIDA are effectively the same thing in this context). Since the bridge handles the conversion, this shouldn't matter in practice. **Summary for patch 4:** Add trailing commas to all 15 OF table entries. Consider eliminating the forward declaration by reordering definitions. --- Generated by Claude Code Patch Reviewer ^ permalink raw reply [flat|nested] 11+ messages in thread
* Claude review: drm/panel: simple: add Waveshare LCD panels 2026-03-31 15:44 [PATCH v2 0/4] " Dmitry Baryshkov 2026-03-31 15:44 ` [PATCH v2 4/4] " Dmitry Baryshkov @ 2026-03-31 21:39 ` Claude Code Review Bot 1 sibling, 0 replies; 11+ messages in thread From: Claude Code Review Bot @ 2026-03-31 21:39 UTC (permalink / raw) To: dri-devel-reviews Overall Series Review Subject: drm/panel: simple: add Waveshare LCD panels Author: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com> Patches: 5 Reviewed: 2026-04-01T07:39:19.359525 --- This is a well-structured, straightforward series by Dmitry Baryshkov adding support for additional Waveshare DSI LCD panel kits. The series is logically organized: bindings first (patches 1 and 3), then driver support (patches 2 and 4). The technical approach is sound -- reusing the existing waveshare-dsi bridge driver with a new compatible for LVDS variants, and adding panel timing definitions in panel-simple.c. The series has one notable issue: **missing trailing commas** in the OF match table entries in patch 4. There is also a forward declaration of `waveshare_80_lcd_c_mode` that, while functional, could be avoided by reordering the definitions. Overall this looks ready with minor style fixes. --- --- Generated by Claude Code Patch Reviewer ^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH 0/4] drm/panel: simple: add Waveshare LCD panels
@ 2026-03-30 13:25 Dmitry Baryshkov
2026-03-30 13:25 ` [PATCH 4/4] " Dmitry Baryshkov
2026-03-31 7:17 ` Claude Code Review Bot
0 siblings, 2 replies; 11+ 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] 11+ messages in thread* [PATCH 4/4] drm/panel: simple: add Waveshare LCD panels 2026-03-30 13:25 [PATCH 0/4] " Dmitry Baryshkov @ 2026-03-30 13:25 ` Dmitry Baryshkov 2026-03-31 7:17 ` Claude review: " Claude Code Review Bot 2026-03-31 7:17 ` Claude Code Review Bot 1 sibling, 1 reply; 11+ 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] 11+ messages in thread
* Claude review: drm/panel: simple: add Waveshare LCD panels 2026-03-30 13:25 ` [PATCH 4/4] " Dmitry Baryshkov @ 2026-03-31 7:17 ` Claude Code Review Bot 0 siblings, 0 replies; 11+ messages in thread From: Claude Code Review Bot @ 2026-03-31 7:17 UTC (permalink / raw) To: dri-devel-reviews Patch Review This is the main patch adding 15 panel definitions (~381 lines). A few issues: **1. Missing trailing commas in OF match table (style issue):** Every new entry is missing a trailing comma after `.data`: ```c }, { .compatible = "waveshare,2.8inch-panel", .data = &waveshare_28_lcd_panel }, { ``` The existing code uses trailing commas consistently (e.g., `.data = &waveshare_133inch,`). All 15 new entries should have trailing commas added for consistency with the rest of the file. **2. Forward declaration of `waveshare_80_lcd_c_mode`:** ```c 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, ... }; ``` The actual definition of `waveshare_80_lcd_c_mode` comes ~60 lines later. While this is valid C (tentative definition completed by the later actual definition), it's an unusual pattern in panel-simple.c. It would be cleaner to simply reorder the definitions so `waveshare_80_lcd_c_mode` is defined before `waveshare_70_lcd_e_panel`, just as `waveshare_50_lcd_c_mode` is defined before `waveshare_70_lcd_c_panel` which also shares a mode. **3. Mode reuse is good but should be documented:** Several panels share modes (same resolution/timings, different physical sizes): - `waveshare_70_lcd_c_panel` reuses `waveshare_50_lcd_c_mode` (1024x600) - `waveshare_70_lcd_e_panel` reuses `waveshare_80_lcd_c_mode` (1280x800) - `waveshare_101_lcd_c_panel` reuses `waveshare_80_lcd_c_mode` (1280x800) This is fine and avoids duplication, but the forward declaration for one of them (point 2) should be avoided by reordering. **4. Minor commit message typo:** "serie" should be "series": ``` Waveshare have a serie of DSI panel kits ``` **5. Pixel format caveat:** The commit message honestly notes: ``` 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. ``` This is good transparency but worth flagging — the DPI panels use `MEDIA_BUS_FMT_RGB888_1X24` and the LVDS panels use `MEDIA_BUS_FMT_RGB888_1X7X4_SPWG`. If any panel actually uses a different LVDS mapping (e.g., JEIDA), it would produce incorrect colors. Since the bridge firmware handles the conversion, this may not matter in practice, but it's worth confirming with hardware if possible. --- Generated by Claude Code Patch Reviewer ^ permalink raw reply [flat|nested] 11+ messages in thread
* Claude review: drm/panel: simple: add Waveshare LCD panels 2026-03-30 13:25 [PATCH 0/4] " Dmitry Baryshkov 2026-03-30 13:25 ` [PATCH 4/4] " Dmitry Baryshkov @ 2026-03-31 7:17 ` Claude Code Review Bot 1 sibling, 0 replies; 11+ messages in thread From: Claude Code Review Bot @ 2026-03-31 7:17 UTC (permalink / raw) To: dri-devel-reviews Overall Series Review Subject: drm/panel: simple: add Waveshare LCD panels Author: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com> Patches: 8 Reviewed: 2026-03-31T17:17:00.432348 --- This is a straightforward series adding support for a family of Waveshare DSI LCD panel kits to the kernel. The series is well-structured: DT bindings first (patches 1, 3), then driver support (patches 2, 4). The code is largely boilerplate panel definitions which is expected for panel-simple.c additions. The series is generally clean but has a few issues: missing trailing commas in the OF match table entries (style inconsistency), an unusual forward declaration pattern, and minor typos in commit messages. The timing values all produce reasonable ~60 Hz refresh rates. **Verdict:** Mostly ready, minor style issues to address. --- --- Generated by Claude Code Patch Reviewer ^ permalink raw reply [flat|nested] 11+ messages in thread
end of thread, other threads:[~2026-04-13 8:54 UTC | newest] Thread overview: 11+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2026-04-12 17:32 [PATCH v3 0/2] drm/panel: simple: add Waveshare LCD panels Dmitry Baryshkov 2026-04-12 17:32 ` [PATCH v3 1/2] dt-bindings: display: waveshare,dsp2dpi: describe DSI2LVDS setup Dmitry Baryshkov 2026-04-13 6:51 ` [PATCH v3 1/2] dt-bindings: display: waveshare, dsp2dpi: " Krzysztof Kozlowski 2026-04-13 8:54 ` Claude review: dt-bindings: display: waveshare,dsp2dpi: " Claude Code Review Bot 2026-04-12 17:32 ` [PATCH v3 2/2] drm/bridge: waveshare-dsi: support DSI LCD kits with LVDS panels Dmitry Baryshkov 2026-04-13 8:54 ` Claude review: " Claude Code Review Bot 2026-04-13 8:54 ` Claude review: drm/panel: simple: add Waveshare LCD panels Claude Code Review Bot -- strict thread matches above, loose matches on Subject: below -- 2026-03-31 15:44 [PATCH v2 0/4] " Dmitry Baryshkov 2026-03-31 15:44 ` [PATCH v2 4/4] " Dmitry Baryshkov 2026-03-31 21:39 ` Claude review: " Claude Code Review Bot 2026-03-31 21:39 ` Claude Code Review Bot 2026-03-30 13:25 [PATCH 0/4] " Dmitry Baryshkov 2026-03-30 13:25 ` [PATCH 4/4] " Dmitry Baryshkov 2026-03-31 7:17 ` Claude review: " Claude Code Review Bot 2026-03-31 7:17 ` Claude Code Review Bot
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox