* [PATCH 1/2] dt-bindings: display: newvision,nv3051d: Add Anbernic 351V Support
2023-08-04 16:45 [PATCH 0/2] Support Anbernic RG351V Panel Chris Morgan
@ 2023-08-04 16:45 ` Chris Morgan
2023-08-05 21:14 ` Krzysztof Kozlowski
2023-08-04 16:45 ` [PATCH 2/2] drm/panel: nv3051d: Add Support for Anbernic 351V Chris Morgan
1 sibling, 1 reply; 4+ messages in thread
From: Chris Morgan @ 2023-08-04 16:45 UTC (permalink / raw)
To: dri-devel
Cc: devicetree, conor+dt, krzysztof.kozlowski+dt, robh+dt, daniel,
airlied, sam, neil.armstrong, Chris Morgan
From: Chris Morgan <macromorgan@hotmail.com>
Document the Anbernic RG351V panel, which appears to be identical to
the panel used in their 353 series except for in inclusion of an
additional DSI format flag.
Signed-off-by: Chris Morgan <macromorgan@hotmail.com>
---
.../display/panel/newvision,nv3051d.yaml | 18 +++++++++++-------
1 file changed, 11 insertions(+), 7 deletions(-)
diff --git a/Documentation/devicetree/bindings/display/panel/newvision,nv3051d.yaml b/Documentation/devicetree/bindings/display/panel/newvision,nv3051d.yaml
index 116c1b6030a2..1226db3613e6 100644
--- a/Documentation/devicetree/bindings/display/panel/newvision,nv3051d.yaml
+++ b/Documentation/devicetree/bindings/display/panel/newvision,nv3051d.yaml
@@ -8,8 +8,8 @@ title: NewVision NV3051D based LCD panel
description: |
The NewVision NV3051D is a driver chip used to drive DSI panels. For now,
- this driver only supports the 640x480 panels found in the Anbernic RG353
- based devices.
+ this driver only supports the 640x480 panels found in the Anbernic RG351
+ and 353 based devices.
maintainers:
- Chris Morgan <macromorgan@hotmail.com>
@@ -19,11 +19,15 @@ allOf:
properties:
compatible:
- items:
- - enum:
- - anbernic,rg353p-panel
- - anbernic,rg353v-panel
- - const: newvision,nv3051d
+ oneOf:
+ - items:
+ - enum:
+ - anbernic,rg353p-panel
+ - anbernic,rg353v-panel
+ - const: newvision,nv3051d
+
+ - items:
+ - const: anbernic,rg351v-panel
reg: true
backlight: true
--
2.34.1
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [PATCH 2/2] drm/panel: nv3051d: Add Support for Anbernic 351V
2023-08-04 16:45 [PATCH 0/2] Support Anbernic RG351V Panel Chris Morgan
2023-08-04 16:45 ` [PATCH 1/2] dt-bindings: display: newvision,nv3051d: Add Anbernic 351V Support Chris Morgan
@ 2023-08-04 16:45 ` Chris Morgan
1 sibling, 0 replies; 4+ messages in thread
From: Chris Morgan @ 2023-08-04 16:45 UTC (permalink / raw)
To: dri-devel
Cc: devicetree, conor+dt, krzysztof.kozlowski+dt, robh+dt, daniel,
airlied, sam, neil.armstrong, Chris Morgan
From: Chris Morgan <macromorgan@hotmail.com>
Add support for the Anbernic 351V. Just like the 353 series the
underlying vendor is unknown/unmarked (at least not visible in a
non-destructive manner). The panel had slightly different init
sequences and timings in the BSP kernel, but works fine with the
same ones used in the existing driver. The panel will not work without
the inclusion of the MIPI_DSI_CLOCK_NON_CONTINUOUS flag, and this flag
prevents the 353 series from working correctly, so a new compatible
string is added.
Tested colors and timings using modetest and all seem to work identical
to the 353 otherwise.
Signed-off-by: Chris Morgan <macromorgan@hotmail.com>
---
.../gpu/drm/panel/panel-newvision-nv3051d.c | 18 ++++++++++++++++--
1 file changed, 16 insertions(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/panel/panel-newvision-nv3051d.c b/drivers/gpu/drm/panel/panel-newvision-nv3051d.c
index a07958038ffd..dc0d6dcca683 100644
--- a/drivers/gpu/drm/panel/panel-newvision-nv3051d.c
+++ b/drivers/gpu/drm/panel/panel-newvision-nv3051d.c
@@ -28,6 +28,7 @@ struct nv3051d_panel_info {
unsigned int num_modes;
u16 width_mm, height_mm;
u32 bus_flags;
+ unsigned long mode_flags;
};
struct panel_nv3051d {
@@ -385,8 +386,7 @@ static int panel_nv3051d_probe(struct mipi_dsi_device *dsi)
dsi->lanes = 4;
dsi->format = MIPI_DSI_FMT_RGB888;
- dsi->mode_flags = MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_BURST |
- MIPI_DSI_MODE_LPM | MIPI_DSI_MODE_NO_EOT_PACKET;
+ dsi->mode_flags = ctx->panel_info->mode_flags;
drm_panel_init(&ctx->panel, &dsi->dev, &panel_nv3051d_funcs,
DRM_MODE_CONNECTOR_DSI);
@@ -480,10 +480,24 @@ static const struct nv3051d_panel_info nv3051d_rgxx3_info = {
.width_mm = 70,
.height_mm = 57,
.bus_flags = DRM_BUS_FLAG_DE_LOW | DRM_BUS_FLAG_PIXDATA_DRIVE_NEGEDGE,
+ .mode_flags = MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_BURST |
+ MIPI_DSI_MODE_LPM | MIPI_DSI_MODE_NO_EOT_PACKET,
+};
+
+static const struct nv3051d_panel_info nv3051d_rg351v_info = {
+ .display_modes = nv3051d_rgxx3_modes,
+ .num_modes = ARRAY_SIZE(nv3051d_rgxx3_modes),
+ .width_mm = 70,
+ .height_mm = 57,
+ .bus_flags = DRM_BUS_FLAG_DE_LOW | DRM_BUS_FLAG_PIXDATA_DRIVE_NEGEDGE,
+ .mode_flags = MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_BURST |
+ MIPI_DSI_MODE_LPM | MIPI_DSI_MODE_NO_EOT_PACKET |
+ MIPI_DSI_CLOCK_NON_CONTINUOUS,
};
static const struct of_device_id newvision_nv3051d_of_match[] = {
{ .compatible = "newvision,nv3051d", .data = &nv3051d_rgxx3_info },
+ { .compatible = "anbernic,rg351v-panel", .data = &nv3051d_rg351v_info },
{ /* sentinel */ }
};
MODULE_DEVICE_TABLE(of, newvision_nv3051d_of_match);
--
2.34.1
^ permalink raw reply related [flat|nested] 4+ messages in thread