ARM: imx: set up pllv3 POWER and BYPASS sequentially
Currently, POWER and BYPASS bits are set up in a single write to pllv3 register. This causes problem occasionally from the IPU/HDMI testing. Let's follow FSL BSP code to set up POWER bit, relock, and then BYPASS sequentially. Signed-off-by: Shawn Guo <shawn.guo@linaro.org>
This commit is contained in:
parent
bc3b84da8a
commit
43c9b9e8a4
|
@ -71,16 +71,24 @@ static int clk_pllv3_prepare(struct clk_hw *hw)
|
||||||
{
|
{
|
||||||
struct clk_pllv3 *pll = to_clk_pllv3(hw);
|
struct clk_pllv3 *pll = to_clk_pllv3(hw);
|
||||||
u32 val;
|
u32 val;
|
||||||
|
int ret;
|
||||||
|
|
||||||
val = readl_relaxed(pll->base);
|
val = readl_relaxed(pll->base);
|
||||||
val &= ~BM_PLL_BYPASS;
|
|
||||||
if (pll->powerup_set)
|
if (pll->powerup_set)
|
||||||
val |= BM_PLL_POWER;
|
val |= BM_PLL_POWER;
|
||||||
else
|
else
|
||||||
val &= ~BM_PLL_POWER;
|
val &= ~BM_PLL_POWER;
|
||||||
writel_relaxed(val, pll->base);
|
writel_relaxed(val, pll->base);
|
||||||
|
|
||||||
return clk_pllv3_wait_lock(pll);
|
ret = clk_pllv3_wait_lock(pll);
|
||||||
|
if (ret)
|
||||||
|
return ret;
|
||||||
|
|
||||||
|
val = readl_relaxed(pll->base);
|
||||||
|
val &= ~BM_PLL_BYPASS;
|
||||||
|
writel_relaxed(val, pll->base);
|
||||||
|
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void clk_pllv3_unprepare(struct clk_hw *hw)
|
static void clk_pllv3_unprepare(struct clk_hw *hw)
|
||||||
|
|
Loading…
Reference in New Issue