Update the driver to use the non-deprecated mipi_dsi_*_multi()
helpers, as recommended in Documentation/gpu/todo.rst. The multi
variants provide proper error accumulation and handle the required
DCS NOP insertions, which suits the OTM8009A command sequences.

The init and disable paths now return dsi_ctx.accum_err, ensuring
errors are propagated to callers.

Signed-off-by: Amin GATTOUT <[email protected]>
---
 .../gpu/drm/panel/panel-orisetech-otm8009a.c  | 56 ++++++-------------
 1 file changed, 17 insertions(+), 39 deletions(-)

diff --git a/drivers/gpu/drm/panel/panel-orisetech-otm8009a.c 
b/drivers/gpu/drm/panel/panel-orisetech-otm8009a.c
index a0f58c3b73f6..fe31f508efd6 100644
--- a/drivers/gpu/drm/panel/panel-orisetech-otm8009a.c
+++ b/drivers/gpu/drm/panel/panel-orisetech-otm8009a.c
@@ -113,9 +113,9 @@ static void otm8009a_dcs_write_buf(struct otm8009a *ctx, 
const void *data,
                                   size_t len)
 {
        struct mipi_dsi_device *dsi = to_mipi_dsi_device(ctx->dev);
+       struct mipi_dsi_multi_context dsi_ctx = { .dsi = dsi };
 
-       if (mipi_dsi_dcs_write_buffer(dsi, data, len) < 0)
-               dev_warn(ctx->dev, "mipi dsi dcs write buffer failed\n");
+       mipi_dsi_dcs_write_buffer_multi(&dsi_ctx, data, len);
 }
 
 #define dcs_write_seq(ctx, seq...)                     \
@@ -133,7 +133,7 @@ static void otm8009a_dcs_write_buf(struct otm8009a *ctx, 
const void *data,
 static int otm8009a_init_sequence(struct otm8009a *ctx)
 {
        struct mipi_dsi_device *dsi = to_mipi_dsi_device(ctx->dev);
-       int ret;
+       struct mipi_dsi_multi_context dsi_ctx = { .dsi = dsi };
 
        /* Enter CMD2 */
        dcs_write_cmd_at(ctx, MCS_CMD2_ENA1, 0x80, 0x09, 0x01);
@@ -213,44 +213,28 @@ static int otm8009a_init_sequence(struct otm8009a *ctx)
        /* Exit CMD2 */
        dcs_write_cmd_at(ctx, MCS_CMD2_ENA1, 0xFF, 0xFF, 0xFF);
 
-       ret = mipi_dsi_dcs_nop(dsi);
-       if (ret)
-               return ret;
+       mipi_dsi_dcs_nop_multi(&dsi_ctx);
 
-       ret = mipi_dsi_dcs_exit_sleep_mode(dsi);
-       if (ret)
-               return ret;
-
-       /* Wait for sleep out exit */
-       mdelay(120);
+       mipi_dsi_dcs_exit_sleep_mode_multi(&dsi_ctx);
+       mipi_dsi_msleep(&dsi_ctx, 120);
 
        /* Default portrait 480x800 rgb24 */
        dcs_write_seq(ctx, MIPI_DCS_SET_ADDRESS_MODE, 0x00);
 
-       ret = mipi_dsi_dcs_set_column_address(dsi, 0, OTM8009A_HDISPLAY - 1);
-       if (ret)
-               return ret;
+       mipi_dsi_dcs_set_column_address_multi(&dsi_ctx, 0, OTM8009A_HDISPLAY - 
1);
 
-       ret = mipi_dsi_dcs_set_page_address(dsi, 0, OTM8009A_VDISPLAY - 1);
-       if (ret)
-               return ret;
+       mipi_dsi_dcs_set_page_address_multi(&dsi_ctx, 0, OTM8009A_VDISPLAY - 1);
 
        /* See otm8009a driver documentation for pixel format descriptions */
-       ret = mipi_dsi_dcs_set_pixel_format(dsi, MIPI_DCS_PIXEL_FMT_24BIT |
+       mipi_dsi_dcs_set_pixel_format_multi(&dsi_ctx, MIPI_DCS_PIXEL_FMT_24BIT |
                                            MIPI_DCS_PIXEL_FMT_24BIT << 4);
-       if (ret)
-               return ret;
 
        /* Disable CABC feature */
        dcs_write_seq(ctx, MIPI_DCS_WRITE_POWER_SAVE, 0x00);
 
-       ret = mipi_dsi_dcs_set_display_on(dsi);
-       if (ret)
-               return ret;
+       mipi_dsi_dcs_set_display_on_multi(&dsi_ctx);
 
-       ret = mipi_dsi_dcs_nop(dsi);
-       if (ret)
-               return ret;
+       mipi_dsi_dcs_nop_multi(&dsi_ctx);
 
        /* Send Command GRAM memory write (no parameters) */
        dcs_write_seq(ctx, MIPI_DCS_WRITE_MEMORY_START);
@@ -258,28 +242,22 @@ static int otm8009a_init_sequence(struct otm8009a *ctx)
        /* Wait a short while to let the panel be ready before the 1st frame */
        mdelay(10);
 
-       return 0;
+       return dsi_ctx.accum_err;
 }
 
 static int otm8009a_disable(struct drm_panel *panel)
 {
        struct otm8009a *ctx = panel_to_otm8009a(panel);
        struct mipi_dsi_device *dsi = to_mipi_dsi_device(ctx->dev);
-       int ret;
+       struct mipi_dsi_multi_context dsi_ctx = { .dsi = dsi };
 
        backlight_disable(ctx->bl_dev);
 
-       ret = mipi_dsi_dcs_set_display_off(dsi);
-       if (ret)
-               return ret;
-
-       ret = mipi_dsi_dcs_enter_sleep_mode(dsi);
-       if (ret)
-               return ret;
-
-       msleep(120);
+       mipi_dsi_dcs_set_display_off_multi(&dsi_ctx);
+       mipi_dsi_dcs_enter_sleep_mode_multi(&dsi_ctx);
+       mipi_dsi_msleep(&dsi_ctx, 120);
 
-       return 0;
+       return dsi_ctx.accum_err;
 }
 
 static int otm8009a_unprepare(struct drm_panel *panel)
-- 
2.43.0

Reply via email to