[PATCH V2 2/4] nv3051d: Add Powkiddy RK2023 Panel Support
Jessica Zhang
quic_jesszhan at quicinc.com
Wed Nov 15 14:37:47 PST 2023
On 11/9/2023 1:50 PM, Chris Morgan wrote:
> From: Chris Morgan <macromorgan at hotmail.com>
>
> Refactor the driver to add support for the powkiddy,rk2023-panel
> panel. This panel is extremely similar to the rg353p-panel but
> requires a smaller vertical back porch and isn't as tolerant of
> higher speeds. Note that while all of these panels are identical in
> size (70x57) it is possible future panels may not be.
>
> Tested on my RG351V, RG353P, RG353V, and RK2023.
>
> Signed-off-by: Chris Morgan <macromorgan at hotmail.com>
> ---
> .../gpu/drm/panel/panel-newvision-nv3051d.c | 57 +++++++++++++++----
> 1 file changed, 46 insertions(+), 11 deletions(-)
>
> diff --git a/drivers/gpu/drm/panel/panel-newvision-nv3051d.c b/drivers/gpu/drm/panel/panel-newvision-nv3051d.c
> index 79de6c886292..94d89ffd596b 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;
> + u32 mode_flags;
> };
>
> struct panel_nv3051d {
> @@ -261,6 +262,8 @@ static int panel_nv3051d_unprepare(struct drm_panel *panel)
>
> usleep_range(10000, 15000);
>
> + gpiod_set_value_cansleep(ctx->reset_gpio, 1);
> +
Hi Chris,
Is this to address a suspend/resume issue similar to what was done here [1]?
If so, I think maybe this can go as a separate Fixes patch.
Thanks,
Jessica Zhang
[1] https://patchwork.freedesktop.org/patch/567670/?series=126479&rev=1
> regulator_disable(ctx->vdd);
>
> return 0;
> @@ -385,15 +388,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;
> -
> - /*
> - * The panel in the RG351V is identical to the 353P, except it
> - * requires MIPI_DSI_CLOCK_NON_CONTINUOUS to operate correctly.
> - */
> - if (of_device_is_compatible(dev->of_node, "anbernic,rg351v-panel"))
> - dsi->mode_flags |= MIPI_DSI_CLOCK_NON_CONTINUOUS;
> + dsi->mode_flags = ctx->panel_info->mode_flags;
>
> drm_panel_init(&ctx->panel, &dsi->dev, &panel_nv3051d_funcs,
> DRM_MODE_CONNECTOR_DSI);
> @@ -481,16 +476,56 @@ static const struct drm_display_mode nv3051d_rgxx3_modes[] = {
> },
> };
>
> -static const struct nv3051d_panel_info nv3051d_rgxx3_info = {
> +static const struct drm_display_mode nv3051d_rk2023_modes[] = {
> + {
> + .hdisplay = 640,
> + .hsync_start = 640 + 40,
> + .hsync_end = 640 + 40 + 2,
> + .htotal = 640 + 40 + 2 + 80,
> + .vdisplay = 480,
> + .vsync_start = 480 + 18,
> + .vsync_end = 480 + 18 + 2,
> + .vtotal = 480 + 18 + 2 + 4,
> + .clock = 24150,
> + .flags = DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC,
> + },
> +};
> +
> +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 nv3051d_panel_info nv3051d_rg353p_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,
> +};
> +
> +static const struct nv3051d_panel_info nv3051d_rk2023_info = {
> + .display_modes = nv3051d_rk2023_modes,
> + .num_modes = ARRAY_SIZE(nv3051d_rk2023_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,
> };
>
> 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 },
> + { .compatible = "anbernic,rg353p-panel", .data = &nv3051d_rg353p_info },
> + { .compatible = "powkiddy,rk2023-panel", .data = &nv3051d_rk2023_info },
> { /* sentinel */ }
> };
> MODULE_DEVICE_TABLE(of, newvision_nv3051d_of_match);
> --
> 2.34.1
>
More information about the Linux-rockchip
mailing list