Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 251039
b: refs/heads/master
c: 24c1ae4
h: refs/heads/master
i:
  251037: d845a2b
  251035: 56668a8
  251031: 130bc8b
  251023: 6ff0b78
  251007: 76c3cbd
v: v3
  • Loading branch information
Tomi Valkeinen committed May 11, 2011
1 parent 31649b7 commit e008dfe
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 6 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: c335cbf94e7450fb41aafe97e805752a830d3a43
refs/heads/master: 24c1ae4191e911caa08b31079d61ff4db319a101
33 changes: 28 additions & 5 deletions trunk/drivers/video/omap2/dss/dsi.c
Original file line number Diff line number Diff line change
Expand Up @@ -305,6 +305,8 @@ static struct
unsigned long regm_dispc_max, regm_dsi_max;
unsigned long fint_min, fint_max;
unsigned long lpdiv_max;

unsigned scp_clk_refcount;
} dsi;

#ifdef DEBUG
Expand Down Expand Up @@ -1073,6 +1075,18 @@ static int dsi_set_lp_clk_divisor(struct omap_dss_device *dssdev)
return 0;
}

static void dsi_enable_scp_clk(void)
{
if (dsi.scp_clk_refcount++ == 0)
REG_FLD_MOD(DSI_CLK_CTRL, 1, 14, 14); /* CIO_CLK_ICG */
}

static void dsi_disable_scp_clk(void)
{
WARN_ON(dsi.scp_clk_refcount == 0);
if (--dsi.scp_clk_refcount == 0)
REG_FLD_MOD(DSI_CLK_CTRL, 0, 14, 14); /* CIO_CLK_ICG */
}

enum dsi_pll_power_state {
DSI_PLL_POWER_OFF = 0x0,
Expand Down Expand Up @@ -1458,6 +1472,10 @@ int dsi_pll_init(struct omap_dss_device *dssdev, bool enable_hsclk,

enable_clocks(1);
dsi_enable_pll_clock(1);
/*
* Note: SCP CLK is not required on OMAP3, but it is required on OMAP4.
*/
dsi_enable_scp_clk();

if (!dsi.vdds_dsi_enabled) {
r = regulator_enable(dsi.vdds_dsi_reg);
Expand Down Expand Up @@ -1503,23 +1521,26 @@ int dsi_pll_init(struct omap_dss_device *dssdev, bool enable_hsclk,
dsi.vdds_dsi_enabled = false;
}
err0:
dsi_disable_scp_clk();
enable_clocks(0);
dsi_enable_pll_clock(0);
return r;
}

void dsi_pll_uninit(bool disconnect_lanes)
{
enable_clocks(0);
dsi_enable_pll_clock(0);

dsi.pll_locked = 0;
dsi_pll_power(DSI_PLL_POWER_OFF);
if (disconnect_lanes) {
WARN_ON(!dsi.vdds_dsi_enabled);
regulator_disable(dsi.vdds_dsi_reg);
dsi.vdds_dsi_enabled = false;
}

dsi_disable_scp_clk();
enable_clocks(0);
dsi_enable_pll_clock(0);

DSSDBG("PLL uninit done\n");
}

Expand Down Expand Up @@ -3611,8 +3632,7 @@ static int dsi_display_init_dsi(struct omap_dss_device *dssdev)
int r;

/* The SCPClk is required for both PLL and CIO registers on OMAP4 */
/* CIO_CLK_ICG, enable L3 clk to CIO */
REG_FLD_MOD(DSI_CLK_CTRL, 1, 14, 14);
dsi_enable_scp_clk();

_dsi_print_reset_status();

Expand Down Expand Up @@ -3668,6 +3688,7 @@ static int dsi_display_init_dsi(struct omap_dss_device *dssdev)
err1:
dsi_pll_uninit(true);
err0:
dsi_disable_scp_clk();
return r;
}

Expand All @@ -3688,6 +3709,7 @@ static void dsi_display_uninit_dsi(struct omap_dss_device *dssdev,
dss_select_dsi_clk_source(OMAP_DSS_CLK_SRC_FCK);
dsi_cio_uninit();
dsi_pll_uninit(disconnect_lanes);
dsi_disable_scp_clk();
}

static int dsi_core_init(void)
Expand Down Expand Up @@ -4013,6 +4035,7 @@ static int omap_dsi1hw_probe(struct platform_device *pdev)
static int omap_dsi1hw_remove(struct platform_device *pdev)
{
dsi_exit();
WARN_ON(dsi.scp_clk_refcount > 0);
return 0;
}

Expand Down

0 comments on commit e008dfe

Please sign in to comment.