diff options
author | Peter De Schrijver <pdeschrijver@nvidia.com> | 2013-04-03 10:40:42 -0400 |
---|---|---|
committer | Stephen Warren <swarren@nvidia.com> | 2013-04-04 18:10:56 -0400 |
commit | a26a029893096204f08a3ff5e262f99e1a75e273 (patch) | |
tree | 4411b941852278fca92c067601ffc4882fc4f4a4 /drivers/clk | |
parent | c1d1939c5163088e5f12011c6b3a6a9fab40215f (diff) |
clk: tegra: Add flags to tegra_clk_periph()
We will need some tegra peripheral clocks with the CLK_IGNORE_UNUSED flag,
most notably mselect, which is a bridge between AXI and most peripherals.
Signed-off-by: Peter De Schrijver <pdeschrijver@nvidia.com>
Acked-by: Mike Turquette <mturquette@linaro.org>
Signed-off-by: Stephen Warren <swarren@nvidia.com>
Diffstat (limited to 'drivers/clk')
-rw-r--r-- | drivers/clk/tegra/clk-periph.c | 11 | ||||
-rw-r--r-- | drivers/clk/tegra/clk-tegra20.c | 2 | ||||
-rw-r--r-- | drivers/clk/tegra/clk-tegra30.c | 2 | ||||
-rw-r--r-- | drivers/clk/tegra/clk.h | 9 |
4 files changed, 14 insertions, 10 deletions
diff --git a/drivers/clk/tegra/clk-periph.c b/drivers/clk/tegra/clk-periph.c index 9dbd301ace77..b2309d37a963 100644 --- a/drivers/clk/tegra/clk-periph.c +++ b/drivers/clk/tegra/clk-periph.c | |||
@@ -173,14 +173,15 @@ const struct clk_ops tegra_clk_periph_nodiv_ops = { | |||
173 | static struct clk *_tegra_clk_register_periph(const char *name, | 173 | static struct clk *_tegra_clk_register_periph(const char *name, |
174 | const char **parent_names, int num_parents, | 174 | const char **parent_names, int num_parents, |
175 | struct tegra_clk_periph *periph, | 175 | struct tegra_clk_periph *periph, |
176 | void __iomem *clk_base, u32 offset, bool div) | 176 | void __iomem *clk_base, u32 offset, bool div, |
177 | unsigned long flags) | ||
177 | { | 178 | { |
178 | struct clk *clk; | 179 | struct clk *clk; |
179 | struct clk_init_data init; | 180 | struct clk_init_data init; |
180 | 181 | ||
181 | init.name = name; | 182 | init.name = name; |
182 | init.ops = div ? &tegra_clk_periph_ops : &tegra_clk_periph_nodiv_ops; | 183 | init.ops = div ? &tegra_clk_periph_ops : &tegra_clk_periph_nodiv_ops; |
183 | init.flags = div ? 0 : CLK_SET_RATE_PARENT; | 184 | init.flags = flags; |
184 | init.parent_names = parent_names; | 185 | init.parent_names = parent_names; |
185 | init.num_parents = num_parents; | 186 | init.num_parents = num_parents; |
186 | 187 | ||
@@ -205,10 +206,10 @@ static struct clk *_tegra_clk_register_periph(const char *name, | |||
205 | struct clk *tegra_clk_register_periph(const char *name, | 206 | struct clk *tegra_clk_register_periph(const char *name, |
206 | const char **parent_names, int num_parents, | 207 | const char **parent_names, int num_parents, |
207 | struct tegra_clk_periph *periph, void __iomem *clk_base, | 208 | struct tegra_clk_periph *periph, void __iomem *clk_base, |
208 | u32 offset) | 209 | u32 offset, unsigned long flags) |
209 | { | 210 | { |
210 | return _tegra_clk_register_periph(name, parent_names, num_parents, | 211 | return _tegra_clk_register_periph(name, parent_names, num_parents, |
211 | periph, clk_base, offset, true); | 212 | periph, clk_base, offset, true, flags); |
212 | } | 213 | } |
213 | 214 | ||
214 | struct clk *tegra_clk_register_periph_nodiv(const char *name, | 215 | struct clk *tegra_clk_register_periph_nodiv(const char *name, |
@@ -217,5 +218,5 @@ struct clk *tegra_clk_register_periph_nodiv(const char *name, | |||
217 | u32 offset) | 218 | u32 offset) |
218 | { | 219 | { |
219 | return _tegra_clk_register_periph(name, parent_names, num_parents, | 220 | return _tegra_clk_register_periph(name, parent_names, num_parents, |
220 | periph, clk_base, offset, false); | 221 | periph, clk_base, offset, false, CLK_SET_RATE_PARENT); |
221 | } | 222 | } |
diff --git a/drivers/clk/tegra/clk-tegra20.c b/drivers/clk/tegra/clk-tegra20.c index 5c7b58b96911..b0405b67f49c 100644 --- a/drivers/clk/tegra/clk-tegra20.c +++ b/drivers/clk/tegra/clk-tegra20.c | |||
@@ -1019,7 +1019,7 @@ static void __init tegra20_periph_clk_init(void) | |||
1019 | data = &tegra_periph_clk_list[i]; | 1019 | data = &tegra_periph_clk_list[i]; |
1020 | clk = tegra_clk_register_periph(data->name, data->parent_names, | 1020 | clk = tegra_clk_register_periph(data->name, data->parent_names, |
1021 | data->num_parents, &data->periph, | 1021 | data->num_parents, &data->periph, |
1022 | clk_base, data->offset); | 1022 | clk_base, data->offset, data->flags); |
1023 | clk_register_clkdev(clk, data->con_id, data->dev_id); | 1023 | clk_register_clkdev(clk, data->con_id, data->dev_id); |
1024 | clks[data->clk_id] = clk; | 1024 | clks[data->clk_id] = clk; |
1025 | } | 1025 | } |
diff --git a/drivers/clk/tegra/clk-tegra30.c b/drivers/clk/tegra/clk-tegra30.c index 735f964edc65..2dc0c5602613 100644 --- a/drivers/clk/tegra/clk-tegra30.c +++ b/drivers/clk/tegra/clk-tegra30.c | |||
@@ -1668,7 +1668,7 @@ static void __init tegra30_periph_clk_init(void) | |||
1668 | data = &tegra_periph_clk_list[i]; | 1668 | data = &tegra_periph_clk_list[i]; |
1669 | clk = tegra_clk_register_periph(data->name, data->parent_names, | 1669 | clk = tegra_clk_register_periph(data->name, data->parent_names, |
1670 | data->num_parents, &data->periph, | 1670 | data->num_parents, &data->periph, |
1671 | clk_base, data->offset); | 1671 | clk_base, data->offset, data->flags); |
1672 | clk_register_clkdev(clk, data->con_id, data->dev_id); | 1672 | clk_register_clkdev(clk, data->con_id, data->dev_id); |
1673 | clks[data->clk_id] = clk; | 1673 | clks[data->clk_id] = clk; |
1674 | } | 1674 | } |
diff --git a/drivers/clk/tegra/clk.h b/drivers/clk/tegra/clk.h index 8cedb092a239..fd12b77c985d 100644 --- a/drivers/clk/tegra/clk.h +++ b/drivers/clk/tegra/clk.h | |||
@@ -417,7 +417,7 @@ extern const struct clk_ops tegra_clk_periph_ops; | |||
417 | struct clk *tegra_clk_register_periph(const char *name, | 417 | struct clk *tegra_clk_register_periph(const char *name, |
418 | const char **parent_names, int num_parents, | 418 | const char **parent_names, int num_parents, |
419 | struct tegra_clk_periph *periph, void __iomem *clk_base, | 419 | struct tegra_clk_periph *periph, void __iomem *clk_base, |
420 | u32 offset); | 420 | u32 offset, unsigned long flags); |
421 | struct clk *tegra_clk_register_periph_nodiv(const char *name, | 421 | struct clk *tegra_clk_register_periph_nodiv(const char *name, |
422 | const char **parent_names, int num_parents, | 422 | const char **parent_names, int num_parents, |
423 | struct tegra_clk_periph *periph, void __iomem *clk_base, | 423 | struct tegra_clk_periph *periph, void __iomem *clk_base, |
@@ -460,12 +460,14 @@ struct tegra_periph_init_data { | |||
460 | u32 offset; | 460 | u32 offset; |
461 | const char *con_id; | 461 | const char *con_id; |
462 | const char *dev_id; | 462 | const char *dev_id; |
463 | unsigned long flags; | ||
463 | }; | 464 | }; |
464 | 465 | ||
465 | #define TEGRA_INIT_DATA_TABLE(_name, _con_id, _dev_id, _parent_names, _offset,\ | 466 | #define TEGRA_INIT_DATA_TABLE(_name, _con_id, _dev_id, _parent_names, _offset,\ |
466 | _mux_shift, _mux_mask, _mux_flags, _div_shift, \ | 467 | _mux_shift, _mux_mask, _mux_flags, _div_shift, \ |
467 | _div_width, _div_frac_width, _div_flags, _regs, \ | 468 | _div_width, _div_frac_width, _div_flags, _regs, \ |
468 | _clk_num, _enb_refcnt, _gate_flags, _clk_id, _table) \ | 469 | _clk_num, _enb_refcnt, _gate_flags, _clk_id, _table,\ |
470 | _flags) \ | ||
469 | { \ | 471 | { \ |
470 | .name = _name, \ | 472 | .name = _name, \ |
471 | .clk_id = _clk_id, \ | 473 | .clk_id = _clk_id, \ |
@@ -480,6 +482,7 @@ struct tegra_periph_init_data { | |||
480 | .offset = _offset, \ | 482 | .offset = _offset, \ |
481 | .con_id = _con_id, \ | 483 | .con_id = _con_id, \ |
482 | .dev_id = _dev_id, \ | 484 | .dev_id = _dev_id, \ |
485 | .flags = _flags \ | ||
483 | } | 486 | } |
484 | 487 | ||
485 | #define TEGRA_INIT_DATA(_name, _con_id, _dev_id, _parent_names, _offset,\ | 488 | #define TEGRA_INIT_DATA(_name, _con_id, _dev_id, _parent_names, _offset,\ |
@@ -490,7 +493,7 @@ struct tegra_periph_init_data { | |||
490 | _mux_shift, BIT(_mux_width) - 1, _mux_flags, \ | 493 | _mux_shift, BIT(_mux_width) - 1, _mux_flags, \ |
491 | _div_shift, _div_width, _div_frac_width, _div_flags, \ | 494 | _div_shift, _div_width, _div_frac_width, _div_flags, \ |
492 | _regs, _clk_num, _enb_refcnt, _gate_flags, _clk_id,\ | 495 | _regs, _clk_num, _enb_refcnt, _gate_flags, _clk_id,\ |
493 | NULL) | 496 | NULL, 0) |
494 | 497 | ||
495 | /** | 498 | /** |
496 | * struct clk_super_mux - super clock | 499 | * struct clk_super_mux - super clock |