Commit b6c1048c authored by Tomi Valkeinen's avatar Tomi Valkeinen

drm/omap: dsi: split video mode enable/disable into separate func

Clean up the code by separating video-mode enable/disable code into
functions of their own.
Signed-off-by: default avatarTomi Valkeinen <tomi.valkeinen@ti.com>
Reviewed-by: default avatarLaurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: default avatarSebastian Reichel <sebastian.reichel@collabora.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20201215104657.802264-81-tomi.valkeinen@ti.com
parent 7b93de98
...@@ -3209,12 +3209,61 @@ static int dsi_configure_pins(struct dsi_data *dsi, ...@@ -3209,12 +3209,61 @@ static int dsi_configure_pins(struct dsi_data *dsi,
return 0; 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); int bpp = mipi_dsi_pixel_format_to_bpp(dsi->pix_fmt);
u8 data_type; u8 data_type;
u16 word_count; 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; int r;
r = dsi_init_dispc(dsi); r = dsi_init_dispc(dsi);
...@@ -3224,37 +3273,9 @@ static void dsi_enable_video_output(struct omap_dss_device *dssdev, int vc) ...@@ -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) { if (dsi->mode == OMAP_DSS_DSI_VIDEO_MODE) {
switch (dsi->pix_fmt) { r = dsi_enable_video_mode(dsi, vc);
case MIPI_DSI_FMT_RGB888: if (r)
data_type = MIPI_DSI_PACKED_PIXEL_STREAM_24; goto err_video_mode;
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 = dss_mgr_enable(&dsi->output); r = dss_mgr_enable(&dsi->output);
...@@ -3268,7 +3289,7 @@ static void dsi_enable_video_output(struct omap_dss_device *dssdev, int vc) ...@@ -3268,7 +3289,7 @@ static void dsi_enable_video_output(struct omap_dss_device *dssdev, int vc)
dsi_if_enable(dsi, false); dsi_if_enable(dsi, false);
dsi_vc_enable(dsi, vc, false); dsi_vc_enable(dsi, vc, false);
} }
err_pix_fmt: err_video_mode:
dsi_uninit_dispc(dsi); dsi_uninit_dispc(dsi);
dev_err(dsi->dev, "failed to enable DSI encoder!\n"); dev_err(dsi->dev, "failed to enable DSI encoder!\n");
return; return;
...@@ -3278,16 +3299,8 @@ static void dsi_disable_video_output(struct omap_dss_device *dssdev, int vc) ...@@ -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); struct dsi_data *dsi = to_dsi_data(dssdev);
if (dsi->mode == OMAP_DSS_DSI_VIDEO_MODE) { if (dsi->mode == OMAP_DSS_DSI_VIDEO_MODE)
dsi_if_enable(dsi, false); dsi_disable_video_mode(dsi, vc);
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);
}
dss_mgr_disable(&dsi->output); dss_mgr_disable(&dsi->output);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment