|
@@ -111,7 +111,8 @@ static unsigned long samsung_pll36xx_recalc_rate(struct clk_hw *hw,
|
|
|
unsigned long parent_rate)
|
|
|
{
|
|
|
struct samsung_clk_pll36xx *pll = to_clk_pll36xx(hw);
|
|
|
- u32 mdiv, pdiv, sdiv, kdiv, pll_con0, pll_con1;
|
|
|
+ u32 mdiv, pdiv, sdiv, pll_con0, pll_con1;
|
|
|
+ s16 kdiv;
|
|
|
u64 fvco = parent_rate;
|
|
|
|
|
|
pll_con0 = __raw_readl(pll->con_reg);
|
|
@@ -119,7 +120,7 @@ static unsigned long samsung_pll36xx_recalc_rate(struct clk_hw *hw,
|
|
|
mdiv = (pll_con0 >> PLL36XX_MDIV_SHIFT) & PLL36XX_MDIV_MASK;
|
|
|
pdiv = (pll_con0 >> PLL36XX_PDIV_SHIFT) & PLL36XX_PDIV_MASK;
|
|
|
sdiv = (pll_con0 >> PLL36XX_SDIV_SHIFT) & PLL36XX_SDIV_MASK;
|
|
|
- kdiv = pll_con1 & PLL36XX_KDIV_MASK;
|
|
|
+ kdiv = (s16)(pll_con1 & PLL36XX_KDIV_MASK);
|
|
|
|
|
|
fvco *= (mdiv << 16) + kdiv;
|
|
|
do_div(fvco, (pdiv << sdiv));
|