OMAPDSS: DSI: add enum omap_dss_dsi_trans_mode
Tomi Valkeinen [Tue, 5 Mar 2013 14:29:36 +0000 (16:29 +0200)]
Instead of managing DSI sync ends with booleans, add an enum for the DSI
transfer mode. This is much cleaner way to handle the DSI syncs.

Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>

drivers/video/omap2/dss/dsi.c
include/video/omapdss.h

index 590da06..e8f5bdb 100644 (file)
@@ -3813,18 +3813,22 @@ static void dsi_config_vp_num_line_buffers(struct platform_device *dsidev)
 static void dsi_config_vp_sync_events(struct platform_device *dsidev)
 {
        struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev);
-       bool vsync_end = dsi->vm_timings.vp_vsync_end;
-       bool hsync_end = dsi->vm_timings.vp_hsync_end;
+       bool sync_end;
        u32 r;
 
+       if (dsi->vm_timings.trans_mode == OMAP_DSS_DSI_PULSE_MODE)
+               sync_end = true;
+       else
+               sync_end = false;
+
        r = dsi_read_reg(dsidev, DSI_CTRL);
        r = FLD_MOD(r, 1, 9, 9);                /* VP_DE_POL */
        r = FLD_MOD(r, 1, 10, 10);              /* VP_HSYNC_POL */
        r = FLD_MOD(r, 1, 11, 11);              /* VP_VSYNC_POL */
        r = FLD_MOD(r, 1, 15, 15);              /* VP_VSYNC_START */
-       r = FLD_MOD(r, vsync_end, 16, 16);      /* VP_VSYNC_END */
+       r = FLD_MOD(r, sync_end, 16, 16);       /* VP_VSYNC_END */
        r = FLD_MOD(r, 1, 17, 17);              /* VP_HSYNC_START */
-       r = FLD_MOD(r, hsync_end, 18, 18);      /* VP_HSYNC_END */
+       r = FLD_MOD(r, sync_end, 18, 18);       /* VP_HSYNC_END */
        dsi_write_reg(dsidev, DSI_CTRL, r);
 }
 
@@ -4171,11 +4175,12 @@ static void dsi_proto_timings(struct platform_device *dsidev)
                int vfp = dsi->vm_timings.vfp;
                int vbp = dsi->vm_timings.vbp;
                int window_sync = dsi->vm_timings.window_sync;
-               bool hsync_end = dsi->vm_timings.vp_hsync_end;
+               bool hsync_end;
                struct omap_video_timings *timings = &dsi->timings;
                int bpp = dsi_get_pixel_size(dsi->pix_fmt);
                int tl, t_he, width_bytes;
 
+               hsync_end = dsi->vm_timings.trans_mode == OMAP_DSS_DSI_PULSE_MODE;
                t_he = hsync_end ?
                        ((hsa == 0 && ndl == 3) ? 1 : DIV_ROUND_UP(4, ndl)) : 0;
 
index 4dd4cea..7f774c5 100644 (file)
@@ -257,6 +257,15 @@ void rfbi_bus_unlock(void);
 
 /* DSI */
 
+enum omap_dss_dsi_trans_mode {
+       /* Sync Pulses: both sync start and end packets sent */
+       OMAP_DSS_DSI_PULSE_MODE,
+       /* Sync Events: only sync start packets sent */
+       OMAP_DSS_DSI_EVENT_MODE,
+       /* Burst: only sync start packets sent, pixels are time compressed */
+       OMAP_DSS_DSI_BURST_MODE,
+};
+
 struct omap_dss_dsi_videomode_timings {
        /* DSI video mode blanking data */
        /* Unit: byte clock cycles */
@@ -274,9 +283,7 @@ struct omap_dss_dsi_videomode_timings {
        int hbp_blanking_mode;
        int hfp_blanking_mode;
 
-       /* Video port sync events */
-       bool vp_vsync_end;
-       bool vp_hsync_end;
+       enum omap_dss_dsi_trans_mode trans_mode;
 
        bool ddr_clk_always_on;
        int window_sync;