aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm
diff options
context:
space:
mode:
authorStephen Boyd <sboyd@codeaurora.org>2011-02-23 12:37:41 -0500
committerDavid Brown <davidb@codeaurora.org>2011-02-28 15:40:05 -0500
commit2a52220c89e02423aa23e6b9fb6dc0c706465a82 (patch)
tree39a6e46c02ff983e1228c691cf06e3a7405db90e /arch/arm
parent0693a317b609a5d31d29e26c4f28ea079d5477f4 (diff)
msm: clock: Remove references to clk_ops_pcom
Not all devices use proc_comm and determining if a clock is local vs. remote is fragile when done by comparing clk_ops pointers. Instead, implement an is_local() function for all clk_ops to determine if the clock is local. Doing this allows us to remove the last references to clk_ops_pcom from clock.c and compile it for targets with CONFIG_MSM_PROC_COMM=n. We don't need to set the clk_ops at runtime until 7x30 local clock detection comes in. Right now it's just complicating things so just set the ops pointer statically. Signed-off-by: Stephen Boyd <sboyd@codeaurora.org> Signed-off-by: David Brown <davidb@codeaurora.org>
Diffstat (limited to 'arch/arm')
-rw-r--r--arch/arm/mach-msm/Makefile6
-rw-r--r--arch/arm/mach-msm/clock-7x30.h1
-rw-r--r--arch/arm/mach-msm/clock-debug.c3
-rw-r--r--arch/arm/mach-msm/clock-dummy.c54
-rw-r--r--arch/arm/mach-msm/clock-pcom.c6
-rw-r--r--arch/arm/mach-msm/clock.c17
-rw-r--r--arch/arm/mach-msm/clock.h1
7 files changed, 11 insertions, 77 deletions
diff --git a/arch/arm/mach-msm/Makefile b/arch/arm/mach-msm/Makefile
index 2099c979fe2c..9519fd28a025 100644
--- a/arch/arm/mach-msm/Makefile
+++ b/arch/arm/mach-msm/Makefile
@@ -1,7 +1,6 @@
1obj-y += io.o idle.o timer.o 1obj-y += io.o idle.o timer.o
2ifdef CONFIG_MSM_PROC_COMM 2obj-y += clock.o
3obj-$(CONFIG_DEBUG_FS) += clock-debug.o 3obj-$(CONFIG_DEBUG_FS) += clock-debug.o
4endif
5 4
6obj-$(CONFIG_MSM_VIC) += irq-vic.o 5obj-$(CONFIG_MSM_VIC) += irq-vic.o
7obj-$(CONFIG_MSM_IOMMU) += iommu.o iommu_dev.o devices-iommu.o 6obj-$(CONFIG_MSM_IOMMU) += iommu.o iommu_dev.o devices-iommu.o
@@ -9,11 +8,8 @@ obj-$(CONFIG_MSM_IOMMU) += iommu.o iommu_dev.o devices-iommu.o
9obj-$(CONFIG_ARCH_MSM7X00A) += dma.o irq.o acpuclock-arm11.o 8obj-$(CONFIG_ARCH_MSM7X00A) += dma.o irq.o acpuclock-arm11.o
10obj-$(CONFIG_ARCH_MSM7X30) += dma.o 9obj-$(CONFIG_ARCH_MSM7X30) += dma.o
11obj-$(CONFIG_ARCH_QSD8X50) += dma.o sirc.o 10obj-$(CONFIG_ARCH_QSD8X50) += dma.o sirc.o
12obj-$(CONFIG_ARCH_MSM8X60) += clock-dummy.o
13obj-$(CONFIG_ARCH_MSM8960) += clock-dummy.o
14 11
15obj-$(CONFIG_MSM_PROC_COMM) += proc_comm.o clock-pcom.o vreg.o 12obj-$(CONFIG_MSM_PROC_COMM) += proc_comm.o clock-pcom.o vreg.o
16obj-$(CONFIG_MSM_PROC_COMM) += clock.o
17 13
18obj-$(CONFIG_MSM_SMD) += smd.o smd_debug.o 14obj-$(CONFIG_MSM_SMD) += smd.o smd_debug.o
19obj-$(CONFIG_MSM_SMD) += last_radio_log.o 15obj-$(CONFIG_MSM_SMD) += last_radio_log.o
diff --git a/arch/arm/mach-msm/clock-7x30.h b/arch/arm/mach-msm/clock-7x30.h
index da8e1c6f774e..53622b3992b7 100644
--- a/arch/arm/mach-msm/clock-7x30.h
+++ b/arch/arm/mach-msm/clock-7x30.h
@@ -145,6 +145,7 @@ extern int internal_pwr_rail_ctl_auto(unsigned rail_id, bool enable);
145 .flags = clk_flags, \ 145 .flags = clk_flags, \
146 .dev = clk_dev, \ 146 .dev = clk_dev, \
147 .dbg_name = #l_id, \ 147 .dbg_name = #l_id, \
148 .ops = &clk_ops_pcom, \
148 } 149 }
149 150
150#endif 151#endif
diff --git a/arch/arm/mach-msm/clock-debug.c b/arch/arm/mach-msm/clock-debug.c
index b67b9e82ece6..4886404d42f5 100644
--- a/arch/arm/mach-msm/clock-debug.c
+++ b/arch/arm/mach-msm/clock-debug.c
@@ -19,7 +19,6 @@
19#include <linux/debugfs.h> 19#include <linux/debugfs.h>
20#include <linux/clk.h> 20#include <linux/clk.h>
21#include "clock.h" 21#include "clock.h"
22#include "clock-pcom.h"
23 22
24static int clock_debug_rate_set(void *data, u64 val) 23static int clock_debug_rate_set(void *data, u64 val)
25{ 24{
@@ -79,7 +78,7 @@ static int clock_debug_local_get(void *data, u64 *val)
79{ 78{
80 struct clk *clock = data; 79 struct clk *clock = data;
81 80
82 *val = clock->ops != &clk_ops_pcom; 81 *val = clock->ops->is_local(clock->id);
83 82
84 return 0; 83 return 0;
85} 84}
diff --git a/arch/arm/mach-msm/clock-dummy.c b/arch/arm/mach-msm/clock-dummy.c
deleted file mode 100644
index 1250d22082ee..000000000000
--- a/arch/arm/mach-msm/clock-dummy.c
+++ /dev/null
@@ -1,54 +0,0 @@
1/* Copyright (c) 2010, Code Aurora Forum. All rights reserved.
2 *
3 * This program is free software; you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License version 2 and
5 * only version 2 as published by the Free Software Foundation.
6 *
7 * This program is distributed in the hope that it will be useful,
8 * but WITHOUT ANY WARRANTY; without even the implied warranty of
9 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10 * GNU General Public License for more details.
11 *
12 * You should have received a copy of the GNU General Public License
13 * along with this program; if not, write to the Free Software
14 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
15 * 02110-1301, USA.
16 *
17 */
18#include <linux/clk.h>
19#include <linux/err.h>
20#include <linux/module.h>
21
22struct clk *clk_get(struct device *dev, const char *id)
23{
24 return ERR_PTR(-ENOENT);
25}
26EXPORT_SYMBOL(clk_get);
27
28int clk_enable(struct clk *clk)
29{
30 return -ENOENT;
31}
32EXPORT_SYMBOL(clk_enable);
33
34void clk_disable(struct clk *clk)
35{
36}
37EXPORT_SYMBOL(clk_disable);
38
39unsigned long clk_get_rate(struct clk *clk)
40{
41 return 0;
42}
43EXPORT_SYMBOL(clk_get_rate);
44
45int clk_set_rate(struct clk *clk, unsigned long rate)
46{
47 return -ENOENT;
48}
49EXPORT_SYMBOL(clk_set_rate);
50
51void clk_put(struct clk *clk)
52{
53}
54EXPORT_SYMBOL(clk_put);
diff --git a/arch/arm/mach-msm/clock-pcom.c b/arch/arm/mach-msm/clock-pcom.c
index 8c4e86725013..63b711311086 100644
--- a/arch/arm/mach-msm/clock-pcom.c
+++ b/arch/arm/mach-msm/clock-pcom.c
@@ -117,6 +117,11 @@ long pc_clk_round_rate(unsigned id, unsigned rate)
117 return rate; 117 return rate;
118} 118}
119 119
120static bool pc_clk_is_local(unsigned id)
121{
122 return false;
123}
124
120struct clk_ops clk_ops_pcom = { 125struct clk_ops clk_ops_pcom = {
121 .enable = pc_clk_enable, 126 .enable = pc_clk_enable,
122 .disable = pc_clk_disable, 127 .disable = pc_clk_disable,
@@ -129,4 +134,5 @@ struct clk_ops clk_ops_pcom = {
129 .get_rate = pc_clk_get_rate, 134 .get_rate = pc_clk_get_rate,
130 .is_enabled = pc_clk_is_enabled, 135 .is_enabled = pc_clk_is_enabled,
131 .round_rate = pc_clk_round_rate, 136 .round_rate = pc_clk_round_rate,
137 .is_local = pc_clk_is_local,
132}; 138};
diff --git a/arch/arm/mach-msm/clock.c b/arch/arm/mach-msm/clock.c
index 8c2b4dd4a877..e00f6a040ad5 100644
--- a/arch/arm/mach-msm/clock.c
+++ b/arch/arm/mach-msm/clock.c
@@ -21,9 +21,6 @@
21#include <linux/pm_qos_params.h> 21#include <linux/pm_qos_params.h>
22 22
23#include "clock.h" 23#include "clock.h"
24#include "proc_comm.h"
25#include "clock-7x30.h"
26#include "clock-pcom.h"
27 24
28static DEFINE_MUTEX(clocks_mutex); 25static DEFINE_MUTEX(clocks_mutex);
29static DEFINE_SPINLOCK(clocks_lock); 26static DEFINE_SPINLOCK(clocks_lock);
@@ -84,8 +81,6 @@ EXPORT_SYMBOL(clk_disable);
84 81
85int clk_reset(struct clk *clk, enum clk_reset_action action) 82int clk_reset(struct clk *clk, enum clk_reset_action action)
86{ 83{
87 if (!clk->ops->reset)
88 clk->ops->reset = &pc_clk_reset;
89 return clk->ops->reset(clk->remote_id, action); 84 return clk->ops->reset(clk->remote_id, action);
90} 85}
91EXPORT_SYMBOL(clk_reset); 86EXPORT_SYMBOL(clk_reset);
@@ -162,23 +157,13 @@ EXPORT_SYMBOL(clk_set_flags);
162 */ 157 */
163static struct clk *ebi1_clk; 158static struct clk *ebi1_clk;
164 159
165static void __init set_clock_ops(struct clk *clk)
166{
167 if (!clk->ops) {
168 clk->ops = &clk_ops_pcom;
169 clk->id = clk->remote_id;
170 }
171}
172
173void __init msm_clock_init(struct clk *clock_tbl, unsigned num_clocks) 160void __init msm_clock_init(struct clk *clock_tbl, unsigned num_clocks)
174{ 161{
175 unsigned n; 162 unsigned n;
176 163
177 mutex_lock(&clocks_mutex); 164 mutex_lock(&clocks_mutex);
178 for (n = 0; n < num_clocks; n++) { 165 for (n = 0; n < num_clocks; n++)
179 set_clock_ops(&clock_tbl[n]);
180 list_add_tail(&clock_tbl[n].list, &clocks); 166 list_add_tail(&clock_tbl[n].list, &clocks);
181 }
182 mutex_unlock(&clocks_mutex); 167 mutex_unlock(&clocks_mutex);
183 168
184 ebi1_clk = clk_get(NULL, "ebi1_clk"); 169 ebi1_clk = clk_get(NULL, "ebi1_clk");
diff --git a/arch/arm/mach-msm/clock.h b/arch/arm/mach-msm/clock.h
index 70216b0e9681..8d302c7403a8 100644
--- a/arch/arm/mach-msm/clock.h
+++ b/arch/arm/mach-msm/clock.h
@@ -43,6 +43,7 @@ struct clk_ops {
43 unsigned (*get_rate)(unsigned id); 43 unsigned (*get_rate)(unsigned id);
44 unsigned (*is_enabled)(unsigned id); 44 unsigned (*is_enabled)(unsigned id);
45 long (*round_rate)(unsigned id, unsigned rate); 45 long (*round_rate)(unsigned id, unsigned rate);
46 bool (*is_local)(unsigned id);
46}; 47};
47 48
48struct clk { 49struct clk {