|
@@ -35,15 +35,14 @@
|
|
|
#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;
|
|
|
}
|
|
|
}
|