* [PATCH v2] drm/panel: novatek-nt37801: Use mipi_dsi_*_multi() functions
@ 2026-07-06 22:43 Nicolás Antinori
2026-07-07 2:31 ` Doug Anderson
0 siblings, 1 reply; 3+ messages in thread
From: Nicolás Antinori @ 2026-07-06 22:43 UTC (permalink / raw)
To: Krzysztof Kozlowski
Cc: Nicolás Antinori, Brigham Campbell, David Airlie,
Douglas Anderson, Jessica Zhang, Maarten Lankhorst,
Maxime Ripard, Neil Armstrong, Shuah Khan, Simona Vetter,
Thomas Zimmermann, linux-kernel, linux-kernel-mentees, dri-devel
Replace mipi_dsi_* functions with their non-deprecated mipi_dsi_*_multi
counterparts. This change reduces error-checking boilerplate and improves
readability.
Signed-off-by: Nicolás Antinori <nico.antinori.7@gmail.com>
---
Changelog:
v2:
Implement feedback from the previous thread to simplify code in the
novatek_nt37801_prepare() function. This converts novatek_nt37801_on() to
return void and passes the mipi_dsi_multi_context struct directly as an
argument.
v1:
https://lore.kernel.org/dri-devel/20260701125624.199786-1-nico.antinori.7@gmail.com/T/#u
drivers/gpu/drm/panel/panel-novatek-nt37801.c | 110 ++++++++----------
1 file changed, 48 insertions(+), 62 deletions(-)
diff --git a/drivers/gpu/drm/panel/panel-novatek-nt37801.c b/drivers/gpu/drm/panel/panel-novatek-nt37801.c
index d6a37d7e0cc6..139cbf9833c7 100644
--- a/drivers/gpu/drm/panel/panel-novatek-nt37801.c
+++ b/drivers/gpu/drm/panel/panel-novatek-nt37801.c
@@ -52,61 +52,56 @@ static void novatek_nt37801_reset(struct novatek_nt37801 *ctx)
mipi_dsi_dcs_write_seq_multi((dsi_ctx), NT37801_DCS_SWITCH_PAGE, \
0x55, 0xaa, 0x52, 0x08, (page))
-static int novatek_nt37801_on(struct novatek_nt37801 *ctx)
+static void novatek_nt37801_on(struct mipi_dsi_multi_context *dsi_ctx)
{
- struct mipi_dsi_device *dsi = ctx->dsi;
- struct mipi_dsi_multi_context dsi_ctx = { .dsi = dsi };
-
- dsi->mode_flags |= MIPI_DSI_MODE_LPM;
-
- novatek_nt37801_switch_page(&dsi_ctx, 0x01);
- mipi_dsi_dcs_write_seq_multi(&dsi_ctx, 0x6f, 0x01);
- mipi_dsi_dcs_write_seq_multi(&dsi_ctx, 0xc5, 0x0b, 0x0b, 0x0b);
- mipi_dsi_dcs_write_seq_multi(&dsi_ctx, 0xff, 0xaa, 0x55, 0xa5, 0x80);
- mipi_dsi_dcs_write_seq_multi(&dsi_ctx, 0x6f, 0x02);
- mipi_dsi_dcs_write_seq_multi(&dsi_ctx, 0xf5, 0x10);
- mipi_dsi_dcs_write_seq_multi(&dsi_ctx, 0x6f, 0x1b);
- mipi_dsi_dcs_write_seq_multi(&dsi_ctx, 0xf4, 0x55);
- mipi_dsi_dcs_write_seq_multi(&dsi_ctx, 0x6f, 0x18);
- mipi_dsi_dcs_write_seq_multi(&dsi_ctx, 0xf8, 0x19);
- mipi_dsi_dcs_write_seq_multi(&dsi_ctx, 0x6f, 0x0f);
- mipi_dsi_dcs_write_seq_multi(&dsi_ctx, 0xfc, 0x00);
- mipi_dsi_dcs_set_column_address_multi(&dsi_ctx, 0x0000, 0x059f);
- mipi_dsi_dcs_set_page_address_multi(&dsi_ctx, 0x0000, 0x0c7f);
- mipi_dsi_dcs_write_seq_multi(&dsi_ctx, 0x90, 0x03, 0x03);
- mipi_dsi_dcs_write_seq_multi(&dsi_ctx, 0x91,
+ dsi_ctx->dsi->mode_flags |= MIPI_DSI_MODE_LPM;
+
+ novatek_nt37801_switch_page(dsi_ctx, 0x01);
+ mipi_dsi_dcs_write_seq_multi(dsi_ctx, 0x6f, 0x01);
+ mipi_dsi_dcs_write_seq_multi(dsi_ctx, 0xc5, 0x0b, 0x0b, 0x0b);
+ mipi_dsi_dcs_write_seq_multi(dsi_ctx, 0xff, 0xaa, 0x55, 0xa5, 0x80);
+ mipi_dsi_dcs_write_seq_multi(dsi_ctx, 0x6f, 0x02);
+ mipi_dsi_dcs_write_seq_multi(dsi_ctx, 0xf5, 0x10);
+ mipi_dsi_dcs_write_seq_multi(dsi_ctx, 0x6f, 0x1b);
+ mipi_dsi_dcs_write_seq_multi(dsi_ctx, 0xf4, 0x55);
+ mipi_dsi_dcs_write_seq_multi(dsi_ctx, 0x6f, 0x18);
+ mipi_dsi_dcs_write_seq_multi(dsi_ctx, 0xf8, 0x19);
+ mipi_dsi_dcs_write_seq_multi(dsi_ctx, 0x6f, 0x0f);
+ mipi_dsi_dcs_write_seq_multi(dsi_ctx, 0xfc, 0x00);
+ mipi_dsi_dcs_set_column_address_multi(dsi_ctx, 0x0000, 0x059f);
+ mipi_dsi_dcs_set_page_address_multi(dsi_ctx, 0x0000, 0x0c7f);
+ mipi_dsi_dcs_write_seq_multi(dsi_ctx, 0x90, 0x03, 0x03);
+ mipi_dsi_dcs_write_seq_multi(dsi_ctx, 0x91,
0x89, 0x28, 0x00, 0x28, 0xc2, 0x00, 0x02,
0x68, 0x04, 0x6c, 0x00, 0x0a, 0x02, 0x77,
0x01, 0xe9, 0x10, 0xf0);
- mipi_dsi_dcs_write_seq_multi(&dsi_ctx, 0xff, 0xaa, 0x55, 0xa5, 0x81);
- mipi_dsi_dcs_write_seq_multi(&dsi_ctx, 0x6f, 0x23);
- mipi_dsi_dcs_write_seq_multi(&dsi_ctx, 0xfb,
+ mipi_dsi_dcs_write_seq_multi(dsi_ctx, 0xff, 0xaa, 0x55, 0xa5, 0x81);
+ mipi_dsi_dcs_write_seq_multi(dsi_ctx, 0x6f, 0x23);
+ mipi_dsi_dcs_write_seq_multi(dsi_ctx, 0xfb,
0x00, 0x01, 0x00, 0x11, 0x33, 0x33, 0x33,
0x55, 0x57, 0xd0, 0x00, 0x00, 0x44, 0x56,
0x77, 0x78, 0x9a, 0xbc, 0xdd, 0xf0);
- mipi_dsi_dcs_write_seq_multi(&dsi_ctx, 0x6f, 0x06);
- mipi_dsi_dcs_write_seq_multi(&dsi_ctx, 0xf3, 0xdc);
- mipi_dsi_dcs_write_seq_multi(&dsi_ctx, MIPI_DCS_SET_GAMMA_CURVE, 0x00);
- mipi_dsi_dcs_set_tear_on_multi(&dsi_ctx, MIPI_DSI_DCS_TEAR_MODE_VBLANK);
- mipi_dsi_dcs_write_seq_multi(&dsi_ctx, 0x3b, 0x00, 0x18, 0x00, 0x10);
- mipi_dsi_dcs_write_seq_multi(&dsi_ctx, MIPI_DCS_WRITE_CONTROL_DISPLAY,
+ mipi_dsi_dcs_write_seq_multi(dsi_ctx, 0x6f, 0x06);
+ mipi_dsi_dcs_write_seq_multi(dsi_ctx, 0xf3, 0xdc);
+ mipi_dsi_dcs_write_seq_multi(dsi_ctx, MIPI_DCS_SET_GAMMA_CURVE, 0x00);
+ mipi_dsi_dcs_set_tear_on_multi(dsi_ctx, MIPI_DSI_DCS_TEAR_MODE_VBLANK);
+ mipi_dsi_dcs_write_seq_multi(dsi_ctx, 0x3b, 0x00, 0x18, 0x00, 0x10);
+ mipi_dsi_dcs_write_seq_multi(dsi_ctx, MIPI_DCS_WRITE_CONTROL_DISPLAY,
0x20);
- mipi_dsi_dcs_write_seq_multi(&dsi_ctx, 0x51,
+ mipi_dsi_dcs_write_seq_multi(dsi_ctx, 0x51,
0x07, 0xff, 0x07, 0xff, 0x0f, 0xff);
- mipi_dsi_dcs_write_seq_multi(&dsi_ctx, 0x5a, 0x01);
- mipi_dsi_dcs_write_seq_multi(&dsi_ctx, 0x5f, 0x00);
- mipi_dsi_dcs_write_seq_multi(&dsi_ctx, 0x9c, 0x01);
- mipi_dsi_dcs_write_seq_multi(&dsi_ctx, MIPI_DCS_WRITE_MEMORY_START);
- mipi_dsi_dcs_write_seq_multi(&dsi_ctx, 0x2f, 0x00);
-
- novatek_nt37801_switch_page(&dsi_ctx, 0x01);
- mipi_dsi_dcs_write_seq_multi(&dsi_ctx, 0xb2, 0x55, 0x01, 0xff, 0x03);
- mipi_dsi_dcs_exit_sleep_mode_multi(&dsi_ctx);
- mipi_dsi_msleep(&dsi_ctx, 120);
- mipi_dsi_dcs_set_display_on_multi(&dsi_ctx);
- mipi_dsi_msleep(&dsi_ctx, 20);
-
- return dsi_ctx.accum_err;
+ mipi_dsi_dcs_write_seq_multi(dsi_ctx, 0x5a, 0x01);
+ mipi_dsi_dcs_write_seq_multi(dsi_ctx, 0x5f, 0x00);
+ mipi_dsi_dcs_write_seq_multi(dsi_ctx, 0x9c, 0x01);
+ mipi_dsi_dcs_write_seq_multi(dsi_ctx, MIPI_DCS_WRITE_MEMORY_START);
+ mipi_dsi_dcs_write_seq_multi(dsi_ctx, 0x2f, 0x00);
+
+ novatek_nt37801_switch_page(dsi_ctx, 0x01);
+ mipi_dsi_dcs_write_seq_multi(dsi_ctx, 0xb2, 0x55, 0x01, 0xff, 0x03);
+ mipi_dsi_dcs_exit_sleep_mode_multi(dsi_ctx);
+ mipi_dsi_msleep(dsi_ctx, 120);
+ mipi_dsi_dcs_set_display_on_multi(dsi_ctx);
+ mipi_dsi_msleep(dsi_ctx, 20);
}
static int novatek_nt37801_off(struct novatek_nt37801 *ctx)
@@ -128,7 +123,8 @@ static int novatek_nt37801_off(struct novatek_nt37801 *ctx)
static int novatek_nt37801_prepare(struct drm_panel *panel)
{
struct novatek_nt37801 *ctx = to_novatek_nt37801(panel);
- struct device *dev = &ctx->dsi->dev;
+ struct mipi_dsi_device *dsi = ctx->dsi;
+ struct mipi_dsi_multi_context dsi_ctx = { .dsi = dsi };
struct drm_dsc_picture_parameter_set pps;
int ret;
@@ -138,22 +134,12 @@ static int novatek_nt37801_prepare(struct drm_panel *panel)
return ret;
novatek_nt37801_reset(ctx);
-
- ret = novatek_nt37801_on(ctx);
- if (ret < 0)
- goto err;
-
+ novatek_nt37801_on(&dsi_ctx);
drm_dsc_pps_payload_pack(&pps, &ctx->dsc);
-
- ret = mipi_dsi_picture_parameter_set(ctx->dsi, &pps);
- if (ret < 0) {
- dev_err(panel->dev, "failed to transmit PPS: %d\n", ret);
- goto err;
- }
-
- ret = mipi_dsi_compression_mode(ctx->dsi, true);
- if (ret < 0) {
- dev_err(dev, "failed to enable compression mode: %d\n", ret);
+ mipi_dsi_picture_parameter_set_multi(&dsi_ctx, &pps);
+ mipi_dsi_compression_mode_multi(&dsi_ctx, true);
+ if (dsi_ctx.accum_err) {
+ ret = dsi_ctx.accum_err;
goto err;
}
--
2.47.3
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH v2] drm/panel: novatek-nt37801: Use mipi_dsi_*_multi() functions
2026-07-06 22:43 [PATCH v2] drm/panel: novatek-nt37801: Use mipi_dsi_*_multi() functions Nicolás Antinori
@ 2026-07-07 2:31 ` Doug Anderson
2026-07-13 20:11 ` Doug Anderson
0 siblings, 1 reply; 3+ messages in thread
From: Doug Anderson @ 2026-07-07 2:31 UTC (permalink / raw)
To: Nicolás Antinori
Cc: Krzysztof Kozlowski, Brigham Campbell, David Airlie,
Jessica Zhang, Maarten Lankhorst, Maxime Ripard, Neil Armstrong,
Shuah Khan, Simona Vetter, Thomas Zimmermann, linux-kernel,
linux-kernel-mentees, dri-devel
Hi,
On Mon, Jul 6, 2026 at 3:44 PM Nicolás Antinori
<nico.antinori.7@gmail.com> wrote:
>
> Replace mipi_dsi_* functions with their non-deprecated mipi_dsi_*_multi
> counterparts. This change reduces error-checking boilerplate and improves
> readability.
>
> Signed-off-by: Nicolás Antinori <nico.antinori.7@gmail.com>
> ---
> Changelog:
> v2:
> Implement feedback from the previous thread to simplify code in the
> novatek_nt37801_prepare() function. This converts novatek_nt37801_on() to
> return void and passes the mipi_dsi_multi_context struct directly as an
> argument.
>
> v1:
> https://lore.kernel.org/dri-devel/20260701125624.199786-1-nico.antinori.7@gmail.com/T/#u
>
> drivers/gpu/drm/panel/panel-novatek-nt37801.c | 110 ++++++++----------
> 1 file changed, 48 insertions(+), 62 deletions(-)
Yah, looks great. Thanks!
Reviewed-by: Douglas Anderson <dianders@chromium.org>
...barring anything else coming up, I'll plan to apply in ~1 week.
-Doug
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH v2] drm/panel: novatek-nt37801: Use mipi_dsi_*_multi() functions
2026-07-07 2:31 ` Doug Anderson
@ 2026-07-13 20:11 ` Doug Anderson
0 siblings, 0 replies; 3+ messages in thread
From: Doug Anderson @ 2026-07-13 20:11 UTC (permalink / raw)
To: Nicolás Antinori
Cc: Krzysztof Kozlowski, Brigham Campbell, David Airlie,
Jessica Zhang, Maarten Lankhorst, Maxime Ripard, Neil Armstrong,
Shuah Khan, Simona Vetter, Thomas Zimmermann, linux-kernel,
linux-kernel-mentees, dri-devel
Hi,
On Mon, Jul 6, 2026 at 7:31 PM Doug Anderson <dianders@chromium.org> wrote:
>
> Hi,
>
> On Mon, Jul 6, 2026 at 3:44 PM Nicolás Antinori
> <nico.antinori.7@gmail.com> wrote:
> >
> > Replace mipi_dsi_* functions with their non-deprecated mipi_dsi_*_multi
> > counterparts. This change reduces error-checking boilerplate and improves
> > readability.
> >
> > Signed-off-by: Nicolás Antinori <nico.antinori.7@gmail.com>
> > ---
> > Changelog:
> > v2:
> > Implement feedback from the previous thread to simplify code in the
> > novatek_nt37801_prepare() function. This converts novatek_nt37801_on() to
> > return void and passes the mipi_dsi_multi_context struct directly as an
> > argument.
> >
> > v1:
> > https://lore.kernel.org/dri-devel/20260701125624.199786-1-nico.antinori.7@gmail.com/T/#u
> >
> > drivers/gpu/drm/panel/panel-novatek-nt37801.c | 110 ++++++++----------
> > 1 file changed, 48 insertions(+), 62 deletions(-)
>
> Yah, looks great. Thanks!
>
> Reviewed-by: Douglas Anderson <dianders@chromium.org>
>
> ...barring anything else coming up, I'll plan to apply in ~1 week.
Pushed to drm-misc-next:
[1/1] drm/panel: novatek-nt37801: Use mipi_dsi_*_multi() functions
commit: 5958ff1a715dd885210ce7208f1aa1fa930e8671
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2026-07-13 20:11 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-07-06 22:43 [PATCH v2] drm/panel: novatek-nt37801: Use mipi_dsi_*_multi() functions Nicolás Antinori
2026-07-07 2:31 ` Doug Anderson
2026-07-13 20:11 ` Doug Anderson
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox