OMAPDSS: DPI: always use DSI PLL if available
We currently get the decision whether to use PRCM or DSI PLL clock for DPI from the board file. This is not a good way to handle it, and it won't work with device tree. This patch changes DPI to always use DSI PLL if it's available. Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
This commit is contained in:
@@ -49,28 +49,30 @@ static struct {
|
|||||||
struct omap_dss_output output;
|
struct omap_dss_output output;
|
||||||
} dpi;
|
} dpi;
|
||||||
|
|
||||||
static struct platform_device *dpi_get_dsidev(enum omap_dss_clk_source clk)
|
static struct platform_device *dpi_get_dsidev(enum omap_channel channel)
|
||||||
{
|
{
|
||||||
int dsi_module;
|
switch (channel) {
|
||||||
|
case OMAP_DSS_CHANNEL_LCD:
|
||||||
dsi_module = clk == OMAP_DSS_CLK_SRC_DSI_PLL_HSDIV_DISPC ? 0 : 1;
|
return dsi_get_dsidev_from_id(0);
|
||||||
|
case OMAP_DSS_CHANNEL_LCD2:
|
||||||
return dsi_get_dsidev_from_id(dsi_module);
|
return dsi_get_dsidev_from_id(1);
|
||||||
|
default:
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool dpi_use_dsi_pll(struct omap_dss_device *dssdev)
|
static enum omap_dss_clk_source dpi_get_alt_clk_src(enum omap_channel channel)
|
||||||
{
|
{
|
||||||
if (dssdev->clocks.dispc.dispc_fclk_src ==
|
switch (channel) {
|
||||||
OMAP_DSS_CLK_SRC_DSI_PLL_HSDIV_DISPC ||
|
case OMAP_DSS_CHANNEL_LCD:
|
||||||
dssdev->clocks.dispc.dispc_fclk_src ==
|
return OMAP_DSS_CLK_SRC_DSI_PLL_HSDIV_DISPC;
|
||||||
OMAP_DSS_CLK_SRC_DSI2_PLL_HSDIV_DISPC ||
|
case OMAP_DSS_CHANNEL_LCD2:
|
||||||
dssdev->clocks.dispc.channel.lcd_clk_src ==
|
return OMAP_DSS_CLK_SRC_DSI2_PLL_HSDIV_DISPC;
|
||||||
OMAP_DSS_CLK_SRC_DSI_PLL_HSDIV_DISPC ||
|
default:
|
||||||
dssdev->clocks.dispc.channel.lcd_clk_src ==
|
/* this shouldn't happen */
|
||||||
OMAP_DSS_CLK_SRC_DSI2_PLL_HSDIV_DISPC)
|
WARN_ON(1);
|
||||||
return true;
|
return OMAP_DSS_CLK_SRC_FCK;
|
||||||
else
|
}
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int dpi_set_dsi_clk(struct omap_dss_device *dssdev,
|
static int dpi_set_dsi_clk(struct omap_dss_device *dssdev,
|
||||||
@@ -92,7 +94,7 @@ static int dpi_set_dsi_clk(struct omap_dss_device *dssdev,
|
|||||||
return r;
|
return r;
|
||||||
|
|
||||||
dss_select_lcd_clk_source(mgr->id,
|
dss_select_lcd_clk_source(mgr->id,
|
||||||
dssdev->clocks.dispc.channel.lcd_clk_src);
|
dpi_get_alt_clk_src(mgr->id));
|
||||||
|
|
||||||
dpi.mgr_config.clock_info = dispc_cinfo;
|
dpi.mgr_config.clock_info = dispc_cinfo;
|
||||||
|
|
||||||
@@ -385,6 +387,8 @@ static int __init dpi_verify_dsi_pll(struct platform_device *dsidev)
|
|||||||
|
|
||||||
static int __init dpi_init_display(struct omap_dss_device *dssdev)
|
static int __init dpi_init_display(struct omap_dss_device *dssdev)
|
||||||
{
|
{
|
||||||
|
struct platform_device *dsidev;
|
||||||
|
|
||||||
DSSDBG("init_display\n");
|
DSSDBG("init_display\n");
|
||||||
|
|
||||||
if (dss_has_feature(FEAT_DPI_USES_VDDS_DSI) &&
|
if (dss_has_feature(FEAT_DPI_USES_VDDS_DSI) &&
|
||||||
@@ -401,17 +405,23 @@ static int __init dpi_init_display(struct omap_dss_device *dssdev)
|
|||||||
dpi.vdds_dsi_reg = vdds_dsi;
|
dpi.vdds_dsi_reg = vdds_dsi;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dpi_use_dsi_pll(dssdev)) {
|
/*
|
||||||
enum omap_dss_clk_source dispc_fclk_src =
|
* XXX We shouldn't need dssdev->channel for this. The dsi pll clock
|
||||||
dssdev->clocks.dispc.dispc_fclk_src;
|
* source for DPI is SoC integration detail, not something that should
|
||||||
dpi.dsidev = dpi_get_dsidev(dispc_fclk_src);
|
* be configured in the dssdev
|
||||||
|
*/
|
||||||
|
dsidev = dpi_get_dsidev(dssdev->channel);
|
||||||
|
|
||||||
if (dpi_verify_dsi_pll(dpi.dsidev)) {
|
if (dpi_verify_dsi_pll(dsidev)) {
|
||||||
dpi.dsidev = NULL;
|
dsidev = NULL;
|
||||||
DSSWARN("DSI PLL not operational\n");
|
DSSWARN("DSI PLL not operational\n");
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (dsidev)
|
||||||
|
DSSDBG("using DSI PLL for DPI clock\n");
|
||||||
|
|
||||||
|
dpi.dsidev = dsidev;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user