From: Sebastian Reichel <sebastian.reic...@collabora.com>

This replaces OMAP specific enum for pixel format with
common implementation.

Signed-off-by: Sebastian Reichel <sebastian.reic...@collabora.com>
Signed-off-by: Tomi Valkeinen <tomi.valkei...@ti.com>
Reviewed-by: Laurent Pinchart <laurent.pinch...@ideasonboard.com>
---
 .../gpu/drm/omapdrm/displays/panel-dsi-cm.c   |  2 +-
 drivers/gpu/drm/omapdrm/dss/dsi.c             | 55 ++++++++-----------
 drivers/gpu/drm/omapdrm/dss/omapdss.h         | 13 ++---
 3 files changed, 28 insertions(+), 42 deletions(-)

diff --git a/drivers/gpu/drm/omapdrm/displays/panel-dsi-cm.c 
b/drivers/gpu/drm/omapdrm/displays/panel-dsi-cm.c
index 458cadb07d15..4119f0bfe111 100644
--- a/drivers/gpu/drm/omapdrm/displays/panel-dsi-cm.c
+++ b/drivers/gpu/drm/omapdrm/displays/panel-dsi-cm.c
@@ -595,7 +595,7 @@ static int dsicm_power_on(struct panel_drv_data *ddata)
        int r;
        struct omap_dss_dsi_config dsi_config = {
                .mode = OMAP_DSS_DSI_CMD_MODE,
-               .pixel_format = OMAP_DSS_DSI_FMT_RGB888,
+               .pixel_format = MIPI_DSI_FMT_RGB888,
                .vm = &ddata->vm,
                .hs_clk_min = 150000000,
                .hs_clk_max = 300000000,
diff --git a/drivers/gpu/drm/omapdrm/dss/dsi.c 
b/drivers/gpu/drm/omapdrm/dss/dsi.c
index 2ba1287dda36..2d7350f34628 100644
--- a/drivers/gpu/drm/omapdrm/dss/dsi.c
+++ b/drivers/gpu/drm/omapdrm/dss/dsi.c
@@ -33,6 +33,7 @@
 #include <linux/component.h>
 #include <linux/sys_soc.h>
 
+#include <drm/drm_mipi_dsi.h>
 #include <video/mipi_display.h>
 
 #include "omapdss.h"
@@ -410,7 +411,7 @@ struct dsi_data {
 
        struct dss_lcd_mgr_config mgr_config;
        struct videomode vm;
-       enum omap_dss_dsi_pixel_format pix_fmt;
+       enum mipi_dsi_pixel_format pix_fmt;
        enum omap_dss_dsi_mode mode;
        struct omap_dss_dsi_videomode_timings vm_timings;
 
@@ -514,22 +515,6 @@ static inline bool wait_for_bit_change(struct dsi_data 
*dsi,
        return false;
 }
 
-static u8 dsi_get_pixel_size(enum omap_dss_dsi_pixel_format fmt)
-{
-       switch (fmt) {
-       case OMAP_DSS_DSI_FMT_RGB888:
-       case OMAP_DSS_DSI_FMT_RGB666:
-               return 24;
-       case OMAP_DSS_DSI_FMT_RGB666_PACKED:
-               return 18;
-       case OMAP_DSS_DSI_FMT_RGB565:
-               return 16;
-       default:
-               BUG();
-               return 0;
-       }
-}
-
 #ifdef DSI_PERF_MEASURE
 static void dsi_perf_mark_setup(struct dsi_data *dsi)
 {
@@ -3241,7 +3226,7 @@ static void dsi_config_vp_num_line_buffers(struct 
dsi_data *dsi)
        int num_line_buffers;
 
        if (dsi->mode == OMAP_DSS_DSI_VIDEO_MODE) {
-               int bpp = dsi_get_pixel_size(dsi->pix_fmt);
+               int bpp = mipi_dsi_pixel_format_to_bpp(dsi->pix_fmt);
                const struct videomode *vm = &dsi->vm;
                /*
                 * Don't use line buffers if width is greater than the video
@@ -3372,7 +3357,7 @@ static void dsi_config_cmd_mode_interleaving(struct 
dsi_data *dsi)
        int tclk_trail, ths_exit, exiths_clk;
        bool ddr_alwon;
        const struct videomode *vm = &dsi->vm;
-       int bpp = dsi_get_pixel_size(dsi->pix_fmt);
+       int bpp = mipi_dsi_pixel_format_to_bpp(dsi->pix_fmt);
        int ndl = dsi->num_lanes_used - 1;
        int dsi_fclk_hsdiv = dsi->user_dsi_cinfo.mX[HSDIV_DSI] + 1;
        int hsa_interleave_hs = 0, hsa_interleave_lp = 0;
@@ -3500,7 +3485,7 @@ static int dsi_proto_config(struct dsi_data *dsi)
        dsi_set_lp_rx_timeout(dsi, 0x1fff, true, true);
        dsi_set_hs_tx_timeout(dsi, 0x1fff, true, true);
 
-       switch (dsi_get_pixel_size(dsi->pix_fmt)) {
+       switch (mipi_dsi_pixel_format_to_bpp(dsi->pix_fmt)) {
        case 16:
                buswidth = 0;
                break;
@@ -3621,7 +3606,7 @@ static void dsi_proto_timings(struct dsi_data *dsi)
                int window_sync = dsi->vm_timings.window_sync;
                bool hsync_end;
                const struct videomode *vm = &dsi->vm;
-               int bpp = dsi_get_pixel_size(dsi->pix_fmt);
+               int bpp = mipi_dsi_pixel_format_to_bpp(dsi->pix_fmt);
                int tl, t_he, width_bytes;
 
                hsync_end = dsi->vm_timings.trans_mode == 
OMAP_DSS_DSI_PULSE_MODE;
@@ -3728,7 +3713,7 @@ static int dsi_configure_pins(struct omap_dss_device 
*dssdev,
 static int dsi_enable_video_output(struct omap_dss_device *dssdev, int channel)
 {
        struct dsi_data *dsi = to_dsi_data(dssdev);
-       int bpp = dsi_get_pixel_size(dsi->pix_fmt);
+       int bpp = mipi_dsi_pixel_format_to_bpp(dsi->pix_fmt);
        u8 data_type;
        u16 word_count;
        int r;
@@ -3739,16 +3724,16 @@ static int dsi_enable_video_output(struct 
omap_dss_device *dssdev, int channel)
 
        if (dsi->mode == OMAP_DSS_DSI_VIDEO_MODE) {
                switch (dsi->pix_fmt) {
-               case OMAP_DSS_DSI_FMT_RGB888:
+               case MIPI_DSI_FMT_RGB888:
                        data_type = MIPI_DSI_PACKED_PIXEL_STREAM_24;
                        break;
-               case OMAP_DSS_DSI_FMT_RGB666:
+               case MIPI_DSI_FMT_RGB666:
                        data_type = MIPI_DSI_PIXEL_STREAM_3BYTE_18;
                        break;
-               case OMAP_DSS_DSI_FMT_RGB666_PACKED:
+               case MIPI_DSI_FMT_RGB666_PACKED:
                        data_type = MIPI_DSI_PACKED_PIXEL_STREAM_18;
                        break;
-               case OMAP_DSS_DSI_FMT_RGB565:
+               case MIPI_DSI_FMT_RGB565:
                        data_type = MIPI_DSI_PACKED_PIXEL_STREAM_16;
                        break;
                default:
@@ -3826,7 +3811,7 @@ static void dsi_update_screen_dispc(struct dsi_data *dsi)
 
        dsi_vc_config_source(dsi, channel, DSI_VC_SOURCE_VP);
 
-       bytespp = dsi_get_pixel_size(dsi->pix_fmt) / 8;
+       bytespp = mipi_dsi_pixel_format_to_bpp(dsi->pix_fmt) / 8;
        bytespl = w * bytespp;
        bytespf = bytespl * h;
 
@@ -3952,7 +3937,7 @@ static int dsi_update(struct omap_dss_device *dssdev, int 
channel,
 
 #ifdef DSI_PERF_MEASURE
        dsi->update_bytes = dsi->vm.hactive * dsi->vm.vactive *
-               dsi_get_pixel_size(dsi->pix_fmt) / 8;
+               mipi_dsi_pixel_format_to_bpp(dsi->pix_fmt) / 8;
 #endif
        dsi_update_screen_dispc(dsi);
 
@@ -4013,7 +3998,7 @@ static int dsi_display_init_dispc(struct dsi_data *dsi)
 
        dsi->mgr_config.io_pad_mode = DSS_IO_PAD_MODE_BYPASS;
        dsi->mgr_config.video_port_width =
-                       dsi_get_pixel_size(dsi->pix_fmt);
+                       mipi_dsi_pixel_format_to_bpp(dsi->pix_fmt);
        dsi->mgr_config.lcden_sig_polarity = 0;
 
        dss_mgr_set_lcd_config(&dsi->output, &dsi->mgr_config);
@@ -4351,7 +4336,7 @@ static bool dsi_cm_calc(struct dsi_data *dsi,
        unsigned long pck, txbyteclk;
 
        clkin = clk_get_rate(dsi->pll.clkin);
-       bitspp = dsi_get_pixel_size(cfg->pixel_format);
+       bitspp = mipi_dsi_pixel_format_to_bpp(cfg->pixel_format);
        ndl = dsi->num_lanes_used - 1;
 
        /*
@@ -4384,7 +4369,7 @@ static bool dsi_vm_calc_blanking(struct dsi_clk_calc_ctx 
*ctx)
 {
        struct dsi_data *dsi = ctx->dsi;
        const struct omap_dss_dsi_config *cfg = ctx->config;
-       int bitspp = dsi_get_pixel_size(cfg->pixel_format);
+       int bitspp = mipi_dsi_pixel_format_to_bpp(cfg->pixel_format);
        int ndl = dsi->num_lanes_used - 1;
        unsigned long hsclk = ctx->dsi_cinfo.clkdco / 4;
        unsigned long byteclk = hsclk / 4;
@@ -4651,7 +4636,7 @@ static bool dsi_vm_calc(struct dsi_data *dsi,
        unsigned long pll_min;
        unsigned long pll_max;
        int ndl = dsi->num_lanes_used - 1;
-       int bitspp = dsi_get_pixel_size(cfg->pixel_format);
+       int bitspp = mipi_dsi_pixel_format_to_bpp(cfg->pixel_format);
        unsigned long byteclk_min;
 
        clkin = clk_get_rate(dsi->pll.clkin);
@@ -4697,6 +4682,12 @@ static int dsi_set_config(struct omap_dss_device *dssdev,
        dsi->pix_fmt = config->pixel_format;
        dsi->mode = config->mode;
 
+       if (mipi_dsi_pixel_format_to_bpp(dsi->pix_fmt) < 0) {
+               DSSERR("invalid pixel format\n");
+               r = -EINVAL;
+               goto err;
+       }
+
        if (config->mode == OMAP_DSS_DSI_VIDEO_MODE)
                ok = dsi_vm_calc(dsi, config, &ctx);
        else
diff --git a/drivers/gpu/drm/omapdrm/dss/omapdss.h 
b/drivers/gpu/drm/omapdrm/dss/omapdss.h
index 6f068f881cb3..a316b347785b 100644
--- a/drivers/gpu/drm/omapdrm/dss/omapdss.h
+++ b/drivers/gpu/drm/omapdrm/dss/omapdss.h
@@ -12,8 +12,10 @@
 #include <linux/interrupt.h>
 #include <video/videomode.h>
 #include <linux/platform_data/omapdss.h>
-#include <uapi/drm/drm_mode.h>
+
 #include <drm/drm_crtc.h>
+#include <drm/drm_mipi_dsi.h>
+#include <drm/drm_mode.h>
 
 #define DISPC_IRQ_FRAMEDONE            (1 << 0)
 #define DISPC_IRQ_VSYNC                        (1 << 1)
@@ -116,13 +118,6 @@ enum omap_dss_venc_type {
        OMAP_DSS_VENC_TYPE_SVIDEO,
 };
 
-enum omap_dss_dsi_pixel_format {
-       OMAP_DSS_DSI_FMT_RGB888,
-       OMAP_DSS_DSI_FMT_RGB666,
-       OMAP_DSS_DSI_FMT_RGB666_PACKED,
-       OMAP_DSS_DSI_FMT_RGB565,
-};
-
 enum omap_dss_dsi_mode {
        OMAP_DSS_DSI_CMD_MODE = 0,
        OMAP_DSS_DSI_VIDEO_MODE,
@@ -210,7 +205,7 @@ struct omap_dss_dsi_videomode_timings {
 
 struct omap_dss_dsi_config {
        enum omap_dss_dsi_mode mode;
-       enum omap_dss_dsi_pixel_format pixel_format;
+       enum mipi_dsi_pixel_format pixel_format;
        const struct videomode *vm;
 
        unsigned long hs_clk_min, hs_clk_max;
-- 
Texas Instruments Finland Oy, Porkkalankatu 22, 00180 Helsinki.
Y-tunnus/Business ID: 0615521-4. Kotipaikka/Domicile: Helsinki

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

Reply via email to