drm: omapdrm: dss: Store the registered plls array in struct dss_device
authorLaurent Pinchart <laurent.pinchart@ideasonboard.com>
Tue, 13 Feb 2018 12:00:30 +0000 (14:00 +0200)
committerTomi Valkeinen <tomi.valkeinen@ti.com>
Thu, 1 Mar 2018 07:18:18 +0000 (09:18 +0200)
As part of an effort to remove the usage of global variables in the
driver, store the registered plls array in the dss_device structure
instead of a global variable.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Sebastian Reichel <sebastian.reichel@collabora.co.uk>
drivers/gpu/drm/omapdrm/dss/dispc.c
drivers/gpu/drm/omapdrm/dss/dpi.c
drivers/gpu/drm/omapdrm/dss/dsi.c
drivers/gpu/drm/omapdrm/dss/dss.h
drivers/gpu/drm/omapdrm/dss/hdmi_pll.c
drivers/gpu/drm/omapdrm/dss/pll.c
drivers/gpu/drm/omapdrm/dss/video-pll.c

index 3428ffea70ee06cf20a94813ee9a8bd308708834..285d297db229c208449024fd24a29b02c04a762c 100644 (file)
@@ -3123,7 +3123,7 @@ static unsigned long dispc_fclk_rate(void)
                struct dss_pll *pll;
                unsigned int clkout_idx;
 
-               pll = dss_pll_find_by_src(src);
+               pll = dss_pll_find_by_src(dispc.dss, src);
                clkout_idx = dss_pll_get_clkout_idx_for_src(src);
 
                r = pll->cinfo.clkout[clkout_idx];
@@ -3150,7 +3150,7 @@ static unsigned long dispc_mgr_lclk_rate(enum omap_channel channel)
                struct dss_pll *pll;
                unsigned int clkout_idx;
 
-               pll = dss_pll_find_by_src(src);
+               pll = dss_pll_find_by_src(dispc.dss, src);
                clkout_idx = dss_pll_get_clkout_idx_for_src(src);
 
                r = pll->cinfo.clkout[clkout_idx];
index ba5adfb7ee706c9b41b6246ef37d0b835f3088c5..338ceb1ba61bc72d9a3dd6d1c70919d3b49d2fb6 100644 (file)
@@ -58,7 +58,8 @@ static struct dpi_data *dpi_get_data_from_dssdev(struct omap_dss_device *dssdev)
        return container_of(dssdev, struct dpi_data, output);
 }
 
-static enum dss_clk_source dpi_get_clk_src_dra7xx(enum omap_channel channel)
+static enum dss_clk_source dpi_get_clk_src_dra7xx(struct dpi_data *dpi,
+                                                 enum omap_channel channel)
 {
        /*
         * Possible clock sources:
@@ -70,23 +71,23 @@ static enum dss_clk_source dpi_get_clk_src_dra7xx(enum omap_channel channel)
        switch (channel) {
        case OMAP_DSS_CHANNEL_LCD:
        {
-               if (dss_pll_find_by_src(DSS_CLK_SRC_PLL1_1))
+               if (dss_pll_find_by_src(dpi->dss, DSS_CLK_SRC_PLL1_1))
                        return DSS_CLK_SRC_PLL1_1;
                break;
        }
        case OMAP_DSS_CHANNEL_LCD2:
        {
-               if (dss_pll_find_by_src(DSS_CLK_SRC_PLL1_3))
+               if (dss_pll_find_by_src(dpi->dss, DSS_CLK_SRC_PLL1_3))
                        return DSS_CLK_SRC_PLL1_3;
-               if (dss_pll_find_by_src(DSS_CLK_SRC_PLL2_3))
+               if (dss_pll_find_by_src(dpi->dss, DSS_CLK_SRC_PLL2_3))
                        return DSS_CLK_SRC_PLL2_3;
                break;
        }
        case OMAP_DSS_CHANNEL_LCD3:
        {
-               if (dss_pll_find_by_src(DSS_CLK_SRC_PLL2_1))
+               if (dss_pll_find_by_src(dpi->dss, DSS_CLK_SRC_PLL2_1))
                        return DSS_CLK_SRC_PLL2_1;
-               if (dss_pll_find_by_src(DSS_CLK_SRC_PLL1_3))
+               if (dss_pll_find_by_src(dpi->dss, DSS_CLK_SRC_PLL1_3))
                        return DSS_CLK_SRC_PLL1_3;
                break;
        }
@@ -133,7 +134,7 @@ static enum dss_clk_source dpi_get_clk_src(struct dpi_data *dpi)
                }
 
        case DSS_MODEL_DRA7:
-               return dpi_get_clk_src_dra7xx(channel);
+               return dpi_get_clk_src_dra7xx(dpi, channel);
 
        default:
                return DSS_CLK_SRC_FCK;
@@ -605,7 +606,7 @@ static void dpi_init_pll(struct dpi_data *dpi)
 
        dpi->clk_src = dpi_get_clk_src(dpi);
 
-       pll = dss_pll_find_by_src(dpi->clk_src);
+       pll = dss_pll_find_by_src(dpi->dss, dpi->clk_src);
        if (!pll)
                return;
 
index a676d27dd47930669e21c85e81fc2820ad0730ad..448986031a6aaab6d56c70a0089c567af77b05c3 100644 (file)
@@ -5353,9 +5353,8 @@ static int dsi_init_pll_data(struct dss_device *dss,
        pll->base = dsi->pll_base;
        pll->hw = dsi->data->pll_hw;
        pll->ops = &dsi_pll_ops;
-       pll->dss = dss;
 
-       r = dss_pll_register(pll);
+       r = dss_pll_register(dss, pll);
        if (r)
                return r;
 
index ec8e40e091418110799a4fe5740a2630bfb2a079..8cc4b6ca203e89be44eabbe7c7d7414382d99926 100644 (file)
@@ -267,6 +267,7 @@ struct dss_device {
                struct dss_debugfs_entry *dss;
        } debugfs;
 
+       struct dss_pll *plls[4];
        struct dss_pll  *video1_pll;
        struct dss_pll  *video2_pll;
 };
@@ -458,10 +459,11 @@ typedef bool (*dss_pll_calc_func)(int n, int m, unsigned long fint,
 typedef bool (*dss_hsdiv_calc_func)(int m_dispc, unsigned long dispc,
                void *data);
 
-int dss_pll_register(struct dss_pll *pll);
+int dss_pll_register(struct dss_device *dss, struct dss_pll *pll);
 void dss_pll_unregister(struct dss_pll *pll);
-struct dss_pll *dss_pll_find(const char *name);
-struct dss_pll *dss_pll_find_by_src(enum dss_clk_source src);
+struct dss_pll *dss_pll_find(struct dss_device *dss, const char *name);
+struct dss_pll *dss_pll_find_by_src(struct dss_device *dss,
+                                   enum dss_clk_source src);
 unsigned int dss_pll_get_clkout_idx_for_src(enum dss_clk_source src);
 int dss_pll_enable(struct dss_pll *pll);
 void dss_pll_disable(struct dss_pll *pll);
index 4fb97cd0cc8d1ae30ae8b7c4438bb35f6cfe8220..e7be3707d1472c18b26c3afa2a1f17cfaf30430f 100644 (file)
@@ -146,7 +146,6 @@ static int hdmi_init_pll_data(struct dss_device *dss,
        pll->id = DSS_PLL_HDMI;
        pll->base = hpll->base;
        pll->clkin = clk;
-       pll->dss = dss;
 
        if (hpll->wp->version == 4)
                pll->hw = &dss_omap4_hdmi_pll_hw;
@@ -155,7 +154,7 @@ static int hdmi_init_pll_data(struct dss_device *dss,
 
        pll->ops = &hdmi_pll_ops;
 
-       r = dss_pll_register(pll);
+       r = dss_pll_register(dss, pll);
        if (r)
                return r;
 
index ecb03277d831d75e16572d69766edfa48169177c..078b0e8216c382c88769c51f1b7cb29d86d9c6df 100644 (file)
 #define PLL_SSC_CONFIGURATION2         0x001C
 #define PLL_CONFIGURATION4             0x0020
 
-static struct dss_pll *dss_plls[4];
-
-int dss_pll_register(struct dss_pll *pll)
+int dss_pll_register(struct dss_device *dss, struct dss_pll *pll)
 {
        int i;
 
-       for (i = 0; i < ARRAY_SIZE(dss_plls); ++i) {
-               if (!dss_plls[i]) {
-                       dss_plls[i] = pll;
+       for (i = 0; i < ARRAY_SIZE(dss->plls); ++i) {
+               if (!dss->plls[i]) {
+                       dss->plls[i] = pll;
+                       pll->dss = dss;
                        return 0;
                }
        }
@@ -53,29 +52,32 @@ int dss_pll_register(struct dss_pll *pll)
 
 void dss_pll_unregister(struct dss_pll *pll)
 {
+       struct dss_device *dss = pll->dss;
        int i;
 
-       for (i = 0; i < ARRAY_SIZE(dss_plls); ++i) {
-               if (dss_plls[i] == pll) {
-                       dss_plls[i] = NULL;
+       for (i = 0; i < ARRAY_SIZE(dss->plls); ++i) {
+               if (dss->plls[i] == pll) {
+                       dss->plls[i] = NULL;
+                       pll->dss = NULL;
                        return;
                }
        }
 }
 
-struct dss_pll *dss_pll_find(const char *name)
+struct dss_pll *dss_pll_find(struct dss_device *dss, const char *name)
 {
        int i;
 
-       for (i = 0; i < ARRAY_SIZE(dss_plls); ++i) {
-               if (dss_plls[i] && strcmp(dss_plls[i]->name, name) == 0)
-                       return dss_plls[i];
+       for (i = 0; i < ARRAY_SIZE(dss->plls); ++i) {
+               if (dss->plls[i] && strcmp(dss->plls[i]->name, name) == 0)
+                       return dss->plls[i];
        }
 
        return NULL;
 }
 
-struct dss_pll *dss_pll_find_by_src(enum dss_clk_source src)
+struct dss_pll *dss_pll_find_by_src(struct dss_device *dss,
+                                   enum dss_clk_source src)
 {
        struct dss_pll *pll;
 
@@ -85,22 +87,22 @@ struct dss_pll *dss_pll_find_by_src(enum dss_clk_source src)
                return NULL;
 
        case DSS_CLK_SRC_HDMI_PLL:
-               return dss_pll_find("hdmi");
+               return dss_pll_find(dss, "hdmi");
 
        case DSS_CLK_SRC_PLL1_1:
        case DSS_CLK_SRC_PLL1_2:
        case DSS_CLK_SRC_PLL1_3:
-               pll = dss_pll_find("dsi0");
+               pll = dss_pll_find(dss, "dsi0");
                if (!pll)
-                       pll = dss_pll_find("video0");
+                       pll = dss_pll_find(dss, "video0");
                return pll;
 
        case DSS_CLK_SRC_PLL2_1:
        case DSS_CLK_SRC_PLL2_2:
        case DSS_CLK_SRC_PLL2_3:
-               pll = dss_pll_find("dsi1");
+               pll = dss_pll_find(dss, "dsi1");
                if (!pll)
-                       pll = dss_pll_find("video1");
+                       pll = dss_pll_find(dss, "video1");
                return pll;
        }
 }
index 344e7e0bbc4ea4001b49f6afaca431a942f3d10a..585ed94ccf1781f1633279ac7ed0d651d2f20fa1 100644 (file)
@@ -190,9 +190,8 @@ struct dss_pll *dss_video_pll_init(struct dss_device *dss,
        pll->base = pll_base;
        pll->hw = &dss_dra7_video_pll_hw;
        pll->ops = &dss_pll_ops;
-       pll->dss = dss;
 
-       r = dss_pll_register(pll);
+       r = dss_pll_register(dss, pll);
        if (r)
                return ERR_PTR(r);