diff options
author | Tero Kristo <t-kristo@ti.com> | 2013-09-13 07:57:59 -0400 |
---|---|---|
committer | Mike Turquette <mturquette@linaro.org> | 2014-01-17 15:35:07 -0500 |
commit | 1f847c65fd569c1d822800ba3e7e18c6411a7d50 (patch) | |
tree | b735f09c69ac53da98cd4ffe8bb32a53abca573d /drivers/clk | |
parent | b4761198bfaf29649dc58a48e8b123ea4174ba95 (diff) |
clk: ti: add support for TI fixed factor clock
This behaves exactly in similar manner to basic fixed-factor-clock, but
adds a few properties on top for handling clock hardware autoidling.
Signed-off-by: Tero Kristo <t-kristo@ti.com>
Acked-by: Tony Lindgren <tony@atomide.com>
Signed-off-by: Mike Turquette <mturquette@linaro.org>
Diffstat (limited to 'drivers/clk')
-rw-r--r-- | drivers/clk/ti/Makefile | 3 | ||||
-rw-r--r-- | drivers/clk/ti/fixed-factor.c | 66 |
2 files changed, 68 insertions, 1 deletions
diff --git a/drivers/clk/ti/Makefile b/drivers/clk/ti/Makefile index 8690b0b442c0..d3586252a391 100644 --- a/drivers/clk/ti/Makefile +++ b/drivers/clk/ti/Makefile | |||
@@ -1,4 +1,5 @@ | |||
1 | ifneq ($(CONFIG_OF),) | 1 | ifneq ($(CONFIG_OF),) |
2 | obj-y += clk.o autoidle.o | 2 | obj-y += clk.o autoidle.o |
3 | clk-common = dpll.o composite.o divider.o | 3 | clk-common = dpll.o composite.o divider.o \ |
4 | fixed-factor.o | ||
4 | endif | 5 | endif |
diff --git a/drivers/clk/ti/fixed-factor.c b/drivers/clk/ti/fixed-factor.c new file mode 100644 index 000000000000..c2c8a287408c --- /dev/null +++ b/drivers/clk/ti/fixed-factor.c | |||
@@ -0,0 +1,66 @@ | |||
1 | /* | ||
2 | * TI Fixed Factor Clock | ||
3 | * | ||
4 | * Copyright (C) 2013 Texas Instruments, Inc. | ||
5 | * | ||
6 | * Tero Kristo <t-kristo@ti.com> | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify | ||
9 | * it under the terms of the GNU General Public License version 2 as | ||
10 | * published by the Free Software Foundation. | ||
11 | * | ||
12 | * This program is distributed "as is" WITHOUT ANY WARRANTY of any | ||
13 | * kind, whether express or implied; without even the implied warranty | ||
14 | * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
15 | * GNU General Public License for more details. | ||
16 | */ | ||
17 | |||
18 | #include <linux/clk-provider.h> | ||
19 | #include <linux/slab.h> | ||
20 | #include <linux/err.h> | ||
21 | #include <linux/of.h> | ||
22 | #include <linux/of_address.h> | ||
23 | #include <linux/clk/ti.h> | ||
24 | |||
25 | #undef pr_fmt | ||
26 | #define pr_fmt(fmt) "%s: " fmt, __func__ | ||
27 | |||
28 | /** | ||
29 | * of_ti_fixed_factor_clk_setup - Setup function for TI fixed factor clock | ||
30 | * @node: device node for this clock | ||
31 | * | ||
32 | * Sets up a simple fixed factor clock based on device tree info. | ||
33 | */ | ||
34 | static void __init of_ti_fixed_factor_clk_setup(struct device_node *node) | ||
35 | { | ||
36 | struct clk *clk; | ||
37 | const char *clk_name = node->name; | ||
38 | const char *parent_name; | ||
39 | u32 div, mult; | ||
40 | u32 flags = 0; | ||
41 | |||
42 | if (of_property_read_u32(node, "ti,clock-div", &div)) { | ||
43 | pr_err("%s must have a clock-div property\n", node->name); | ||
44 | return; | ||
45 | } | ||
46 | |||
47 | if (of_property_read_u32(node, "ti,clock-mult", &mult)) { | ||
48 | pr_err("%s must have a clock-mult property\n", node->name); | ||
49 | return; | ||
50 | } | ||
51 | |||
52 | if (of_property_read_bool(node, "ti,set-rate-parent")) | ||
53 | flags |= CLK_SET_RATE_PARENT; | ||
54 | |||
55 | parent_name = of_clk_get_parent_name(node, 0); | ||
56 | |||
57 | clk = clk_register_fixed_factor(NULL, clk_name, parent_name, flags, | ||
58 | mult, div); | ||
59 | |||
60 | if (!IS_ERR(clk)) { | ||
61 | of_clk_add_provider(node, of_clk_src_simple_get, clk); | ||
62 | of_ti_clk_autoidle_setup(node); | ||
63 | } | ||
64 | } | ||
65 | CLK_OF_DECLARE(ti_fixed_factor_clk, "ti,fixed-factor-clock", | ||
66 | of_ti_fixed_factor_clk_setup); | ||