diff options
-rw-r--r-- | drivers/clk/samsung/clk-pll.c | 12 | ||||
-rw-r--r-- | drivers/clk/samsung/clk-pll.h | 1 |
2 files changed, 11 insertions, 2 deletions
diff --git a/drivers/clk/samsung/clk-pll.c b/drivers/clk/samsung/clk-pll.c index 81e6d2f49aa0..f9a35a612705 100644 --- a/drivers/clk/samsung/clk-pll.c +++ b/drivers/clk/samsung/clk-pll.c | |||
@@ -564,7 +564,9 @@ static const struct clk_ops samsung_pll46xx_clk_min_ops = { | |||
564 | #define PLL6552_PDIV_MASK 0x3f | 564 | #define PLL6552_PDIV_MASK 0x3f |
565 | #define PLL6552_SDIV_MASK 0x7 | 565 | #define PLL6552_SDIV_MASK 0x7 |
566 | #define PLL6552_MDIV_SHIFT 16 | 566 | #define PLL6552_MDIV_SHIFT 16 |
567 | #define PLL6552_MDIV_SHIFT_2416 14 | ||
567 | #define PLL6552_PDIV_SHIFT 8 | 568 | #define PLL6552_PDIV_SHIFT 8 |
569 | #define PLL6552_PDIV_SHIFT_2416 5 | ||
568 | #define PLL6552_SDIV_SHIFT 0 | 570 | #define PLL6552_SDIV_SHIFT 0 |
569 | 571 | ||
570 | static unsigned long samsung_pll6552_recalc_rate(struct clk_hw *hw, | 572 | static unsigned long samsung_pll6552_recalc_rate(struct clk_hw *hw, |
@@ -575,8 +577,13 @@ static unsigned long samsung_pll6552_recalc_rate(struct clk_hw *hw, | |||
575 | u64 fvco = parent_rate; | 577 | u64 fvco = parent_rate; |
576 | 578 | ||
577 | pll_con = __raw_readl(pll->con_reg); | 579 | pll_con = __raw_readl(pll->con_reg); |
578 | mdiv = (pll_con >> PLL6552_MDIV_SHIFT) & PLL6552_MDIV_MASK; | 580 | if (pll->type == pll_6552_s3c2416) { |
579 | pdiv = (pll_con >> PLL6552_PDIV_SHIFT) & PLL6552_PDIV_MASK; | 581 | mdiv = (pll_con >> PLL6552_MDIV_SHIFT_2416) & PLL6552_MDIV_MASK; |
582 | pdiv = (pll_con >> PLL6552_PDIV_SHIFT_2416) & PLL6552_PDIV_MASK; | ||
583 | } else { | ||
584 | mdiv = (pll_con >> PLL6552_MDIV_SHIFT) & PLL6552_MDIV_MASK; | ||
585 | pdiv = (pll_con >> PLL6552_PDIV_SHIFT) & PLL6552_PDIV_MASK; | ||
586 | } | ||
580 | sdiv = (pll_con >> PLL6552_SDIV_SHIFT) & PLL6552_SDIV_MASK; | 587 | sdiv = (pll_con >> PLL6552_SDIV_SHIFT) & PLL6552_SDIV_MASK; |
581 | 588 | ||
582 | fvco *= mdiv; | 589 | fvco *= mdiv; |
@@ -773,6 +780,7 @@ static void __init _samsung_clk_register_pll(struct samsung_pll_clock *pll_clk, | |||
773 | init.ops = &samsung_pll36xx_clk_ops; | 780 | init.ops = &samsung_pll36xx_clk_ops; |
774 | break; | 781 | break; |
775 | case pll_6552: | 782 | case pll_6552: |
783 | case pll_6552_s3c2416: | ||
776 | init.ops = &samsung_pll6552_clk_ops; | 784 | init.ops = &samsung_pll6552_clk_ops; |
777 | break; | 785 | break; |
778 | case pll_6553: | 786 | case pll_6553: |
diff --git a/drivers/clk/samsung/clk-pll.h b/drivers/clk/samsung/clk-pll.h index 6c39030080fb..ddf9029c13c9 100644 --- a/drivers/clk/samsung/clk-pll.h +++ b/drivers/clk/samsung/clk-pll.h | |||
@@ -24,6 +24,7 @@ enum samsung_pll_type { | |||
24 | pll_4650, | 24 | pll_4650, |
25 | pll_4650c, | 25 | pll_4650c, |
26 | pll_6552, | 26 | pll_6552, |
27 | pll_6552_s3c2416, | ||
27 | pll_6553, | 28 | pll_6553, |
28 | }; | 29 | }; |
29 | 30 | ||