drm/omap: add writeback funcs to dispc_ops
authorTomi Valkeinen <tomi.valkeinen@ti.com>
Tue, 10 Nov 2015 23:59:50 +0000 (17:59 -0600)
committerTomi Valkeinen <tomi.valkeinen@ti.com>
Thu, 1 Mar 2018 07:18:18 +0000 (09:18 +0200)
Add writeback specific dispc functions to dispc_ops so that omapdrm can
use them.  Also move 'enum dss_writeback_channel' to the public
omapdss.h for omapdrm.

Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
drivers/gpu/drm/omapdrm/dss/dispc.c
drivers/gpu/drm/omapdrm/dss/dss.h
drivers/gpu/drm/omapdrm/dss/omapdss.h

index 2aa7284..57960df 100644 (file)
@@ -715,7 +715,7 @@ static u32 dispc_mgr_get_sync_lost_irq(struct dispc_device *dispc,
        return mgr_desc[channel].sync_lost_irq;
 }
 
-u32 dispc_wb_get_framedone_irq(struct dispc_device *dispc)
+static u32 dispc_wb_get_framedone_irq(struct dispc_device *dispc)
 {
        return DISPC_IRQ_FRAMEDONEWB;
 }
@@ -750,12 +750,12 @@ static void dispc_mgr_go(struct dispc_device *dispc, enum omap_channel channel)
        mgr_fld_write(dispc, channel, DISPC_MGR_FLD_GO, 1);
 }
 
-bool dispc_wb_go_busy(struct dispc_device *dispc)
+static bool dispc_wb_go_busy(struct dispc_device *dispc)
 {
        return REG_GET(dispc, DISPC_CONTROL2, 6, 6) == 1;
 }
 
-void dispc_wb_go(struct dispc_device *dispc)
+static void dispc_wb_go(struct dispc_device *dispc)
 {
        enum omap_plane_id plane = OMAP_DSS_WB;
        bool enable, go;
@@ -2771,7 +2771,7 @@ static int dispc_ovl_setup(struct dispc_device *dispc,
        return r;
 }
 
-int dispc_wb_setup(struct dispc_device *dispc,
+static int dispc_wb_setup(struct dispc_device *dispc,
                   const struct omap_dss_writeback_info *wi,
                   bool mem_to_mem, const struct videomode *vm,
                   enum dss_writeback_channel channel_in)
@@ -2854,6 +2854,11 @@ int dispc_wb_setup(struct dispc_device *dispc,
        return 0;
 }
 
+static bool dispc_has_writeback(struct dispc_device *dispc)
+{
+       return dispc->feat->has_writeback;
+}
+
 static int dispc_ovl_enable(struct dispc_device *dispc,
                            enum omap_plane_id plane, bool enable)
 {
@@ -4709,6 +4714,12 @@ static const struct dispc_ops dispc_ops = {
        .ovl_enable = dispc_ovl_enable,
        .ovl_setup = dispc_ovl_setup,
        .ovl_get_color_modes = dispc_ovl_get_color_modes,
+
+       .wb_get_framedone_irq = dispc_wb_get_framedone_irq,
+       .wb_setup = dispc_wb_setup,
+       .has_writeback = dispc_has_writeback,
+       .wb_go_busy = dispc_wb_go_busy,
+       .wb_go = dispc_wb_go,
 };
 
 /* DISPC HW IP initialisation */
index c56c3c5..c601ed9 100644 (file)
@@ -102,17 +102,6 @@ enum dss_dsi_content_type {
        DSS_DSI_CONTENT_GENERIC,
 };
 
-enum dss_writeback_channel {
-       DSS_WB_LCD1_MGR =       0,
-       DSS_WB_LCD2_MGR =       1,
-       DSS_WB_TV_MGR =         2,
-       DSS_WB_OVL0 =           3,
-       DSS_WB_OVL1 =           4,
-       DSS_WB_OVL2 =           5,
-       DSS_WB_OVL3 =           6,
-       DSS_WB_LCD3_MGR =       7,
-};
-
 enum dss_clk_source {
        DSS_CLK_SRC_FCK = 0,
 
@@ -448,16 +437,6 @@ int dispc_mgr_get_clock_div(struct dispc_device *dispc,
                            struct dispc_clock_info *cinfo);
 void dispc_set_tv_pclk(struct dispc_device *dispc, unsigned long pclk);
 
-u32 dispc_wb_get_framedone_irq(struct dispc_device *dispc);
-bool dispc_wb_go_busy(struct dispc_device *dispc);
-void dispc_wb_go(struct dispc_device *dispc);
-void dispc_wb_set_channel_in(struct dispc_device *dispc,
-                            enum dss_writeback_channel channel);
-int dispc_wb_setup(struct dispc_device *dispc,
-                  const struct omap_dss_writeback_info *wi,
-                  bool mem_to_mem, const struct videomode *vm,
-                  enum dss_writeback_channel channel_in);
-
 #ifdef CONFIG_OMAP2_DSS_COLLECT_IRQ_STATS
 static inline void dss_collect_irq_stats(u32 irqstatus, unsigned int *irq_arr)
 {
index 162f36f..14d74ad 100644 (file)
@@ -626,6 +626,17 @@ omapdss_of_find_source_for_first_ep(struct device_node *node);
 struct device_node *dss_of_port_get_parent_device(struct device_node *port);
 u32 dss_of_port_get_port_number(struct device_node *port);
 
+enum dss_writeback_channel {
+       DSS_WB_LCD1_MGR =       0,
+       DSS_WB_LCD2_MGR =       1,
+       DSS_WB_TV_MGR =         2,
+       DSS_WB_OVL0 =           3,
+       DSS_WB_OVL1 =           4,
+       DSS_WB_OVL2 =           5,
+       DSS_WB_OVL3 =           6,
+       DSS_WB_LCD3_MGR =       7,
+};
+
 struct dss_mgr_ops {
        int (*connect)(struct omap_drm_private *priv,
                       enum omap_channel channel,
@@ -732,6 +743,15 @@ struct dispc_ops {
 
        const u32 *(*ovl_get_color_modes)(struct dispc_device *dispc,
                                          enum omap_plane_id plane);
+
+       u32 (*wb_get_framedone_irq)(struct dispc_device *dispc);
+       int (*wb_setup)(struct dispc_device *dispc,
+               const struct omap_dss_writeback_info *wi,
+               bool mem_to_mem, const struct videomode *vm,
+               enum dss_writeback_channel channel_in);
+       bool (*has_writeback)(struct dispc_device *dispc);
+       bool (*wb_go_busy)(struct dispc_device *dispc);
+       void (*wb_go)(struct dispc_device *dispc);
 };
 
 struct dispc_device *dispc_get_dispc(struct dss_device *dss);