diff options
author | Jun Nie <jun.nie@linaro.org> | 2016-09-06 02:02:41 -0400 |
---|---|---|
committer | Stephen Boyd <sboyd@codeaurora.org> | 2016-09-14 16:48:32 -0400 |
commit | 8d9a0860b75525e3cf240bc152bfdeaeb2e562a1 (patch) | |
tree | 7e3ee13a267085c5ba5869e3ed5af020de2481aa | |
parent | 6e2e7c9fdae316bfb2724d2dbf230678d3f09092 (diff) |
clk: zx: reform pll config info to ease code extension
Add power down bit and pll lock bit in pll config structure
to ease new SoC support.
Signed-off-by: Jun Nie <jun.nie@linaro.org>
Signed-off-by: Stephen Boyd <sboyd@codeaurora.org>
-rw-r--r-- | drivers/clk/zte/clk.c | 21 | ||||
-rw-r--r-- | drivers/clk/zte/clk.h | 4 |
2 files changed, 16 insertions, 9 deletions
diff --git a/drivers/clk/zte/clk.c b/drivers/clk/zte/clk.c index 7c73c538c43d..c4c1251bc1e7 100644 --- a/drivers/clk/zte/clk.c +++ b/drivers/clk/zte/clk.c | |||
@@ -21,8 +21,8 @@ | |||
21 | #define to_clk_zx_audio(_hw) container_of(_hw, struct clk_zx_audio, hw) | 21 | #define to_clk_zx_audio(_hw) container_of(_hw, struct clk_zx_audio, hw) |
22 | 22 | ||
23 | #define CFG0_CFG1_OFFSET 4 | 23 | #define CFG0_CFG1_OFFSET 4 |
24 | #define LOCK_FLAG BIT(30) | 24 | #define LOCK_FLAG 30 |
25 | #define POWER_DOWN BIT(31) | 25 | #define POWER_DOWN 31 |
26 | 26 | ||
27 | static int rate_to_idx(struct clk_zx_pll *zx_pll, unsigned long rate) | 27 | static int rate_to_idx(struct clk_zx_pll *zx_pll, unsigned long rate) |
28 | { | 28 | { |
@@ -50,8 +50,8 @@ static int hw_to_idx(struct clk_zx_pll *zx_pll) | |||
50 | hw_cfg1 = readl_relaxed(zx_pll->reg_base + CFG0_CFG1_OFFSET); | 50 | hw_cfg1 = readl_relaxed(zx_pll->reg_base + CFG0_CFG1_OFFSET); |
51 | 51 | ||
52 | /* For matching the value in lookup table */ | 52 | /* For matching the value in lookup table */ |
53 | hw_cfg0 &= ~LOCK_FLAG; | 53 | hw_cfg0 &= ~BIT(zx_pll->lock_bit); |
54 | hw_cfg0 |= POWER_DOWN; | 54 | hw_cfg0 |= BIT(zx_pll->pd_bit); |
55 | 55 | ||
56 | for (i = 0; i < zx_pll->count; i++) { | 56 | for (i = 0; i < zx_pll->count; i++) { |
57 | if (hw_cfg0 == config[i].cfg0 && hw_cfg1 == config[i].cfg1) | 57 | if (hw_cfg0 == config[i].cfg0 && hw_cfg1 == config[i].cfg1) |
@@ -108,10 +108,10 @@ static int zx_pll_enable(struct clk_hw *hw) | |||
108 | u32 reg; | 108 | u32 reg; |
109 | 109 | ||
110 | reg = readl_relaxed(zx_pll->reg_base); | 110 | reg = readl_relaxed(zx_pll->reg_base); |
111 | writel_relaxed(reg & ~POWER_DOWN, zx_pll->reg_base); | 111 | writel_relaxed(reg & ~BIT(zx_pll->pd_bit), zx_pll->reg_base); |
112 | 112 | ||
113 | return readl_relaxed_poll_timeout(zx_pll->reg_base, reg, | 113 | return readl_relaxed_poll_timeout(zx_pll->reg_base, reg, |
114 | reg & LOCK_FLAG, 0, 100); | 114 | reg & BIT(zx_pll->lock_bit), 0, 100); |
115 | } | 115 | } |
116 | 116 | ||
117 | static void zx_pll_disable(struct clk_hw *hw) | 117 | static void zx_pll_disable(struct clk_hw *hw) |
@@ -120,7 +120,7 @@ static void zx_pll_disable(struct clk_hw *hw) | |||
120 | u32 reg; | 120 | u32 reg; |
121 | 121 | ||
122 | reg = readl_relaxed(zx_pll->reg_base); | 122 | reg = readl_relaxed(zx_pll->reg_base); |
123 | writel_relaxed(reg | POWER_DOWN, zx_pll->reg_base); | 123 | writel_relaxed(reg | BIT(zx_pll->pd_bit), zx_pll->reg_base); |
124 | } | 124 | } |
125 | 125 | ||
126 | static int zx_pll_is_enabled(struct clk_hw *hw) | 126 | static int zx_pll_is_enabled(struct clk_hw *hw) |
@@ -130,10 +130,10 @@ static int zx_pll_is_enabled(struct clk_hw *hw) | |||
130 | 130 | ||
131 | reg = readl_relaxed(zx_pll->reg_base); | 131 | reg = readl_relaxed(zx_pll->reg_base); |
132 | 132 | ||
133 | return !(reg & POWER_DOWN); | 133 | return !(reg & BIT(zx_pll->pd_bit)); |
134 | } | 134 | } |
135 | 135 | ||
136 | static const struct clk_ops zx_pll_ops = { | 136 | const struct clk_ops zx_pll_ops = { |
137 | .recalc_rate = zx_pll_recalc_rate, | 137 | .recalc_rate = zx_pll_recalc_rate, |
138 | .round_rate = zx_pll_round_rate, | 138 | .round_rate = zx_pll_round_rate, |
139 | .set_rate = zx_pll_set_rate, | 139 | .set_rate = zx_pll_set_rate, |
@@ -141,6 +141,7 @@ static const struct clk_ops zx_pll_ops = { | |||
141 | .disable = zx_pll_disable, | 141 | .disable = zx_pll_disable, |
142 | .is_enabled = zx_pll_is_enabled, | 142 | .is_enabled = zx_pll_is_enabled, |
143 | }; | 143 | }; |
144 | EXPORT_SYMBOL(zx_pll_ops); | ||
144 | 145 | ||
145 | struct clk *clk_register_zx_pll(const char *name, const char *parent_name, | 146 | struct clk *clk_register_zx_pll(const char *name, const char *parent_name, |
146 | unsigned long flags, void __iomem *reg_base, | 147 | unsigned long flags, void __iomem *reg_base, |
@@ -164,6 +165,8 @@ struct clk *clk_register_zx_pll(const char *name, const char *parent_name, | |||
164 | zx_pll->reg_base = reg_base; | 165 | zx_pll->reg_base = reg_base; |
165 | zx_pll->lookup_table = lookup_table; | 166 | zx_pll->lookup_table = lookup_table; |
166 | zx_pll->count = count; | 167 | zx_pll->count = count; |
168 | zx_pll->lock_bit = LOCK_FLAG; | ||
169 | zx_pll->pd_bit = POWER_DOWN; | ||
167 | zx_pll->lock = lock; | 170 | zx_pll->lock = lock; |
168 | zx_pll->hw.init = &init; | 171 | zx_pll->hw.init = &init; |
169 | 172 | ||
diff --git a/drivers/clk/zte/clk.h b/drivers/clk/zte/clk.h index 65ae08b818d3..8f6b5f05bb7f 100644 --- a/drivers/clk/zte/clk.h +++ b/drivers/clk/zte/clk.h | |||
@@ -24,6 +24,8 @@ struct clk_zx_pll { | |||
24 | const struct zx_pll_config *lookup_table; /* order by rate asc */ | 24 | const struct zx_pll_config *lookup_table; /* order by rate asc */ |
25 | int count; | 25 | int count; |
26 | spinlock_t *lock; | 26 | spinlock_t *lock; |
27 | u8 pd_bit; /* power down bit */ | ||
28 | u8 lock_bit; /* pll lock flag bit */ | ||
27 | }; | 29 | }; |
28 | 30 | ||
29 | struct clk *clk_register_zx_pll(const char *name, const char *parent_name, | 31 | struct clk *clk_register_zx_pll(const char *name, const char *parent_name, |
@@ -38,4 +40,6 @@ struct clk_zx_audio { | |||
38 | struct clk *clk_register_zx_audio(const char *name, | 40 | struct clk *clk_register_zx_audio(const char *name, |
39 | const char * const parent_name, | 41 | const char * const parent_name, |
40 | unsigned long flags, void __iomem *reg_base); | 42 | unsigned long flags, void __iomem *reg_base); |
43 | |||
44 | extern const struct clk_ops zx_pll_ops; | ||
41 | #endif | 45 | #endif |