Move the two function pointers to a new dss_ops structure. This will
allow merging the dss_features and omap_dss_features structures without
having to expose the DPI source selection and LCD clock muxing functions
in header files.

Signed-off-by: Laurent Pinchart <laurent.pinch...@ideasonboard.com>
---
Changes since v2:

- Correctly use dss_ops_omap4 instead of dss_ops_dra7 for OMAP44xx
---
 drivers/gpu/drm/omapdrm/dss/dss.c | 50 +++++++++++++++++++++++++++------------
 1 file changed, 35 insertions(+), 15 deletions(-)

diff --git a/drivers/gpu/drm/omapdrm/dss/dss.c 
b/drivers/gpu/drm/omapdrm/dss/dss.c
index 99e22ca972c7..b8a2f92efcba 100644
--- a/drivers/gpu/drm/omapdrm/dss/dss.c
+++ b/drivers/gpu/drm/omapdrm/dss/dss.c
@@ -69,15 +69,19 @@ struct dss_reg {
 #define REG_FLD_MOD(idx, val, start, end) \
        dss_write_reg(idx, FLD_MOD(dss_read_reg(idx), val, start, end))
 
+struct dss_ops {
+       int (*dpi_select_source)(int port, enum omap_channel channel);
+       int (*select_lcd_source)(enum omap_channel channel,
+               enum dss_clk_source clk_src);
+};
+
 struct dss_features {
        u8 fck_div_max;
        u8 dss_fck_multiplier;
        const char *parent_clk_name;
        const enum omap_display_type *ports;
        int num_ports;
-       int (*dpi_select_source)(int port, enum omap_channel channel);
-       int (*select_lcd_source)(enum omap_channel channel,
-               enum dss_clk_source clk_src);
+       const struct dss_ops *ops;
 };
 
 static struct {
@@ -576,7 +580,7 @@ void dss_select_lcd_clk_source(enum omap_channel channel,
                return;
        }
 
-       r = dss.feat->select_lcd_source(channel, clk_src);
+       r = dss.feat->ops->select_lcd_source(channel, clk_src);
        if (r)
                return;
 
@@ -823,7 +827,7 @@ static int dss_dpi_select_source_dra7xx(int port, enum 
omap_channel channel)
 
 int dss_dpi_select_source(int port, enum omap_channel channel)
 {
-       return dss.feat->dpi_select_source(port, channel);
+       return dss.feat->ops->dpi_select_source(port, channel);
 }
 
 static int dss_get_clocks(void)
@@ -893,6 +897,25 @@ void dss_debug_dump_clocks(struct seq_file *s)
 #endif
 
 
+static const struct dss_ops dss_ops_omap2_omap3 = {
+       .dpi_select_source = &dss_dpi_select_source_omap2_omap3,
+};
+
+static const struct dss_ops dss_ops_omap4 = {
+       .dpi_select_source = &dss_dpi_select_source_omap4,
+       .select_lcd_source = &dss_lcd_clk_mux_omap4,
+};
+
+static const struct dss_ops dss_ops_omap5 = {
+       .dpi_select_source = &dss_dpi_select_source_omap5,
+       .select_lcd_source = &dss_lcd_clk_mux_omap5,
+};
+
+static const struct dss_ops dss_ops_dra7 = {
+       .dpi_select_source = &dss_dpi_select_source_dra7xx,
+       .select_lcd_source = &dss_lcd_clk_mux_dra7,
+};
+
 static const enum omap_display_type omap2plus_ports[] = {
        OMAP_DISPLAY_TYPE_DPI,
 };
@@ -916,66 +939,63 @@ static const struct dss_features omap24xx_dss_feats = {
        .fck_div_max            =       6,
        .dss_fck_multiplier     =       2,
        .parent_clk_name        =       "core_ck",
-       .dpi_select_source      =       &dss_dpi_select_source_omap2_omap3,
        .ports                  =       omap2plus_ports,
        .num_ports              =       ARRAY_SIZE(omap2plus_ports),
+       .ops                    =       &dss_ops_omap2_omap3,
 };
 
 static const struct dss_features omap34xx_dss_feats = {
        .fck_div_max            =       16,
        .dss_fck_multiplier     =       2,
        .parent_clk_name        =       "dpll4_ck",
-       .dpi_select_source      =       &dss_dpi_select_source_omap2_omap3,
        .ports                  =       omap34xx_ports,
        .num_ports              =       ARRAY_SIZE(omap34xx_ports),
+       .ops                    =       &dss_ops_omap2_omap3,
 };
 
 static const struct dss_features omap3630_dss_feats = {
        .fck_div_max            =       32,
        .dss_fck_multiplier     =       1,
        .parent_clk_name        =       "dpll4_ck",
-       .dpi_select_source      =       &dss_dpi_select_source_omap2_omap3,
        .ports                  =       omap2plus_ports,
        .num_ports              =       ARRAY_SIZE(omap2plus_ports),
+       .ops                    =       &dss_ops_omap2_omap3,
 };
 
 static const struct dss_features omap44xx_dss_feats = {
        .fck_div_max            =       32,
        .dss_fck_multiplier     =       1,
        .parent_clk_name        =       "dpll_per_x2_ck",
-       .dpi_select_source      =       &dss_dpi_select_source_omap4,
        .ports                  =       omap2plus_ports,
        .num_ports              =       ARRAY_SIZE(omap2plus_ports),
-       .select_lcd_source      =       &dss_lcd_clk_mux_omap4,
+       .ops                    =       &dss_ops_omap4,
 };
 
 static const struct dss_features omap54xx_dss_feats = {
        .fck_div_max            =       64,
        .dss_fck_multiplier     =       1,
        .parent_clk_name        =       "dpll_per_x2_ck",
-       .dpi_select_source      =       &dss_dpi_select_source_omap5,
        .ports                  =       omap2plus_ports,
        .num_ports              =       ARRAY_SIZE(omap2plus_ports),
-       .select_lcd_source      =       &dss_lcd_clk_mux_omap5,
+       .ops                    =       &dss_ops_omap5,
 };
 
 static const struct dss_features am43xx_dss_feats = {
        .fck_div_max            =       0,
        .dss_fck_multiplier     =       0,
        .parent_clk_name        =       NULL,
-       .dpi_select_source      =       &dss_dpi_select_source_omap2_omap3,
        .ports                  =       omap2plus_ports,
        .num_ports              =       ARRAY_SIZE(omap2plus_ports),
+       .ops                    =       &dss_ops_omap2_omap3,
 };
 
 static const struct dss_features dra7xx_dss_feats = {
        .fck_div_max            =       64,
        .dss_fck_multiplier     =       1,
        .parent_clk_name        =       "dpll_per_x2_ck",
-       .dpi_select_source      =       &dss_dpi_select_source_dra7xx,
        .ports                  =       dra7xx_ports,
        .num_ports              =       ARRAY_SIZE(dra7xx_ports),
-       .select_lcd_source      =       &dss_lcd_clk_mux_dra7,
+       .ops                    =       &dss_ops_dra7,
 };
 
 static int dss_init_features(struct platform_device *pdev)
-- 
Regards,

Laurent Pinchart

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

Reply via email to