msm: clock: Support multi-target compilation
Having multiple late initcalls across all the clock-$(ARCH) files
won't work when they are compiled together. Register a struct
with msm_clock_init() so that clock.c can driver the init() and
late_init() calls that need to be made per SoC.
Signed-off-by: Stephen Boyd <sboyd@codeaurora.org>
diff --git a/arch/arm/mach-msm/board-apq8064.c b/arch/arm/mach-msm/board-apq8064.c
index 6b5eee6..d9aba25 100644
--- a/arch/arm/mach-msm/board-apq8064.c
+++ b/arch/arm/mach-msm/board-apq8064.c
@@ -107,7 +107,7 @@
{
if (socinfo_init() < 0)
pr_err("socinfo_init() failed!\n");
- msm_clock_init(msm_clocks_8064_dummy, msm_num_clocks_8064_dummy);
+ msm_clock_init(&apq8064_dummy_clock_init_data);
gpiomux_init();
apq8064_device_qup_spi_gsbi5.dev.platform_data =
diff --git a/arch/arm/mach-msm/board-fsm9xxx.c b/arch/arm/mach-msm/board-fsm9xxx.c
index 5d619ea..451510a 100644
--- a/arch/arm/mach-msm/board-fsm9xxx.c
+++ b/arch/arm/mach-msm/board-fsm9xxx.c
@@ -905,7 +905,7 @@
{
msm_shared_ram_phys = 0x00100000;
msm_map_fsm9xxx_io();
- msm_clock_init(msm_clocks_fsm9xxx, msm_num_clocks_fsm9xxx);
+ msm_clock_init(&fsm9xxx_clock_init_data);
}
MACHINE_START(FSM9XXX_SURF, "QCT FSM9XXX")
diff --git a/arch/arm/mach-msm/board-msm7x27.c b/arch/arm/mach-msm/board-msm7x27.c
index 1e62998..a8ddad7 100644
--- a/arch/arm/mach-msm/board-msm7x27.c
+++ b/arch/arm/mach-msm/board-msm7x27.c
@@ -1881,7 +1881,7 @@
#ifdef CONFIG_ARCH_MSM7X25
msm_clock_init(msm_clocks_7x25, msm_num_clocks_7x25);
#elif defined(CONFIG_ARCH_MSM7X27)
- msm_clock_init(msm_clocks_7x27, msm_num_clocks_7x27);
+ msm_clock_init(&msm7x27_clock_init_data);
#endif
#if defined(CONFIG_SMC91X)
diff --git a/arch/arm/mach-msm/board-msm7x30.c b/arch/arm/mach-msm/board-msm7x30.c
index 15e0b7f..af5b3c0 100644
--- a/arch/arm/mach-msm/board-msm7x30.c
+++ b/arch/arm/mach-msm/board-msm7x30.c
@@ -6963,7 +6963,7 @@
soc_version = socinfo_get_version();
- msm7x30_clock_init();
+ msm_clock_init(&msm7x30_clock_init_data);
#ifdef CONFIG_SERIAL_MSM_CONSOLE
msm7x30_init_uart2();
#endif
diff --git a/arch/arm/mach-msm/board-msm8960.c b/arch/arm/mach-msm/board-msm8960.c
index 2b4ddaf..e6ba7b1 100644
--- a/arch/arm/mach-msm/board-msm8960.c
+++ b/arch/arm/mach-msm/board-msm8960.c
@@ -3399,7 +3399,7 @@
BUG_ON(msm_rpmrs_levels_init(msm_rpmrs_levels,
ARRAY_SIZE(msm_rpmrs_levels)));
regulator_suppress_info_printing();
- msm8960_clock_init();
+ msm_clock_init(&msm8960_clock_init_data);
msm8960_device_ssbi_pm8921.dev.platform_data =
&msm8960_ssbi_pm8921_pdata;
pm8921_platform_data.num_regulators = msm_pm8921_regulator_pdata_len;
@@ -3446,7 +3446,7 @@
BUG_ON(msm_rpmrs_levels_init(msm_rpmrs_levels,
ARRAY_SIZE(msm_rpmrs_levels)));
regulator_suppress_info_printing();
- msm8960_clock_init_dummy();
+ msm_clock_init(&msm8960_dummy_clock_init_data);
gpiomux_init();
ethernet_init();
msm8960_device_ssbi_pm8921.dev.platform_data =
@@ -3484,7 +3484,7 @@
regulator_suppress_info_printing();
if (msm_xo_init())
pr_err("Failed to initialize XO votes\n");
- msm8960_clock_init();
+ msm_clock_init(&msm8960_clock_init_data);
msm8960_device_otg.dev.platform_data = &msm_otg_pdata;
msm8960_device_gadget_peripheral.dev.parent = &msm8960_device_otg.dev;
msm_device_hsusb_host.dev.parent = &msm8960_device_otg.dev;
diff --git a/arch/arm/mach-msm/board-msm8x60.c b/arch/arm/mach-msm/board-msm8x60.c
index 4015fc7..2c5e9a4 100644
--- a/arch/arm/mach-msm/board-msm8x60.c
+++ b/arch/arm/mach-msm/board-msm8x60.c
@@ -9794,7 +9794,7 @@
/* Initialize regulators needed for clock_init. */
platform_add_devices(early_regulators, ARRAY_SIZE(early_regulators));
- msm8660_clock_init();
+ msm_clock_init(&msm8x60_clock_init_data);
/* Buses need to be initialized before early-device registration
* to get the platform data for fabrics.
diff --git a/arch/arm/mach-msm/board-qsd8x50.c b/arch/arm/mach-msm/board-qsd8x50.c
index b6170f9..e02ef45 100644
--- a/arch/arm/mach-msm/board-qsd8x50.c
+++ b/arch/arm/mach-msm/board-qsd8x50.c
@@ -2451,7 +2451,7 @@
if (socinfo_init() < 0)
printk(KERN_ERR "%s: socinfo_init() failed!\n",
__func__);
- msm_clock_init(msm_clocks_8x50, msm_num_clocks_8x50);
+ msm_clock_init(&qds8x50_clock_init_data);
qsd8x50_cfg_smc91x();
msm_acpu_clock_init(&qsd8x50_clock_data);
diff --git a/arch/arm/mach-msm/clock-7x30.c b/arch/arm/mach-msm/clock-7x30.c
index 6134917..0dc0cab 100644
--- a/arch/arm/mach-msm/clock-7x30.c
+++ b/arch/arm/mach-msm/clock-7x30.c
@@ -2919,7 +2919,7 @@
};
/* Local clock driver initialization. */
-void __init msm7x30_clock_init(void)
+static void __init msm7x30_clock_init(void)
{
int i;
uint32_t val;
@@ -2957,10 +2957,14 @@
clk_set_rate(&lpa_codec_clk.c, 1);
/* Sync the GRP2D clock to AXI */
clk_set_rate(&grp_2d_clk.c, 1);
-
- msm_clock_init(msm_clocks_7x30, ARRAY_SIZE(msm_clocks_7x30));
}
+struct clock_init_data msm7x30_clock_init_data __initdata = {
+ .table = msm_clocks_7x30,
+ .size = ARRAY_SIZE(msm_clocks_7x30),
+ .init = msm7x30_clock_init,
+};
+
/*
* Clock operation handler registration
*/
diff --git a/arch/arm/mach-msm/clock-8960.c b/arch/arm/mach-msm/clock-8960.c
index e0670ac..23b34d2 100644
--- a/arch/arm/mach-msm/clock-8960.c
+++ b/arch/arm/mach-msm/clock-8960.c
@@ -4110,15 +4110,8 @@
return 0;
}
-void __init msm8960_clock_init_dummy(void)
-{
- soc_update_sys_vdd = msm8960_update_sys_vdd;
- local_vote_sys_vdd(HIGH);
- msm_clock_init(msm_clocks_8960_dummy, msm_num_clocks_8960_dummy);
-}
-
/* Local clock driver initialization. */
-void __init msm8960_clock_init(void)
+static void __init msm8960_clock_init(void)
{
xo_pxo = msm_xo_get(MSM_XO_PXO, "clock-8960");
if (IS_ERR(xo_pxo)) {
@@ -4166,12 +4159,16 @@
clk_enable(&sdc3_clk.c);
clk_enable(&sdc3_p_clk.c);
}
-
- msm_clock_init(msm_clocks_8960, ARRAY_SIZE(msm_clocks_8960));
}
-static int __init msm_clk_soc_late_init(void)
+static int __init msm8960_clock_late_init(void)
{
return local_unvote_sys_vdd(HIGH);
}
-late_initcall(msm_clk_soc_late_init);
+
+struct clock_init_data msm8960_clock_init_data __initdata = {
+ .table = msm_clocks_8960,
+ .size = ARRAY_SIZE(msm_clocks_8960),
+ .init = msm8960_clock_init,
+ .late_init = msm8960_clock_late_init,
+};
diff --git a/arch/arm/mach-msm/clock-8x60.c b/arch/arm/mach-msm/clock-8x60.c
index c840301..de6f79c 100644
--- a/arch/arm/mach-msm/clock-8x60.c
+++ b/arch/arm/mach-msm/clock-8x60.c
@@ -3770,7 +3770,7 @@
}
/* Local clock driver initialization. */
-void __init msm8660_clock_init(void)
+static void __init msm8660_clock_init(void)
{
soc_update_sys_vdd = msm8660_update_sys_vdd;
xo_pxo = msm_xo_get(MSM_XO_PXO, "clock-8x60");
@@ -3804,11 +3804,9 @@
rcg_clk_disable(&pdm_clk.c);
rcg_clk_enable(&tssc_clk.c);
rcg_clk_disable(&tssc_clk.c);
-
- msm_clock_init(msm_clocks_8x60, ARRAY_SIZE(msm_clocks_8x60));
}
-static int __init msm_clk_soc_late_init(void)
+static int __init msm8660_clock_late_init(void)
{
int rc;
@@ -3830,4 +3828,10 @@
return rc;
}
-late_initcall(msm_clk_soc_late_init);
+
+struct clock_init_data msm8x60_clock_init_data __initdata = {
+ .table = msm_clocks_8x60,
+ .size = ARRAY_SIZE(msm_clocks_8x60),
+ .init = msm8660_clock_init,
+ .late_init = msm8660_clock_late_init,
+};
diff --git a/arch/arm/mach-msm/clock-debug.c b/arch/arm/mach-msm/clock-debug.c
index 36bc124..d1b9ad0 100644
--- a/arch/arm/mach-msm/clock-debug.c
+++ b/arch/arm/mach-msm/clock-debug.c
@@ -115,9 +115,9 @@
static struct dentry *debugfs_base;
static u32 debug_suspend;
static struct clk_lookup *msm_clocks;
-static unsigned num_msm_clocks;
+static size_t num_msm_clocks;
-int __init clock_debug_init(struct clk_lookup *clocks, unsigned num_clocks)
+int __init clock_debug_init(struct clock_init_data *data)
{
int ret = 0;
@@ -129,8 +129,8 @@
debugfs_remove_recursive(debugfs_base);
return -ENOMEM;
}
- msm_clocks = clocks;
- num_msm_clocks = num_clocks;
+ msm_clocks = data->table;
+ num_msm_clocks = data->size;
measure = clk_get_sys("debug", "measure");
if (IS_ERR(measure)) {
diff --git a/arch/arm/mach-msm/clock-fsm9xxx.c b/arch/arm/mach-msm/clock-fsm9xxx.c
index 52e4dfc..4a064a7 100644
--- a/arch/arm/mach-msm/clock-fsm9xxx.c
+++ b/arch/arm/mach-msm/clock-fsm9xxx.c
@@ -21,11 +21,13 @@
* Clocks
*/
-struct clk_lookup msm_clocks_fsm9xxx[] = {
+static struct clk_lookup msm_clocks_fsm9xxx[] = {
CLK_DUMMY("adm_clk", ADM0_CLK, NULL, OFF),
CLK_DUMMY("uart_clk", UART1_CLK, "msm_serial.0", OFF),
CLK_DUMMY("ce_clk", CE_CLK, NULL, OFF),
};
-unsigned msm_num_clocks_fsm9xxx = ARRAY_SIZE(msm_clocks_fsm9xxx);
-
+struct clock_init_data fsm9xxx_clock_init_data __initdata = {
+ .table = msm_clocks_fsm9xxx,
+ .size = ARRAY_SIZE(msm_clocks_fsm9xxx),
+};
diff --git a/arch/arm/mach-msm/clock-pcom-lookup.c b/arch/arm/mach-msm/clock-pcom-lookup.c
index 7936be0..1b65ec0 100644
--- a/arch/arm/mach-msm/clock-pcom-lookup.c
+++ b/arch/arm/mach-msm/clock-pcom-lookup.c
@@ -141,7 +141,7 @@
static DEFINE_CLK_VOTER(ebi_vfe_clk, &ebi1_clk.c);
static DEFINE_CLK_VOTER(ebi_adm_clk, &ebi1_clk.c);
-struct clk_lookup msm_clocks_7x01a[] = {
+static struct clk_lookup msm_clocks_7x01a[] = {
CLK_LOOKUP("adm_clk", adm_clk.c, NULL),
CLK_LOOKUP("adsp_clk", adsp_clk.c, NULL),
CLK_LOOKUP("ebi1_clk", ebi1_clk.c, NULL),
@@ -184,9 +184,13 @@
CLK_LOOKUP("vfe_clk", vfe_clk.c, NULL),
CLK_LOOKUP("vfe_mdc_clk", vfe_mdc_clk.c, NULL),
};
-unsigned msm_num_clocks_7x01a = ARRAY_SIZE(msm_clocks_7x01a);
-struct clk_lookup msm_clocks_7x27[] = {
+struct clock_init_data msm7x01a_clock_init_data __initdata = {
+ .table = msm_clocks_7x01a,
+ .size = ARRAY_SIZE(msm_clocks_7x01a),
+};
+
+static struct clk_lookup msm_clocks_7x27[] = {
CLK_LOOKUP("adm_clk", adm_clk.c, NULL),
CLK_LOOKUP("adsp_clk", adsp_clk.c, NULL),
CLK_LOOKUP("ebi1_clk", ebi1_clk.c, NULL),
@@ -239,9 +243,13 @@
CLK_LOOKUP("ebi1_vfe_clk", ebi_vfe_clk.c, NULL),
CLK_LOOKUP("ebi1_clk", ebi_adm_clk.c, "msm_dmov"),
};
-unsigned msm_num_clocks_7x27 = ARRAY_SIZE(msm_clocks_7x27);
-struct clk_lookup msm_clocks_7x27a[] = {
+struct clock_init_data msm7x27_clock_init_data __initdata = {
+ .table = msm_clocks_7x27,
+ .size = ARRAY_SIZE(msm_clocks_7x27),
+};
+
+static struct clk_lookup msm_clocks_7x27a[] = {
CLK_LOOKUP("adm_clk", adm_clk.c, NULL),
CLK_LOOKUP("adsp_clk", adsp_clk.c, NULL),
CLK_LOOKUP("ahb_m_clk", ahb_m_clk.c, NULL),
@@ -311,9 +319,13 @@
CLK_LOOKUP("ebi1_vfe_clk", ebi_vfe_clk.c, NULL),
CLK_LOOKUP("ebi1_clk", ebi_adm_clk.c, "msm_dmov"),
};
-unsigned msm_num_clocks_7x27a = ARRAY_SIZE(msm_clocks_7x27a);
-struct clk_lookup msm_clocks_8x50[] = {
+struct clock_init_data msm7x27a_clock_init_data __initdata = {
+ .table = msm_clocks_7x27a,
+ .size = ARRAY_SIZE(msm_clocks_7x27a),
+};
+
+static struct clk_lookup msm_clocks_8x50[] = {
CLK_LOOKUP("adm_clk", adm_clk.c, NULL),
CLK_LOOKUP("ce_clk", ce_clk.c, NULL),
CLK_LOOKUP("ebi1_clk", ebi1_clk.c, NULL),
@@ -382,4 +394,8 @@
CLK_LOOKUP("qup_clk", gsbi_clk.c, "qup_i2c.4"),
CLK_LOOKUP("qup_pclk", gsbi_p_clk.c, "qup_i2c.4"),
};
-unsigned msm_num_clocks_8x50 = ARRAY_SIZE(msm_clocks_8x50);
+
+struct clock_init_data qds8x50_clock_init_data __initdata = {
+ .table = msm_clocks_8x50,
+ .size = ARRAY_SIZE(msm_clocks_8x50),
+};
diff --git a/arch/arm/mach-msm/clock.c b/arch/arm/mach-msm/clock.c
index 954e5bb..c145240 100644
--- a/arch/arm/mach-msm/clock.c
+++ b/arch/arm/mach-msm/clock.c
@@ -164,12 +164,17 @@
}
EXPORT_SYMBOL(clk_set_flags);
-static struct clk_lookup *msm_clocks;
-static unsigned msm_num_clocks;
+static struct clock_init_data __initdata *clk_init_data;
-void __init msm_clock_init(struct clk_lookup *clock_tbl, size_t num_clocks)
+void __init msm_clock_init(struct clock_init_data *data)
{
unsigned n;
+ struct clk_lookup *clock_tbl = data->table;
+ size_t num_clocks = data->size;
+
+ clk_init_data = data;
+ if (clk_init_data->init)
+ clk_init_data->init();
for (n = 0; n < num_clocks; n++) {
struct clk *clk = clock_tbl[n].clk;
@@ -178,8 +183,6 @@
}
clkdev_add_table(clock_tbl, num_clocks);
- msm_clocks = clock_tbl;
- msm_num_clocks = num_clocks;
}
/*
@@ -189,13 +192,13 @@
*/
static int __init clock_late_init(void)
{
- unsigned n;
+ unsigned n, count = 0;
unsigned long flags;
- unsigned count = 0;
+ int ret = 0;
- clock_debug_init(msm_clocks, msm_num_clocks);
- for (n = 0; n < msm_num_clocks; n++) {
- struct clk *clk = msm_clocks[n].clk;
+ clock_debug_init(clk_init_data);
+ for (n = 0; n < clk_init_data->size; n++) {
+ struct clk *clk = clk_init_data->table[n].clk;
clock_debug_add(clk);
if (!(clk->flags & CLKFLAG_SKIP_AUTO_OFF)) {
@@ -208,6 +211,8 @@
}
}
pr_info("clock_late_init() disabled %d unused clocks\n", count);
- return 0;
+ if (clk_init_data->late_init)
+ ret = clk_init_data->late_init();
+ return ret;
}
late_initcall(clock_late_init);
diff --git a/arch/arm/mach-msm/clock.h b/arch/arm/mach-msm/clock.h
index 8f60b13..5ed5a94 100644
--- a/arch/arm/mach-msm/clock.h
+++ b/arch/arm/mach-msm/clock.h
@@ -17,7 +17,6 @@
#ifndef __ARCH_ARM_MACH_MSM_CLOCK_H
#define __ARCH_ARM_MACH_MSM_CLOCK_H
-#include <linux/init.h>
#include <linux/types.h>
#include <linux/list.h>
#include <linux/clkdev.h>
@@ -74,20 +73,40 @@
.children = LIST_HEAD_INIT((name).children), \
.siblings = LIST_HEAD_INIT((name).siblings)
-void msm_clock_init(struct clk_lookup *clock_tbl, size_t num_clocks);
-void msm7x30_clock_init(void);
-void msm8660_clock_init(void);
-void msm8960_clock_init(void);
-void msm8960_clock_init_dummy(void);
+/**
+ * struct clock_init_data - SoC specific clock initialization data
+ * @table: table of lookups to add
+ * @size: size of @table
+ * @init: called before registering @table
+ * @late_init: called during late init
+ */
+struct clock_init_data {
+ struct clk_lookup *table;
+ size_t size;
+ void (*init)(void);
+ int (*late_init)(void);
+};
+
+extern struct clock_init_data apq8064_dummy_clock_init_data;
+extern struct clock_init_data fsm9xxx_clock_init_data;
+extern struct clock_init_data msm7x01a_clock_init_data;
+extern struct clock_init_data msm7x27_clock_init_data;
+extern struct clock_init_data msm7x27a_clock_init_data;
+extern struct clock_init_data msm7x30_clock_init_data;
+extern struct clock_init_data msm8960_clock_init_data;
+extern struct clock_init_data msm8960_dummy_clock_init_data;
+extern struct clock_init_data msm8x60_clock_init_data;
+extern struct clock_init_data qds8x50_clock_init_data;
+
+void msm_clock_init(struct clock_init_data *data);
#ifdef CONFIG_DEBUG_FS
-int __init clock_debug_init(struct clk_lookup *clocks, unsigned num_clocks);
-int __init clock_debug_add(struct clk *clock);
+int clock_debug_init(struct clock_init_data *data);
+int clock_debug_add(struct clk *clock);
void clock_debug_print_enabled(void);
#else
-static inline int __init clock_debug_init(struct clk_lookup *clocks,
- unsigned num_clocks) { return 0; }
-static inline int __init clock_debug_add(struct clk *clock) { return 0; }
+static inline int clock_debug_init(struct clk_init_data *data) { return 0; }
+static inline int clock_debug_add(struct clk *clock) { return 0; }
static inline void clock_debug_print_enabled(void) { return; }
#endif
diff --git a/arch/arm/mach-msm/devices-8064.c b/arch/arm/mach-msm/devices-8064.c
index 26663be..fcd2460 100644
--- a/arch/arm/mach-msm/devices-8064.c
+++ b/arch/arm/mach-msm/devices-8064.c
@@ -600,4 +600,7 @@
CLK_DUMMY("dma_bam_pclk", DMA_BAM_P_CLK, NULL, 0),
};
-unsigned msm_num_clocks_8064_dummy = ARRAY_SIZE(msm_clocks_8064_dummy);
+struct clock_init_data apq8064_dummy_clock_init_data __initdata = {
+ .table = msm_clocks_8064_dummy,
+ .size = ARRAY_SIZE(msm_clocks_8064_dummy),
+};
diff --git a/arch/arm/mach-msm/devices-8960.c b/arch/arm/mach-msm/devices-8960.c
index ffc6a30..e0613d9 100644
--- a/arch/arm/mach-msm/devices-8960.c
+++ b/arch/arm/mach-msm/devices-8960.c
@@ -1394,7 +1394,7 @@
};
#endif
-struct clk_lookup msm_clocks_8960_dummy[] = {
+static struct clk_lookup msm_clocks_8960_dummy[] = {
CLK_DUMMY("pll2", PLL2, NULL, 0),
CLK_DUMMY("pll8", PLL8, NULL, 0),
CLK_DUMMY("pll4", PLL4, NULL, 0),
@@ -1586,7 +1586,10 @@
CLK_DUMMY("dma_bam_pclk", DMA_BAM_P_CLK, NULL, 0),
};
-unsigned msm_num_clocks_8960_dummy = ARRAY_SIZE(msm_clocks_8960_dummy);
+struct clock_init_data msm8960_dummy_clock_init_data __initdata = {
+ .table = msm_clocks_8960_dummy,
+ .size = ARRAY_SIZE(msm_clocks_8960_dummy),
+};
#define LPASS_SLIMBUS_PHYS 0x28080000
#define LPASS_SLIMBUS_BAM_PHYS 0x28084000
diff --git a/arch/arm/mach-msm/devices-msm7x27a.c b/arch/arm/mach-msm/devices-msm7x27a.c
index 2e59117..f20f41b 100644
--- a/arch/arm/mach-msm/devices-msm7x27a.c
+++ b/arch/arm/mach-msm/devices-msm7x27a.c
@@ -709,7 +709,7 @@
if (cpu_is_msm7x27aa())
msm7x2x_clock_data.max_speed_delta_khz = 504000;
- msm_clock_init(msm_clocks_7x27a, msm_num_clocks_7x27a);
+ msm_clock_init(&msm7x27a_clock_init_data);
msm_acpu_clock_init(&msm7x2x_clock_data);
return 0;
diff --git a/arch/arm/mach-msm/devices.h b/arch/arm/mach-msm/devices.h
index d272fa6..c54dcd3 100644
--- a/arch/arm/mach-msm/devices.h
+++ b/arch/arm/mach-msm/devices.h
@@ -145,27 +145,6 @@
extern struct platform_device qfec_device;
-extern struct clk_lookup msm_clocks_7x01a[];
-extern unsigned msm_num_clocks_7x01a;
-
-extern struct clk_lookup msm_clocks_7x25[];
-extern unsigned msm_num_clocks_7x25;
-
-extern struct clk_lookup msm_clocks_7x27[];
-extern unsigned msm_num_clocks_7x27;
-
-extern struct clk_lookup msm_clocks_7x27a[];
-extern unsigned msm_num_clocks_7x27a;
-
-extern struct clk_lookup msm_clocks_8x50[];
-extern unsigned msm_num_clocks_8x50;
-
-extern struct clk_lookup msm_clocks_8960_dummy[];
-extern unsigned msm_num_clocks_8960_dummy;
-
-extern struct clk_lookup msm_clocks_8064_dummy[];
-extern unsigned msm_num_clocks_8064_dummy;
-
extern struct platform_device msm_kgsl_3d0;
extern struct platform_device msm_kgsl_2d0;
extern struct platform_device msm_kgsl_2d1;