drm/omap: add PLL helper funcs
authorTomi Valkeinen <tomi.valkeinen@ti.com>
Wed, 18 May 2016 09:42:09 +0000 (12:42 +0300)
committerTomi Valkeinen <tomi.valkeinen@ti.com>
Thu, 19 May 2016 17:19:06 +0000 (20:19 +0300)
Add two PLL helper functions:

dss_pll_find_by_src() which returns the dss_pll for the given
dss_clk_source.

dss_pll_get_clkout_idx_for_src() which returns the clkout index for the
given dss_clk_source.

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

index 1ef53bb..57ee26e 100644 (file)
@@ -428,6 +428,8 @@ typedef bool (*dss_hsdiv_calc_func)(int m_dispc, unsigned long dispc,
 int dss_pll_register(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);
+unsigned 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);
 int dss_pll_set_config(struct dss_pll *pll,
index f974ddc..c93233e 100644 (file)
@@ -76,6 +76,59 @@ struct dss_pll *dss_pll_find(const char *name)
        return NULL;
 }
 
+struct dss_pll *dss_pll_find_by_src(enum dss_clk_source src)
+{
+       struct dss_pll *pll;
+
+       switch (src) {
+       default:
+       case DSS_CLK_SRC_FCK:
+               return NULL;
+
+       case DSS_CLK_SRC_HDMI_PLL:
+               return dss_pll_find("hdmi");
+
+       case DSS_CLK_SRC_PLL1_1:
+       case DSS_CLK_SRC_PLL1_2:
+       case DSS_CLK_SRC_PLL1_3:
+               pll = dss_pll_find("dsi0");
+               if (!pll)
+                       pll = dss_pll_find("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");
+               if (!pll)
+                       pll = dss_pll_find("video1");
+               return pll;
+       }
+}
+
+unsigned dss_pll_get_clkout_idx_for_src(enum dss_clk_source src)
+{
+       switch (src) {
+       case DSS_CLK_SRC_HDMI_PLL:
+               return 0;
+
+       case DSS_CLK_SRC_PLL1_1:
+       case DSS_CLK_SRC_PLL2_1:
+               return 0;
+
+       case DSS_CLK_SRC_PLL1_2:
+       case DSS_CLK_SRC_PLL2_2:
+               return 1;
+
+       case DSS_CLK_SRC_PLL1_3:
+       case DSS_CLK_SRC_PLL2_3:
+               return 2;
+
+       default:
+               return 0;
+       }
+}
+
 int dss_pll_enable(struct dss_pll *pll)
 {
        int r;