aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/mach-omap2
diff options
context:
space:
mode:
Diffstat (limited to 'arch/arm/mach-omap2')
-rw-r--r--arch/arm/mach-omap2/Makefile2
-rw-r--r--arch/arm/mach-omap2/clkt2xxx_osc.c62
-rw-r--r--arch/arm/mach-omap2/clock2xxx.c34
-rw-r--r--arch/arm/mach-omap2/clock2xxx.h1
4 files changed, 66 insertions, 33 deletions
diff --git a/arch/arm/mach-omap2/Makefile b/arch/arm/mach-omap2/Makefile
index 825c303f671..51178bff698 100644
--- a/arch/arm/mach-omap2/Makefile
+++ b/arch/arm/mach-omap2/Makefile
@@ -13,7 +13,7 @@ clock-common = clock.o clock_common_data.o \
13 clkt_clksel.o 13 clkt_clksel.o
14clock-omap2xxx = clkt2xxx_dpllcore.o \ 14clock-omap2xxx = clkt2xxx_dpllcore.o \
15 clkt2xxx_virt_prcm_set.o \ 15 clkt2xxx_virt_prcm_set.o \
16 clkt2xxx_apll.o 16 clkt2xxx_apll.o clkt2xxx_osc.o
17 17
18obj-$(CONFIG_ARCH_OMAP2) += $(omap-2-3-common) $(prcm-common) $(clock-common) \ 18obj-$(CONFIG_ARCH_OMAP2) += $(omap-2-3-common) $(prcm-common) $(clock-common) \
19 $(clock-omap2xxx) 19 $(clock-omap2xxx)
diff --git a/arch/arm/mach-omap2/clkt2xxx_osc.c b/arch/arm/mach-omap2/clkt2xxx_osc.c
new file mode 100644
index 00000000000..2167be84a5b
--- /dev/null
+++ b/arch/arm/mach-omap2/clkt2xxx_osc.c
@@ -0,0 +1,62 @@
1/*
2 * OMAP2xxx osc_clk-specific clock code
3 *
4 * Copyright (C) 2005-2008 Texas Instruments, Inc.
5 * Copyright (C) 2004-2010 Nokia Corporation
6 *
7 * Contacts:
8 * Richard Woodruff <r-woodruff2@ti.com>
9 * Paul Walmsley
10 *
11 * Based on earlier work by Tuukka Tikkanen, Tony Lindgren,
12 * Gordon McNutt and RidgeRun, Inc.
13 *
14 * This program is free software; you can redistribute it and/or modify
15 * it under the terms of the GNU General Public License version 2 as
16 * published by the Free Software Foundation.
17 */
18#undef DEBUG
19
20#include <linux/module.h>
21#include <linux/kernel.h>
22#include <linux/errno.h>
23#include <linux/clk.h>
24#include <linux/io.h>
25
26#include <plat/clock.h>
27
28#include "clock.h"
29#include "clock2xxx.h"
30#include "prm.h"
31#include "prm-regbits-24xx.h"
32
33static int omap2_enable_osc_ck(struct clk *clk)
34{
35 u32 pcc;
36
37 pcc = __raw_readl(prcm_clksrc_ctrl);
38
39 __raw_writel(pcc & ~OMAP_AUTOEXTCLKMODE_MASK, prcm_clksrc_ctrl);
40
41 return 0;
42}
43
44static void omap2_disable_osc_ck(struct clk *clk)
45{
46 u32 pcc;
47
48 pcc = __raw_readl(prcm_clksrc_ctrl);
49
50 __raw_writel(pcc | OMAP_AUTOEXTCLKMODE_MASK, prcm_clksrc_ctrl);
51}
52
53const struct clkops clkops_oscck = {
54 .enable = omap2_enable_osc_ck,
55 .disable = omap2_disable_osc_ck,
56};
57
58unsigned long omap2_osc_clk_recalc(struct clk *clk)
59{
60 return omap2xxx_get_apll_clkin() * omap2xxx_get_sysclkdiv();
61}
62
diff --git a/arch/arm/mach-omap2/clock2xxx.c b/arch/arm/mach-omap2/clock2xxx.c
index 88077e74696..62c3b022a1e 100644
--- a/arch/arm/mach-omap2/clock2xxx.c
+++ b/arch/arm/mach-omap2/clock2xxx.c
@@ -79,31 +79,6 @@ const struct clkops clkops_omap2430_i2chs_wait = {
79 .find_companion = omap2_clk_dflt_find_companion, 79 .find_companion = omap2_clk_dflt_find_companion,
80}; 80};
81 81
82static int omap2_enable_osc_ck(struct clk *clk)
83{
84 u32 pcc;
85
86 pcc = __raw_readl(prcm_clksrc_ctrl);
87
88 __raw_writel(pcc & ~OMAP_AUTOEXTCLKMODE_MASK, prcm_clksrc_ctrl);
89
90 return 0;
91}
92
93static void omap2_disable_osc_ck(struct clk *clk)
94{
95 u32 pcc;
96
97 pcc = __raw_readl(prcm_clksrc_ctrl);
98
99 __raw_writel(pcc | OMAP_AUTOEXTCLKMODE_MASK, prcm_clksrc_ctrl);
100}
101
102const struct clkops clkops_oscck = {
103 .enable = omap2_enable_osc_ck,
104 .disable = omap2_disable_osc_ck,
105};
106
107#ifdef OLD_CK 82#ifdef OLD_CK
108/* Recalculate SYST_CLK */ 83/* Recalculate SYST_CLK */
109static void omap2_sys_clk_recalc(struct clk *clk) 84static void omap2_sys_clk_recalc(struct clk *clk)
@@ -116,7 +91,7 @@ static void omap2_sys_clk_recalc(struct clk *clk)
116} 91}
117#endif /* OLD_CK */ 92#endif /* OLD_CK */
118 93
119static u32 omap2_get_sysclkdiv(void) 94u32 omap2xxx_get_sysclkdiv(void)
120{ 95{
121 u32 div; 96 u32 div;
122 97
@@ -127,14 +102,9 @@ static u32 omap2_get_sysclkdiv(void)
127 return div; 102 return div;
128} 103}
129 104
130unsigned long omap2_osc_clk_recalc(struct clk *clk)
131{
132 return omap2xxx_get_apll_clkin() * omap2_get_sysclkdiv();
133}
134
135unsigned long omap2_sys_clk_recalc(struct clk *clk) 105unsigned long omap2_sys_clk_recalc(struct clk *clk)
136{ 106{
137 return clk->parent->rate / omap2_get_sysclkdiv(); 107 return clk->parent->rate / omap2xxx_get_sysclkdiv();
138} 108}
139 109
140/* 110/*
diff --git a/arch/arm/mach-omap2/clock2xxx.h b/arch/arm/mach-omap2/clock2xxx.h
index 3f1672e071c..3b0610dbbd3 100644
--- a/arch/arm/mach-omap2/clock2xxx.h
+++ b/arch/arm/mach-omap2/clock2xxx.h
@@ -18,6 +18,7 @@ unsigned long omap2_dpllcore_recalc(struct clk *clk);
18int omap2_reprogram_dpllcore(struct clk *clk, unsigned long rate); 18int omap2_reprogram_dpllcore(struct clk *clk, unsigned long rate);
19unsigned long omap2xxx_clk_get_core_rate(struct clk *clk); 19unsigned long omap2xxx_clk_get_core_rate(struct clk *clk);
20u32 omap2xxx_get_apll_clkin(void); 20u32 omap2xxx_get_apll_clkin(void);
21u32 omap2xxx_get_sysclkdiv(void);
21 22
22/* REVISIT: These should be set dynamically for CONFIG_MULTI_OMAP2 */ 23/* REVISIT: These should be set dynamically for CONFIG_MULTI_OMAP2 */
23#ifdef CONFIG_ARCH_OMAP2420 24#ifdef CONFIG_ARCH_OMAP2420