diff options
| author | Paul Walmsley <paul@pwsan.com> | 2010-02-23 00:09:20 -0500 |
|---|---|---|
| committer | Paul Walmsley <paul@pwsan.com> | 2010-02-24 14:16:15 -0500 |
| commit | 657ebfadc19c5a14f709dee1645082828330d5d4 (patch) | |
| tree | 26d615ae6e76437e0852b8d7fc060a070786f369 /arch/arm/mach-omap2/clock36xx.c | |
| parent | b92c170d019db7554db95380d2e1dfb3a368e350 (diff) | |
OMAP3/4 clock: split into per-chip family files
clock34xx_data.c now contains data for the OMAP34xx family, the
OMAP36xx family, and the OMAP3517 family, so rename it to
clock3xxx_data.c. Rename clock34xx.c to clock3xxx.c, and move the
chip family-specific clock functions to clock34xx.c, clock36xx.c, or
clock3517.c, as appropriate. So now "clock3xxx.*" refers to the OMAP3
superset.
The main goal here is to prepare to compile chip family-specific clock
functions only for kernel builds that target that chip family. To get to
that point, we also need to add CONFIG_SOC_* options for those other
chip families; that will be done in future patches, planned for 2.6.35.
OMAP4 is also affected by this. It duplicated the OMAP3 non-CORE DPLL
clkops structure. The OMAP4 variant of this clkops structure has been
removed, and since there was nothing else currently in clock44xx.c, it
too has been removed -- it can always be added back later when there
is some content for it. (The OMAP4 clock autogeneration scripts have been
updated accordingly.)
Signed-off-by: Paul Walmsley <paul@pwsan.com>
Cc: BenoƮt Cousson <b-cousson@ti.com>
Cc: Rajendra Nayak <rnayak@ti.com>
Cc: Ranjith Lohithakshan <ranjithl@ti.com>
Cc: Tony Lindgren <tony@atomide.com>
Diffstat (limited to 'arch/arm/mach-omap2/clock36xx.c')
| -rw-r--r-- | arch/arm/mach-omap2/clock36xx.c | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/arch/arm/mach-omap2/clock36xx.c b/arch/arm/mach-omap2/clock36xx.c new file mode 100644 index 000000000000..0c5e25ed8879 --- /dev/null +++ b/arch/arm/mach-omap2/clock36xx.c | |||
| @@ -0,0 +1,72 @@ | |||
| 1 | /* | ||
| 2 | * OMAP36xx-specific clkops | ||
| 3 | * | ||
| 4 | * Copyright (C) 2010 Texas Instruments, Inc. | ||
| 5 | * Copyright (C) 2010 Nokia Corporation | ||
| 6 | * | ||
| 7 | * Mike Turquette | ||
| 8 | * Vijaykumar GN | ||
| 9 | * Paul Walmsley | ||
| 10 | * | ||
| 11 | * Parts of this code are based on code written by | ||
| 12 | * Richard Woodruff, Tony Lindgren, Tuukka Tikkanen, Karthik Dasu, | ||
| 13 | * Russell King | ||
| 14 | * | ||
| 15 | * This program is free software; you can redistribute it and/or modify | ||
| 16 | * it under the terms of the GNU General Public License version 2 as | ||
| 17 | * published by the Free Software Foundation. | ||
| 18 | */ | ||
| 19 | #undef DEBUG | ||
| 20 | |||
| 21 | #include <linux/kernel.h> | ||
| 22 | #include <linux/clk.h> | ||
| 23 | #include <linux/io.h> | ||
| 24 | |||
| 25 | #include <plat/clock.h> | ||
| 26 | |||
| 27 | #include "clock.h" | ||
| 28 | #include "clock36xx.h" | ||
| 29 | |||
| 30 | |||
| 31 | /** | ||
| 32 | * omap36xx_pwrdn_clk_enable_with_hsdiv_restore - enable clocks suffering | ||
| 33 | * from HSDivider PWRDN problem Implements Errata ID: i556. | ||
| 34 | * @clk: DPLL output struct clk | ||
| 35 | * | ||
| 36 | * 3630 only: dpll3_m3_ck, dpll4_m2_ck, dpll4_m3_ck, dpll4_m4_ck, | ||
| 37 | * dpll4_m5_ck & dpll4_m6_ck dividers gets loaded with reset | ||
| 38 | * valueafter their respective PWRDN bits are set. Any dummy write | ||
| 39 | * (Any other value different from the Read value) to the | ||
| 40 | * corresponding CM_CLKSEL register will refresh the dividers. | ||
| 41 | */ | ||
| 42 | static int omap36xx_pwrdn_clk_enable_with_hsdiv_restore(struct clk *clk) | ||
| 43 | { | ||
| 44 | u32 dummy_v, orig_v, clksel_shift; | ||
| 45 | int ret; | ||
| 46 | |||
| 47 | /* Clear PWRDN bit of HSDIVIDER */ | ||
| 48 | ret = omap2_dflt_clk_enable(clk); | ||
| 49 | |||
| 50 | /* Restore the dividers */ | ||
| 51 | if (!ret) { | ||
| 52 | clksel_shift = __ffs(clk->parent->clksel_mask); | ||
| 53 | orig_v = __raw_readl(clk->parent->clksel_reg); | ||
| 54 | dummy_v = orig_v; | ||
| 55 | |||
| 56 | /* Write any other value different from the Read value */ | ||
| 57 | dummy_v ^= (1 << clksel_shift); | ||
| 58 | __raw_writel(dummy_v, clk->parent->clksel_reg); | ||
| 59 | |||
| 60 | /* Write the original divider */ | ||
| 61 | __raw_writel(orig_v, clk->parent->clksel_reg); | ||
| 62 | } | ||
| 63 | |||
| 64 | return ret; | ||
| 65 | } | ||
| 66 | |||
| 67 | const struct clkops clkops_omap36xx_pwrdn_with_hsdiv_wait_restore = { | ||
| 68 | .enable = omap36xx_pwrdn_clk_enable_with_hsdiv_restore, | ||
| 69 | .disable = omap2_dflt_clk_disable, | ||
| 70 | .find_companion = omap2_clk_dflt_find_companion, | ||
| 71 | .find_idlest = omap2_clk_dflt_find_idlest, | ||
| 72 | }; | ||
