diff options
author | Jarkko Nikula <jarkko.nikula@nokia.com> | 2006-06-26 19:16:11 -0400 |
---|---|---|
committer | Tony Lindgren <tony@atomide.com> | 2006-06-26 19:16:11 -0400 |
commit | 6e711ec6d249c0d3f8bc225066738d064ed90032 (patch) | |
tree | 21e8c8e704eac0f2ccf4d00045aaa82546be4661 | |
parent | ed7eb9d90a24bbe93fa47e19b61528bd5cfe584c (diff) |
ARM: OMAP: Correct two bugs in arch/arm/mach-omap2/clock.c
omap2_clk_set_rate: dif_off must use clk->rate_offset, not clk->src_off.
omap2_get_src_field: for the case CM_SYSCLKOUT_SEL1, val must be 2 for
96MHz and 3 for 54MHz.
Signed-off-by: Jarkko Nikula <jarkko.nikula@nokia.com>
Signed-off-by: Juha Yrjola <juha.yrjola@solidboot.com>
Signed-off-by: Tony Lindgren <tony@atomide.com>
-rw-r--r-- | arch/arm/mach-omap2/clock.c | 35 |
1 files changed, 22 insertions, 13 deletions
diff --git a/arch/arm/mach-omap2/clock.c b/arch/arm/mach-omap2/clock.c index 72eb4bf571ac..242d8f925e9e 100644 --- a/arch/arm/mach-omap2/clock.c +++ b/arch/arm/mach-omap2/clock.c | |||
@@ -660,26 +660,35 @@ static int omap2_clk_set_rate(struct clk *clk, unsigned long rate) | |||
660 | 660 | ||
661 | /* Isolate control register */ | 661 | /* Isolate control register */ |
662 | div_sel = (SRC_RATE_SEL_MASK & clk->flags); | 662 | div_sel = (SRC_RATE_SEL_MASK & clk->flags); |
663 | div_off = clk->src_offset; | 663 | div_off = clk->rate_offset; |
664 | 664 | ||
665 | validrate = omap2_clksel_round_rate(clk, rate, &new_div); | 665 | validrate = omap2_clksel_round_rate(clk, rate, &new_div); |
666 | if(validrate != rate) | 666 | if (validrate != rate) |
667 | return(ret); | 667 | return(ret); |
668 | 668 | ||
669 | field_val = omap2_get_clksel(&div_sel, &field_mask, clk); | 669 | field_val = omap2_get_clksel(&div_sel, &field_mask, clk); |
670 | if (div_sel == 0) | 670 | if (div_sel == 0) |
671 | return ret; | 671 | return ret; |
672 | 672 | ||
673 | if(clk->flags & CM_SYSCLKOUT_SEL1){ | 673 | if (clk->flags & CM_SYSCLKOUT_SEL1) { |
674 | switch(new_div){ | 674 | switch (new_div) { |
675 | case 16: field_val = 4; break; | 675 | case 16: |
676 | case 8: field_val = 3; break; | 676 | field_val = 4; |
677 | case 4: field_val = 2; break; | 677 | break; |
678 | case 2: field_val = 1; break; | 678 | case 8: |
679 | case 1: field_val = 0; break; | 679 | field_val = 3; |
680 | break; | ||
681 | case 4: | ||
682 | field_val = 2; | ||
683 | break; | ||
684 | case 2: | ||
685 | field_val = 1; | ||
686 | break; | ||
687 | case 1: | ||
688 | field_val = 0; | ||
689 | break; | ||
680 | } | 690 | } |
681 | } | 691 | } else |
682 | else | ||
683 | field_val = new_div; | 692 | field_val = new_div; |
684 | 693 | ||
685 | reg = (void __iomem *)div_sel; | 694 | reg = (void __iomem *)div_sel; |
@@ -784,9 +793,9 @@ static u32 omap2_get_src_field(u32 *type_to_addr, u32 reg_offset, | |||
784 | val = 0; | 793 | val = 0; |
785 | if (src_clk == &sys_ck) | 794 | if (src_clk == &sys_ck) |
786 | val = 1; | 795 | val = 1; |
787 | if (src_clk == &func_54m_ck) | ||
788 | val = 2; | ||
789 | if (src_clk == &func_96m_ck) | 796 | if (src_clk == &func_96m_ck) |
797 | val = 2; | ||
798 | if (src_clk == &func_54m_ck) | ||
790 | val = 3; | 799 | val = 3; |
791 | break; | 800 | break; |
792 | } | 801 | } |