From: Sam Ravnborg <sam@ravnborg.org>
To: Miquel Raynal <miquel.raynal@bootlin.com>
Cc: Thierry Reding <thierry.reding@gmail.com>,
David Airlie <airlied@gmail.com>, Daniel Vetter <daniel@ffwll.ch>,
Maxime Ripard <mripard@kernel.org>,
dri-devel@lists.freedesktop.org, Rob Herring <robh+dt@kernel.org>,
Krzysztof Kozlowski <krzk+dt@kernel.org>,
devicetree@vger.kernel.org,
Thomas Petazzoni <thomas.petazzoni@bootlin.com>
Subject: Re: [PATCH 6/7] drm/panel: sitronix-st7789v: Add EDT ET028013DMA panel support
Date: Sat, 10 Jun 2023 22:22:51 +0200 [thread overview]
Message-ID: <20230610202251.GF1041001@ravnborg.org> (raw)
In-Reply-To: <20230609145951.853533-7-miquel.raynal@bootlin.com>
On Fri, Jun 09, 2023 at 04:59:50PM +0200, Miquel Raynal wrote:
> This panel from Emerging Display Technologies Corporation features an
> ST7789V2 panel inside which is almost identical to what the Sitronix
> panel driver supports.
>
> In practice, the module physical size is specific, and experiments show
> that the display will malfunction if any of the following situation
> occurs:
> * Pixel clock is above 3MHz
> * Pixel clock is not inverted
> I could not properly identify the reasons behind these failures, scope
> captures show valid input signals.
The patch includes an additional change where the bus_flags are assigned
to the connector. At least tell why, or maybe split it out.
Other panels could learn to do the same - and I assume you did it
because it was required in the atmel_hlcd driver.
Sam
>
> Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
> ---
> .../gpu/drm/panel/panel-sitronix-st7789v.c | 34 +++++++++++++++++--
> 1 file changed, 32 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/gpu/drm/panel/panel-sitronix-st7789v.c b/drivers/gpu/drm/panel/panel-sitronix-st7789v.c
> index 212bccc31804..7de192a3a8aa 100644
> --- a/drivers/gpu/drm/panel/panel-sitronix-st7789v.c
> +++ b/drivers/gpu/drm/panel/panel-sitronix-st7789v.c
> @@ -30,7 +30,8 @@
> #define ST7789V_RGBCTRL_RCM(n) (((n) & 3) << 5)
> #define ST7789V_RGBCTRL_VSYNC_HIGH BIT(3)
> #define ST7789V_RGBCTRL_HSYNC_HIGH BIT(2)
> -#define ST7789V_RGBCTRL_PCLK_HIGH BIT(1)
> +#define ST7789V_RGBCTRL_PCLK_FALLING BIT(1)
> +#define ST7789V_RGBCTRL_PCLK_RISING 0
> #define ST7789V_RGBCTRL_VBP(n) ((n) & 0x7f)
> #define ST7789V_RGBCTRL_HBP(n) ((n) & 0x1f)
>
> @@ -117,6 +118,7 @@ struct st7789v_panel_info {
> u16 width_mm;
> u16 height_mm;
> u32 bus_format;
> + u32 bus_flags;
> };
>
> struct st7789v {
> @@ -175,6 +177,18 @@ static const struct drm_display_mode default_mode = {
> .vtotal = 320 + 8 + 4 + 4,
> };
>
> +static const struct drm_display_mode slow_mode = {
> + .clock = 3000,
> + .hdisplay = 240,
> + .hsync_start = 240 + 38,
> + .hsync_end = 240 + 38 + 10,
> + .htotal = 240 + 38 + 10 + 10,
> + .vdisplay = 320,
> + .vsync_start = 320 + 8,
> + .vsync_end = 320 + 8 + 4,
> + .vtotal = 320 + 8 + 4 + 4,
> +};
> +
> static int st7789v_get_modes(struct drm_panel *panel,
> struct drm_connector *connector)
> {
> @@ -197,6 +211,7 @@ static int st7789v_get_modes(struct drm_panel *panel,
>
> connector->display_info.width_mm = panel_info->width_mm;
> connector->display_info.height_mm = panel_info->height_mm;
> + connector->display_info.bus_flags = panel_info->bus_flags;
> drm_display_info_set_bus_formats(&connector->display_info,
> &panel_info->bus_format, 1);
>
> @@ -206,8 +221,13 @@ static int st7789v_get_modes(struct drm_panel *panel,
> static int st7789v_prepare(struct drm_panel *panel)
> {
> struct st7789v *ctx = panel_to_st7789v(panel);
> + const struct st7789v_panel_info *panel_info = ctx->panel_info;
> + u8 pck = ST7789V_RGBCTRL_PCLK_FALLING;
> int ret;
>
> + if (panel_info->bus_flags & DRM_BUS_FLAG_PIXDATA_SAMPLE_POSEDGE)
> + pck = ST7789V_RGBCTRL_PCLK_RISING;
> +
> ret = regulator_enable(ctx->power);
> if (ret)
> return ret;
> @@ -321,7 +341,7 @@ static int st7789v_prepare(struct drm_panel *panel)
> ST7789V_RGBCTRL_RCM(2) |
> ST7789V_RGBCTRL_VSYNC_HIGH |
> ST7789V_RGBCTRL_HSYNC_HIGH |
> - ST7789V_RGBCTRL_PCLK_HIGH));
> + pck));
> ST7789V_TEST(ret, st7789v_write_data(ctx, ST7789V_RGBCTRL_VBP(8)));
> ST7789V_TEST(ret, st7789v_write_data(ctx, ST7789V_RGBCTRL_HBP(20)));
>
> @@ -422,14 +442,24 @@ static const struct st7789v_panel_info st7789v_info = {
> .bus_format = MEDIA_BUS_FMT_RGB666_1X18,
> };
>
> +static const struct st7789v_panel_info et028013dma_info = {
> + .display_mode = &slow_mode,
> + .width_mm = 43,
> + .height_mm = 58,
> + .bus_format = MEDIA_BUS_FMT_RGB666_1X18,
> + .bus_flags = DRM_BUS_FLAG_PIXDATA_SAMPLE_POSEDGE,
> +};
> +
> static const struct of_device_id st7789v_of_match[] = {
> { .compatible = "sitronix,st7789v", .data = &st7789v_info },
> + { .compatible = "edt,et028013dma", .data = &et028013dma_info },
> { }
> };
> MODULE_DEVICE_TABLE(of, st7789v_of_match);
>
> static const struct spi_device_id st7789v_ids[] = {
> { "st7789v", },
> + { "et028013dma", },
> { /* sentinel */ }
> };
> MODULE_DEVICE_TABLE(spi, st7789v_ids);
> --
> 2.34.1
WARNING: multiple messages have this Message-ID (diff)
From: Sam Ravnborg <sam@ravnborg.org>
To: Miquel Raynal <miquel.raynal@bootlin.com>
Cc: devicetree@vger.kernel.org,
Thomas Petazzoni <thomas.petazzoni@bootlin.com>,
dri-devel@lists.freedesktop.org, Rob Herring <robh+dt@kernel.org>,
Thierry Reding <thierry.reding@gmail.com>,
Maxime Ripard <mripard@kernel.org>,
Krzysztof Kozlowski <krzk+dt@kernel.org>
Subject: Re: [PATCH 6/7] drm/panel: sitronix-st7789v: Add EDT ET028013DMA panel support
Date: Sat, 10 Jun 2023 22:22:51 +0200 [thread overview]
Message-ID: <20230610202251.GF1041001@ravnborg.org> (raw)
In-Reply-To: <20230609145951.853533-7-miquel.raynal@bootlin.com>
On Fri, Jun 09, 2023 at 04:59:50PM +0200, Miquel Raynal wrote:
> This panel from Emerging Display Technologies Corporation features an
> ST7789V2 panel inside which is almost identical to what the Sitronix
> panel driver supports.
>
> In practice, the module physical size is specific, and experiments show
> that the display will malfunction if any of the following situation
> occurs:
> * Pixel clock is above 3MHz
> * Pixel clock is not inverted
> I could not properly identify the reasons behind these failures, scope
> captures show valid input signals.
The patch includes an additional change where the bus_flags are assigned
to the connector. At least tell why, or maybe split it out.
Other panels could learn to do the same - and I assume you did it
because it was required in the atmel_hlcd driver.
Sam
>
> Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
> ---
> .../gpu/drm/panel/panel-sitronix-st7789v.c | 34 +++++++++++++++++--
> 1 file changed, 32 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/gpu/drm/panel/panel-sitronix-st7789v.c b/drivers/gpu/drm/panel/panel-sitronix-st7789v.c
> index 212bccc31804..7de192a3a8aa 100644
> --- a/drivers/gpu/drm/panel/panel-sitronix-st7789v.c
> +++ b/drivers/gpu/drm/panel/panel-sitronix-st7789v.c
> @@ -30,7 +30,8 @@
> #define ST7789V_RGBCTRL_RCM(n) (((n) & 3) << 5)
> #define ST7789V_RGBCTRL_VSYNC_HIGH BIT(3)
> #define ST7789V_RGBCTRL_HSYNC_HIGH BIT(2)
> -#define ST7789V_RGBCTRL_PCLK_HIGH BIT(1)
> +#define ST7789V_RGBCTRL_PCLK_FALLING BIT(1)
> +#define ST7789V_RGBCTRL_PCLK_RISING 0
> #define ST7789V_RGBCTRL_VBP(n) ((n) & 0x7f)
> #define ST7789V_RGBCTRL_HBP(n) ((n) & 0x1f)
>
> @@ -117,6 +118,7 @@ struct st7789v_panel_info {
> u16 width_mm;
> u16 height_mm;
> u32 bus_format;
> + u32 bus_flags;
> };
>
> struct st7789v {
> @@ -175,6 +177,18 @@ static const struct drm_display_mode default_mode = {
> .vtotal = 320 + 8 + 4 + 4,
> };
>
> +static const struct drm_display_mode slow_mode = {
> + .clock = 3000,
> + .hdisplay = 240,
> + .hsync_start = 240 + 38,
> + .hsync_end = 240 + 38 + 10,
> + .htotal = 240 + 38 + 10 + 10,
> + .vdisplay = 320,
> + .vsync_start = 320 + 8,
> + .vsync_end = 320 + 8 + 4,
> + .vtotal = 320 + 8 + 4 + 4,
> +};
> +
> static int st7789v_get_modes(struct drm_panel *panel,
> struct drm_connector *connector)
> {
> @@ -197,6 +211,7 @@ static int st7789v_get_modes(struct drm_panel *panel,
>
> connector->display_info.width_mm = panel_info->width_mm;
> connector->display_info.height_mm = panel_info->height_mm;
> + connector->display_info.bus_flags = panel_info->bus_flags;
> drm_display_info_set_bus_formats(&connector->display_info,
> &panel_info->bus_format, 1);
>
> @@ -206,8 +221,13 @@ static int st7789v_get_modes(struct drm_panel *panel,
> static int st7789v_prepare(struct drm_panel *panel)
> {
> struct st7789v *ctx = panel_to_st7789v(panel);
> + const struct st7789v_panel_info *panel_info = ctx->panel_info;
> + u8 pck = ST7789V_RGBCTRL_PCLK_FALLING;
> int ret;
>
> + if (panel_info->bus_flags & DRM_BUS_FLAG_PIXDATA_SAMPLE_POSEDGE)
> + pck = ST7789V_RGBCTRL_PCLK_RISING;
> +
> ret = regulator_enable(ctx->power);
> if (ret)
> return ret;
> @@ -321,7 +341,7 @@ static int st7789v_prepare(struct drm_panel *panel)
> ST7789V_RGBCTRL_RCM(2) |
> ST7789V_RGBCTRL_VSYNC_HIGH |
> ST7789V_RGBCTRL_HSYNC_HIGH |
> - ST7789V_RGBCTRL_PCLK_HIGH));
> + pck));
> ST7789V_TEST(ret, st7789v_write_data(ctx, ST7789V_RGBCTRL_VBP(8)));
> ST7789V_TEST(ret, st7789v_write_data(ctx, ST7789V_RGBCTRL_HBP(20)));
>
> @@ -422,14 +442,24 @@ static const struct st7789v_panel_info st7789v_info = {
> .bus_format = MEDIA_BUS_FMT_RGB666_1X18,
> };
>
> +static const struct st7789v_panel_info et028013dma_info = {
> + .display_mode = &slow_mode,
> + .width_mm = 43,
> + .height_mm = 58,
> + .bus_format = MEDIA_BUS_FMT_RGB666_1X18,
> + .bus_flags = DRM_BUS_FLAG_PIXDATA_SAMPLE_POSEDGE,
> +};
> +
> static const struct of_device_id st7789v_of_match[] = {
> { .compatible = "sitronix,st7789v", .data = &st7789v_info },
> + { .compatible = "edt,et028013dma", .data = &et028013dma_info },
> { }
> };
> MODULE_DEVICE_TABLE(of, st7789v_of_match);
>
> static const struct spi_device_id st7789v_ids[] = {
> { "st7789v", },
> + { "et028013dma", },
> { /* sentinel */ }
> };
> MODULE_DEVICE_TABLE(spi, st7789v_ids);
> --
> 2.34.1
next prev parent reply other threads:[~2023-06-10 20:24 UTC|newest]
Thread overview: 53+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-06-09 14:59 [PATCH 0/7] drm/panel: sitronix-st7789v: Support ET028013DMA panel Miquel Raynal
2023-06-09 14:59 ` Miquel Raynal
2023-06-09 14:59 ` [PATCH 1/7] drm/panel: sitronix-st7789v: Prevent core spi warnings Miquel Raynal
2023-06-09 14:59 ` Miquel Raynal
2023-06-10 20:06 ` Sam Ravnborg
2023-06-10 20:06 ` Sam Ravnborg
2023-06-13 6:15 ` Michael Riesch
2023-06-13 6:15 ` Michael Riesch
2023-06-13 6:56 ` Miquel Raynal
2023-06-13 6:56 ` Miquel Raynal
2023-06-14 23:22 ` Sebastian Reichel
2023-06-14 23:22 ` Sebastian Reichel
2023-06-15 5:43 ` Sam Ravnborg
2023-06-15 5:43 ` Sam Ravnborg
2023-06-15 12:58 ` Sebastian Reichel
2023-06-15 12:58 ` Sebastian Reichel
2023-06-09 14:59 ` [PATCH 2/7] drm/panel: sitronix-st7789v: Use 9 bits per spi word by default Miquel Raynal
2023-06-09 14:59 ` Miquel Raynal
2023-06-10 20:09 ` Sam Ravnborg
2023-06-10 20:09 ` Sam Ravnborg
2023-06-09 14:59 ` [PATCH 3/7] drm/panel: sitronix-st7789v: Specify the expected bus format Miquel Raynal
2023-06-09 14:59 ` Miquel Raynal
2023-06-10 20:12 ` Sam Ravnborg
2023-06-10 20:12 ` Sam Ravnborg
2023-06-16 9:56 ` Miquel Raynal
2023-06-16 9:56 ` Miquel Raynal
2023-06-12 8:44 ` Maxime Ripard
2023-06-12 8:44 ` Maxime Ripard
2023-06-09 14:59 ` [PATCH 4/7] drm/panel: sitronix-st7789v: Use platform data Miquel Raynal
2023-06-09 14:59 ` Miquel Raynal
2023-06-10 20:15 ` Sam Ravnborg
2023-06-10 20:15 ` Sam Ravnborg
2023-06-09 14:59 ` [PATCH 5/7] dt-bindings: display: st7789v: Add the edt,et028013dma panel compatible Miquel Raynal
2023-06-09 14:59 ` [PATCH 5/7] dt-bindings: display: st7789v: Add the edt, et028013dma " Miquel Raynal
2023-06-09 14:59 ` [PATCH 6/7] drm/panel: sitronix-st7789v: Add EDT ET028013DMA panel support Miquel Raynal
2023-06-09 14:59 ` Miquel Raynal
2023-06-10 20:22 ` Sam Ravnborg [this message]
2023-06-10 20:22 ` Sam Ravnborg
2023-06-12 8:51 ` Maxime Ripard
2023-06-12 8:51 ` Maxime Ripard
2023-06-16 10:01 ` Miquel Raynal
2023-06-16 10:01 ` Miquel Raynal
2023-06-09 14:59 ` [PATCH 7/7] drm/panel: sitronix-st7789v: Check display ID Miquel Raynal
2023-06-09 14:59 ` Miquel Raynal
2023-06-10 20:45 ` Sam Ravnborg
2023-06-10 20:45 ` Sam Ravnborg
2023-06-14 23:27 ` Sebastian Reichel
2023-06-14 23:27 ` Sebastian Reichel
2023-06-16 10:13 ` Miquel Raynal
2023-06-16 10:13 ` Miquel Raynal
2023-06-16 13:38 ` Sebastian Reichel
2023-06-16 13:38 ` Sebastian Reichel
2023-06-13 6:25 ` Michael Riesch
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20230610202251.GF1041001@ravnborg.org \
--to=sam@ravnborg.org \
--cc=airlied@gmail.com \
--cc=daniel@ffwll.ch \
--cc=devicetree@vger.kernel.org \
--cc=dri-devel@lists.freedesktop.org \
--cc=krzk+dt@kernel.org \
--cc=miquel.raynal@bootlin.com \
--cc=mripard@kernel.org \
--cc=robh+dt@kernel.org \
--cc=thierry.reding@gmail.com \
--cc=thomas.petazzoni@bootlin.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.