aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/clk
diff options
context:
space:
mode:
authorPeter De Schrijver <pdeschrijver@nvidia.com>2013-04-03 10:40:42 -0400
committerStephen Warren <swarren@nvidia.com>2013-04-04 18:10:56 -0400
commita26a029893096204f08a3ff5e262f99e1a75e273 (patch)
tree4411b941852278fca92c067601ffc4882fc4f4a4 /drivers/clk
parentc1d1939c5163088e5f12011c6b3a6a9fab40215f (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.c11
-rw-r--r--drivers/clk/tegra/clk-tegra20.c2
-rw-r--r--drivers/clk/tegra/clk-tegra30.c2
-rw-r--r--drivers/clk/tegra/clk.h9
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 = {
173static struct clk *_tegra_clk_register_periph(const char *name, 173static 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,
205struct clk *tegra_clk_register_periph(const char *name, 206struct 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
214struct clk *tegra_clk_register_periph_nodiv(const char *name, 215struct 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;
417struct clk *tegra_clk_register_periph(const char *name, 417struct 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);
421struct clk *tegra_clk_register_periph_nodiv(const char *name, 421struct 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