On 9/21/25 20:37, [email protected] wrote:
From: Rajeev Tapadia <[email protected]>
Replace deprecated mipi_dsi_generic_write_seq() calls with
mipi_dsi_generic_write_seq_multi(). This avoids hidden early returns
and matches the direction of other panel drivers.
No functional change intended.
Signed-off-by: Rajeev Tapadia <[email protected]>
---
Question for reviewers:
In this patch, I switched to using mipi_dsi_generic_write_seq_multi().
Currently, if both link1 and link2 return errors, only one error is
reported via accum_err. How should this ideally be handled? Should we
report the first error, the last, or combine them somehow?
No it's fine, the first error is catched and reported.
The good way to do this is via this macro:
#define mipi_dsi_dual_dcs_write_seq_multi(dsi_ctx, dsi0, dsi1, cmd, seq...)
\
do {
\
dsi_ctx.dsi = dsi0;
\
mipi_dsi_dcs_write_seq_multi(&dsi_ctx, cmd, seq); \
dsi_ctx.dsi = dsi1;
\
mipi_dsi_dcs_write_seq_multi(&dsi_ctx, cmd, seq); \
} while (0)
with a single context. The mipi_dsi_dcs_write_seq_multi will print the
error from the proper DSI and the context will have the appropriate error.
Neil
drivers/gpu/drm/panel/panel-jdi-lpm102a188a.c | 15 +++++++++++----
1 file changed, 11 insertions(+), 4 deletions(-)
diff --git a/drivers/gpu/drm/panel/panel-jdi-lpm102a188a.c
b/drivers/gpu/drm/panel/panel-jdi-lpm102a188a.c
index 5f897e143758..982cb61849a0 100644
--- a/drivers/gpu/drm/panel/panel-jdi-lpm102a188a.c
+++ b/drivers/gpu/drm/panel/panel-jdi-lpm102a188a.c
@@ -162,27 +162,34 @@ static int jdi_setup_symmetrical_split(struct
mipi_dsi_device *left,
static int jdi_write_dcdc_registers(struct jdi_panel *jdi)
{
/* Clear the manufacturer command access protection */
- mipi_dsi_generic_write_seq(jdi->link1, MCS_CMD_ACS_PROT,
+ struct mipi_dsi_multi_context dsi_ctx1 = {.dsi = jdi->link1};
+ struct mipi_dsi_multi_context dsi_ctx2 = {.dsi = jdi->link2};
+
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx1, MCS_CMD_ACS_PROT,
MCS_CMD_ACS_PROT_OFF);
- mipi_dsi_generic_write_seq(jdi->link2, MCS_CMD_ACS_PROT,
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx2, MCS_CMD_ACS_PROT,
MCS_CMD_ACS_PROT_OFF);
/*
* Change the VGH/VGL divide rations to move the noise generated by the
* TCONN. This should hopefully avoid interaction with the backlight
* controller.
*/
- mipi_dsi_generic_write_seq(jdi->link1, MCS_PWR_CTRL_FUNC,
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx1, MCS_PWR_CTRL_FUNC,
MCS_PWR_CTRL_PARAM1_VGH_330_DIV |
MCS_PWR_CTRL_PARAM1_DEFAULT,
MCS_PWR_CTRL_PARAM2_VGL_410_DIV |
MCS_PWR_CTRL_PARAM2_DEFAULT);
- mipi_dsi_generic_write_seq(jdi->link2, MCS_PWR_CTRL_FUNC,
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx2, MCS_PWR_CTRL_FUNC,
MCS_PWR_CTRL_PARAM1_VGH_330_DIV |
MCS_PWR_CTRL_PARAM1_DEFAULT,
MCS_PWR_CTRL_PARAM2_VGL_410_DIV |
MCS_PWR_CTRL_PARAM2_DEFAULT);
+ if (dsi_ctx1.accum_err < 0)
+ return dsi_ctx1.accum_err;
+ if (dsi_ctx2.accum_err < 0)
+ return dsi_ctx2.accum_err;
return 0;
}