diff options
-rw-r--r-- | arch/arm/mach-tegra/tegra.c | 3 | ||||
-rw-r--r-- | drivers/clk/tegra/clk-tegra20.c | 7 | ||||
-rw-r--r-- | drivers/clk/tegra/clk-tegra30.c | 7 | ||||
-rw-r--r-- | drivers/clk/tegra/clk.c | 10 | ||||
-rw-r--r-- | drivers/clk/tegra/clk.h | 3 | ||||
-rw-r--r-- | include/linux/clk/tegra.h | 1 |
6 files changed, 29 insertions, 2 deletions
diff --git a/arch/arm/mach-tegra/tegra.c b/arch/arm/mach-tegra/tegra.c index 84deeab23ee7..61749e2d8111 100644 --- a/arch/arm/mach-tegra/tegra.c +++ b/arch/arm/mach-tegra/tegra.c | |||
@@ -36,6 +36,7 @@ | |||
36 | #include <linux/slab.h> | 36 | #include <linux/slab.h> |
37 | #include <linux/sys_soc.h> | 37 | #include <linux/sys_soc.h> |
38 | #include <linux/usb/tegra_usb_phy.h> | 38 | #include <linux/usb/tegra_usb_phy.h> |
39 | #include <linux/clk/tegra.h> | ||
39 | 40 | ||
40 | #include <asm/mach-types.h> | 41 | #include <asm/mach-types.h> |
41 | #include <asm/mach/arch.h> | 42 | #include <asm/mach/arch.h> |
@@ -87,6 +88,8 @@ static void __init tegra_dt_init(void) | |||
87 | struct soc_device *soc_dev; | 88 | struct soc_device *soc_dev; |
88 | struct device *parent = NULL; | 89 | struct device *parent = NULL; |
89 | 90 | ||
91 | tegra_clocks_apply_init_table(); | ||
92 | |||
90 | soc_dev_attr = kzalloc(sizeof(*soc_dev_attr), GFP_KERNEL); | 93 | soc_dev_attr = kzalloc(sizeof(*soc_dev_attr), GFP_KERNEL); |
91 | if (!soc_dev_attr) | 94 | if (!soc_dev_attr) |
92 | goto out; | 95 | goto out; |
diff --git a/drivers/clk/tegra/clk-tegra20.c b/drivers/clk/tegra/clk-tegra20.c index a7dc0a937361..a15fb28197b5 100644 --- a/drivers/clk/tegra/clk-tegra20.c +++ b/drivers/clk/tegra/clk-tegra20.c | |||
@@ -1252,6 +1252,11 @@ static __initdata struct tegra_clk_init_table init_table[] = { | |||
1252 | {clk_max, clk_max, 0, 0}, /* This MUST be the last entry */ | 1252 | {clk_max, clk_max, 0, 0}, /* This MUST be the last entry */ |
1253 | }; | 1253 | }; |
1254 | 1254 | ||
1255 | static void __init tegra20_clock_apply_init_table(void) | ||
1256 | { | ||
1257 | tegra_init_from_table(init_table, clks, clk_max); | ||
1258 | } | ||
1259 | |||
1255 | /* | 1260 | /* |
1256 | * Some clocks may be used by different drivers depending on the board | 1261 | * Some clocks may be used by different drivers depending on the board |
1257 | * configuration. List those here to register them twice in the clock lookup | 1262 | * configuration. List those here to register them twice in the clock lookup |
@@ -1318,7 +1323,7 @@ void __init tegra20_clock_init(struct device_node *np) | |||
1318 | clk_data.clk_num = ARRAY_SIZE(clks); | 1323 | clk_data.clk_num = ARRAY_SIZE(clks); |
1319 | of_clk_add_provider(np, of_clk_src_onecell_get, &clk_data); | 1324 | of_clk_add_provider(np, of_clk_src_onecell_get, &clk_data); |
1320 | 1325 | ||
1321 | tegra_init_from_table(init_table, clks, clk_max); | 1326 | tegra_clk_apply_init_table = tegra20_clock_apply_init_table; |
1322 | 1327 | ||
1323 | tegra_cpu_car_ops = &tegra20_cpu_car_ops; | 1328 | tegra_cpu_car_ops = &tegra20_cpu_car_ops; |
1324 | } | 1329 | } |
diff --git a/drivers/clk/tegra/clk-tegra30.c b/drivers/clk/tegra/clk-tegra30.c index 181a6eef5ce8..e0ee93c2db6c 100644 --- a/drivers/clk/tegra/clk-tegra30.c +++ b/drivers/clk/tegra/clk-tegra30.c | |||
@@ -1916,6 +1916,11 @@ static __initdata struct tegra_clk_init_table init_table[] = { | |||
1916 | {clk_max, clk_max, 0, 0}, /* This MUST be the last entry. */ | 1916 | {clk_max, clk_max, 0, 0}, /* This MUST be the last entry. */ |
1917 | }; | 1917 | }; |
1918 | 1918 | ||
1919 | static void __init tegra30_clock_apply_init_table(void) | ||
1920 | { | ||
1921 | tegra_init_from_table(init_table, clks, clk_max); | ||
1922 | } | ||
1923 | |||
1919 | /* | 1924 | /* |
1920 | * Some clocks may be used by different drivers depending on the board | 1925 | * Some clocks may be used by different drivers depending on the board |
1921 | * configuration. List those here to register them twice in the clock lookup | 1926 | * configuration. List those here to register them twice in the clock lookup |
@@ -1989,7 +1994,7 @@ void __init tegra30_clock_init(struct device_node *np) | |||
1989 | clk_data.clk_num = ARRAY_SIZE(clks); | 1994 | clk_data.clk_num = ARRAY_SIZE(clks); |
1990 | of_clk_add_provider(np, of_clk_src_onecell_get, &clk_data); | 1995 | of_clk_add_provider(np, of_clk_src_onecell_get, &clk_data); |
1991 | 1996 | ||
1992 | tegra_init_from_table(init_table, clks, clk_max); | 1997 | tegra_clk_apply_init_table = tegra30_clock_apply_init_table; |
1993 | 1998 | ||
1994 | tegra_cpu_car_ops = &tegra30_cpu_car_ops; | 1999 | tegra_cpu_car_ops = &tegra30_cpu_car_ops; |
1995 | } | 2000 | } |
diff --git a/drivers/clk/tegra/clk.c b/drivers/clk/tegra/clk.c index a603b9af0ad3..4a61d15425dc 100644 --- a/drivers/clk/tegra/clk.c +++ b/drivers/clk/tegra/clk.c | |||
@@ -83,3 +83,13 @@ void __init tegra_clocks_init(void) | |||
83 | { | 83 | { |
84 | of_clk_init(tegra_dt_clk_match); | 84 | of_clk_init(tegra_dt_clk_match); |
85 | } | 85 | } |
86 | |||
87 | tegra_clk_apply_init_table_func tegra_clk_apply_init_table; | ||
88 | |||
89 | void __init tegra_clocks_apply_init_table(void) | ||
90 | { | ||
91 | if (!tegra_clk_apply_init_table) | ||
92 | return; | ||
93 | |||
94 | tegra_clk_apply_init_table(); | ||
95 | } | ||
diff --git a/drivers/clk/tegra/clk.h b/drivers/clk/tegra/clk.h index a09d7dcaf183..3c566e2d518a 100644 --- a/drivers/clk/tegra/clk.h +++ b/drivers/clk/tegra/clk.h | |||
@@ -510,4 +510,7 @@ void tegra30_clock_init(struct device_node *np); | |||
510 | static inline void tegra30_clock_init(struct device_node *np) {} | 510 | static inline void tegra30_clock_init(struct device_node *np) {} |
511 | #endif /* CONFIG_ARCH_TEGRA_3x_SOC */ | 511 | #endif /* CONFIG_ARCH_TEGRA_3x_SOC */ |
512 | 512 | ||
513 | typedef void (*tegra_clk_apply_init_table_func)(void); | ||
514 | extern tegra_clk_apply_init_table_func tegra_clk_apply_init_table; | ||
515 | |||
513 | #endif /* TEGRA_CLK_H */ | 516 | #endif /* TEGRA_CLK_H */ |
diff --git a/include/linux/clk/tegra.h b/include/linux/clk/tegra.h index 404d6f940872..642789baec74 100644 --- a/include/linux/clk/tegra.h +++ b/include/linux/clk/tegra.h | |||
@@ -123,5 +123,6 @@ static inline void tegra_cpu_clock_resume(void) | |||
123 | void tegra_periph_reset_deassert(struct clk *c); | 123 | void tegra_periph_reset_deassert(struct clk *c); |
124 | void tegra_periph_reset_assert(struct clk *c); | 124 | void tegra_periph_reset_assert(struct clk *c); |
125 | void tegra_clocks_init(void); | 125 | void tegra_clocks_init(void); |
126 | void tegra_clocks_apply_init_table(void); | ||
126 | 127 | ||
127 | #endif /* __LINUX_CLK_TEGRA_H_ */ | 128 | #endif /* __LINUX_CLK_TEGRA_H_ */ |