mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-16 14:36:42 +07:00
drm: omapdrm: dss: Store the registered plls array in struct dss_device
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>
This commit is contained in:
parent
f33656e1fe
commit
798957aedb
@ -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];
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -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);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user