drm/omap: dsi: split video mode enable/disable into separate func
authorTomi Valkeinen <tomi.valkeinen@ti.com>
Tue, 15 Dec 2020 10:46:53 +0000 (12:46 +0200)
committerTomi Valkeinen <tomi.valkeinen@ti.com>
Tue, 15 Dec 2020 14:17:32 +0000 (16:17 +0200)
Clean up the code by separating video-mode enable/disable code into
functions of their own.

Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Sebastian Reichel <sebastian.reichel@collabora.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20201215104657.802264-81-tomi.valkeinen@ti.com
drivers/gpu/drm/omapdrm/dss/dsi.c

index 40bfd92321c1ce55aa37a3d5338cd7e27db263ab..a17d7345fc9a4d0f99dead9bda3e11b26fc3015c 100644 (file)
@@ -3209,12 +3209,61 @@ static int dsi_configure_pins(struct dsi_data *dsi,
        return 0;
 }
 
-static void dsi_enable_video_output(struct omap_dss_device *dssdev, int vc)
+static int dsi_enable_video_mode(struct dsi_data *dsi, int vc)
 {
-       struct dsi_data *dsi = to_dsi_data(dssdev);
        int bpp = mipi_dsi_pixel_format_to_bpp(dsi->pix_fmt);
        u8 data_type;
        u16 word_count;
+
+       switch (dsi->pix_fmt) {
+       case MIPI_DSI_FMT_RGB888:
+               data_type = MIPI_DSI_PACKED_PIXEL_STREAM_24;
+               break;
+       case MIPI_DSI_FMT_RGB666:
+               data_type = MIPI_DSI_PIXEL_STREAM_3BYTE_18;
+               break;
+       case MIPI_DSI_FMT_RGB666_PACKED:
+               data_type = MIPI_DSI_PACKED_PIXEL_STREAM_18;
+               break;
+       case MIPI_DSI_FMT_RGB565:
+               data_type = MIPI_DSI_PACKED_PIXEL_STREAM_16;
+               break;
+       default:
+               return -EINVAL;
+       }
+
+       dsi_if_enable(dsi, false);
+       dsi_vc_enable(dsi, vc, false);
+
+       /* MODE, 1 = video mode */
+       REG_FLD_MOD(dsi, DSI_VC_CTRL(vc), 1, 4, 4);
+
+       word_count = DIV_ROUND_UP(dsi->vm.hactive * bpp, 8);
+
+       dsi_vc_write_long_header(dsi, vc, dsi->dsidev->channel, data_type,
+                       word_count, 0);
+
+       dsi_vc_enable(dsi, vc, true);
+       dsi_if_enable(dsi, true);
+
+       return 0;
+}
+
+static void dsi_disable_video_mode(struct dsi_data *dsi, int vc)
+{
+       dsi_if_enable(dsi, false);
+       dsi_vc_enable(dsi, vc, false);
+
+       /* MODE, 0 = command mode */
+       REG_FLD_MOD(dsi, DSI_VC_CTRL(vc), 0, 4, 4);
+
+       dsi_vc_enable(dsi, vc, true);
+       dsi_if_enable(dsi, true);
+}
+
+static void dsi_enable_video_output(struct omap_dss_device *dssdev, int vc)
+{
+       struct dsi_data *dsi = to_dsi_data(dssdev);
        int r;
 
        r = dsi_init_dispc(dsi);
@@ -3224,37 +3273,9 @@ static void dsi_enable_video_output(struct omap_dss_device *dssdev, int vc)
        }
 
        if (dsi->mode == OMAP_DSS_DSI_VIDEO_MODE) {
-               switch (dsi->pix_fmt) {
-               case MIPI_DSI_FMT_RGB888:
-                       data_type = MIPI_DSI_PACKED_PIXEL_STREAM_24;
-                       break;
-               case MIPI_DSI_FMT_RGB666:
-                       data_type = MIPI_DSI_PIXEL_STREAM_3BYTE_18;
-                       break;
-               case MIPI_DSI_FMT_RGB666_PACKED:
-                       data_type = MIPI_DSI_PACKED_PIXEL_STREAM_18;
-                       break;
-               case MIPI_DSI_FMT_RGB565:
-                       data_type = MIPI_DSI_PACKED_PIXEL_STREAM_16;
-                       break;
-               default:
-                       r = -EINVAL;
-                       goto err_pix_fmt;
-               }
-
-               dsi_if_enable(dsi, false);
-               dsi_vc_enable(dsi, vc, false);
-
-               /* MODE, 1 = video mode */
-               REG_FLD_MOD(dsi, DSI_VC_CTRL(vc), 1, 4, 4);
-
-               word_count = DIV_ROUND_UP(dsi->vm.hactive * bpp, 8);
-
-               dsi_vc_write_long_header(dsi, vc, dsi->dsidev->channel, data_type,
-                               word_count, 0);
-
-               dsi_vc_enable(dsi, vc, true);
-               dsi_if_enable(dsi, true);
+               r = dsi_enable_video_mode(dsi, vc);
+               if (r)
+                       goto err_video_mode;
        }
 
        r = dss_mgr_enable(&dsi->output);
@@ -3268,7 +3289,7 @@ err_mgr_enable:
                dsi_if_enable(dsi, false);
                dsi_vc_enable(dsi, vc, false);
        }
-err_pix_fmt:
+err_video_mode:
        dsi_uninit_dispc(dsi);
        dev_err(dsi->dev, "failed to enable DSI encoder!\n");
        return;
@@ -3278,16 +3299,8 @@ static void dsi_disable_video_output(struct omap_dss_device *dssdev, int vc)
 {
        struct dsi_data *dsi = to_dsi_data(dssdev);
 
-       if (dsi->mode == OMAP_DSS_DSI_VIDEO_MODE) {
-               dsi_if_enable(dsi, false);
-               dsi_vc_enable(dsi, vc, false);
-
-               /* MODE, 0 = command mode */
-               REG_FLD_MOD(dsi, DSI_VC_CTRL(vc), 0, 4, 4);
-
-               dsi_vc_enable(dsi, vc, true);
-               dsi_if_enable(dsi, true);
-       }
+       if (dsi->mode == OMAP_DSS_DSI_VIDEO_MODE)
+               dsi_disable_video_mode(dsi, vc);
 
        dss_mgr_disable(&dsi->output);