diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2015-08-31 20:26:48 -0400 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2015-08-31 20:26:48 -0400 |
| commit | f36fc04e4cdda9e4c72ee504e7dc638f9a168863 (patch) | |
| tree | 27ccf1037fba7b0deeb5bfdfb748bd9cc97c293d /include/linux | |
| parent | 26f8b7edc9eab56638274f5db90848a6df602081 (diff) | |
| parent | ba30011577330b7e29ecb5916d89c6db9fbc5b3d (diff) | |
Merge tag 'clk-for-linus-4.3' of git://git.kernel.org/pub/scm/linux/kernel/git/clk/linux
Pull clk updates from Michael Turquette:
"The clk framework changes for 4.3 are mostly updates to existing
drivers and the addition of new clock drivers. Stephen Boyd has also
done a lot of subsystem-wide driver clean-ups (thanks!). There are
also fixes to the framework core and changes to better split clock
provider drivers from clock consumer drivers"
* tag 'clk-for-linus-4.3' of git://git.kernel.org/pub/scm/linux/kernel/git/clk/linux: (227 commits)
clk: s5pv210: add missing call to samsung_clk_of_add_provider()
clk: pistachio: correct critical clock list
clk: pistachio: Fix PLL rate calculation in integer mode
clk: pistachio: Fix override of clk-pll settings from boot loader
clk: pistachio: Fix 32bit integer overflows
clk: tegra: Fix some static checker problems
clk: qcom: Fix MSM8916 prng clock enable bit
clk: Add missing header for 'bool' definition to clk-conf.h
drivers/clk: appropriate __init annotation for const data
clk: rockchip: register pll mux before pll itself
clk: add bindings for the Ux500 clocks
clk/ARM: move Ux500 PRCC bases to the device tree
clk: remove duplicated code with __clk_set_parent_after
clk: Convert __clk_get_name(hw->clk) to clk_hw_get_name(hw)
clk: Constify clk_hw argument to provider APIs
clk: Hi6220: add stub clock driver
dt-bindings: clk: Hi6220: Document stub clock driver
dt-bindings: arm: Hi6220: add doc for SRAM controller
clk: atlas7: fix pll missed divide NR in fraction mode
clk: atlas7: fix bit field and its root clk for coresight_tpiu
...
Diffstat (limited to 'include/linux')
| -rw-r--r-- | include/linux/clk-provider.h | 89 | ||||
| -rw-r--r-- | include/linux/clk/clk-conf.h | 2 | ||||
| -rw-r--r-- | include/linux/clk/tegra.h | 3 | ||||
| -rw-r--r-- | include/linux/clk/ti.h | 157 | ||||
| -rw-r--r-- | include/linux/platform_data/clk-ux500.h | 12 |
5 files changed, 113 insertions, 150 deletions
diff --git a/include/linux/clk-provider.h b/include/linux/clk-provider.h index 78842f46f152..3ecc07d0da77 100644 --- a/include/linux/clk-provider.h +++ b/include/linux/clk-provider.h | |||
| @@ -11,7 +11,6 @@ | |||
| 11 | #ifndef __LINUX_CLK_PROVIDER_H | 11 | #ifndef __LINUX_CLK_PROVIDER_H |
| 12 | #define __LINUX_CLK_PROVIDER_H | 12 | #define __LINUX_CLK_PROVIDER_H |
| 13 | 13 | ||
| 14 | #include <linux/clk.h> | ||
| 15 | #include <linux/io.h> | 14 | #include <linux/io.h> |
| 16 | #include <linux/of.h> | 15 | #include <linux/of.h> |
| 17 | 16 | ||
| @@ -33,11 +32,34 @@ | |||
| 33 | #define CLK_GET_ACCURACY_NOCACHE BIT(8) /* do not use the cached clk accuracy */ | 32 | #define CLK_GET_ACCURACY_NOCACHE BIT(8) /* do not use the cached clk accuracy */ |
| 34 | #define CLK_RECALC_NEW_RATES BIT(9) /* recalc rates after notifications */ | 33 | #define CLK_RECALC_NEW_RATES BIT(9) /* recalc rates after notifications */ |
| 35 | 34 | ||
| 35 | struct clk; | ||
| 36 | struct clk_hw; | 36 | struct clk_hw; |
| 37 | struct clk_core; | 37 | struct clk_core; |
| 38 | struct dentry; | 38 | struct dentry; |
| 39 | 39 | ||
| 40 | /** | 40 | /** |
| 41 | * struct clk_rate_request - Structure encoding the clk constraints that | ||
| 42 | * a clock user might require. | ||
| 43 | * | ||
| 44 | * @rate: Requested clock rate. This field will be adjusted by | ||
| 45 | * clock drivers according to hardware capabilities. | ||
| 46 | * @min_rate: Minimum rate imposed by clk users. | ||
| 47 | * @max_rate: Maximum rate a imposed by clk users. | ||
| 48 | * @best_parent_rate: The best parent rate a parent can provide to fulfill the | ||
| 49 | * requested constraints. | ||
| 50 | * @best_parent_hw: The most appropriate parent clock that fulfills the | ||
| 51 | * requested constraints. | ||
| 52 | * | ||
| 53 | */ | ||
| 54 | struct clk_rate_request { | ||
| 55 | unsigned long rate; | ||
| 56 | unsigned long min_rate; | ||
| 57 | unsigned long max_rate; | ||
| 58 | unsigned long best_parent_rate; | ||
| 59 | struct clk_hw *best_parent_hw; | ||
| 60 | }; | ||
| 61 | |||
| 62 | /** | ||
| 41 | * struct clk_ops - Callback operations for hardware clocks; these are to | 63 | * struct clk_ops - Callback operations for hardware clocks; these are to |
| 42 | * be provided by the clock implementation, and will be called by drivers | 64 | * be provided by the clock implementation, and will be called by drivers |
| 43 | * through the clk_* api. | 65 | * through the clk_* api. |
| @@ -176,12 +198,8 @@ struct clk_ops { | |||
| 176 | unsigned long parent_rate); | 198 | unsigned long parent_rate); |
| 177 | long (*round_rate)(struct clk_hw *hw, unsigned long rate, | 199 | long (*round_rate)(struct clk_hw *hw, unsigned long rate, |
| 178 | unsigned long *parent_rate); | 200 | unsigned long *parent_rate); |
| 179 | long (*determine_rate)(struct clk_hw *hw, | 201 | int (*determine_rate)(struct clk_hw *hw, |
| 180 | unsigned long rate, | 202 | struct clk_rate_request *req); |
| 181 | unsigned long min_rate, | ||
| 182 | unsigned long max_rate, | ||
| 183 | unsigned long *best_parent_rate, | ||
| 184 | struct clk_hw **best_parent_hw); | ||
| 185 | int (*set_parent)(struct clk_hw *hw, u8 index); | 203 | int (*set_parent)(struct clk_hw *hw, u8 index); |
| 186 | u8 (*get_parent)(struct clk_hw *hw); | 204 | u8 (*get_parent)(struct clk_hw *hw); |
| 187 | int (*set_rate)(struct clk_hw *hw, unsigned long rate, | 205 | int (*set_rate)(struct clk_hw *hw, unsigned long rate, |
| @@ -343,6 +361,9 @@ struct clk_div_table { | |||
| 343 | * to the closest integer instead of the up one. | 361 | * to the closest integer instead of the up one. |
| 344 | * CLK_DIVIDER_READ_ONLY - The divider settings are preconfigured and should | 362 | * CLK_DIVIDER_READ_ONLY - The divider settings are preconfigured and should |
| 345 | * not be changed by the clock framework. | 363 | * not be changed by the clock framework. |
| 364 | * CLK_DIVIDER_MAX_AT_ZERO - For dividers which are like CLK_DIVIDER_ONE_BASED | ||
| 365 | * except when the value read from the register is zero, the divisor is | ||
| 366 | * 2^width of the field. | ||
| 346 | */ | 367 | */ |
| 347 | struct clk_divider { | 368 | struct clk_divider { |
| 348 | struct clk_hw hw; | 369 | struct clk_hw hw; |
| @@ -360,6 +381,7 @@ struct clk_divider { | |||
| 360 | #define CLK_DIVIDER_HIWORD_MASK BIT(3) | 381 | #define CLK_DIVIDER_HIWORD_MASK BIT(3) |
| 361 | #define CLK_DIVIDER_ROUND_CLOSEST BIT(4) | 382 | #define CLK_DIVIDER_ROUND_CLOSEST BIT(4) |
| 362 | #define CLK_DIVIDER_READ_ONLY BIT(5) | 383 | #define CLK_DIVIDER_READ_ONLY BIT(5) |
| 384 | #define CLK_DIVIDER_MAX_AT_ZERO BIT(6) | ||
| 363 | 385 | ||
| 364 | extern const struct clk_ops clk_divider_ops; | 386 | extern const struct clk_ops clk_divider_ops; |
| 365 | 387 | ||
| @@ -550,6 +572,23 @@ struct clk *clk_register_gpio_gate(struct device *dev, const char *name, | |||
| 550 | void of_gpio_clk_gate_setup(struct device_node *node); | 572 | void of_gpio_clk_gate_setup(struct device_node *node); |
| 551 | 573 | ||
| 552 | /** | 574 | /** |
| 575 | * struct clk_gpio_mux - gpio controlled clock multiplexer | ||
| 576 | * | ||
| 577 | * @hw: see struct clk_gpio | ||
| 578 | * @gpiod: gpio descriptor to select the parent of this clock multiplexer | ||
| 579 | * | ||
| 580 | * Clock with a gpio control for selecting the parent clock. | ||
| 581 | * Implements .get_parent, .set_parent and .determine_rate | ||
| 582 | */ | ||
| 583 | |||
| 584 | extern const struct clk_ops clk_gpio_mux_ops; | ||
| 585 | struct clk *clk_register_gpio_mux(struct device *dev, const char *name, | ||
| 586 | const char * const *parent_names, u8 num_parents, unsigned gpio, | ||
| 587 | bool active_low, unsigned long flags); | ||
| 588 | |||
| 589 | void of_gpio_mux_clk_setup(struct device_node *node); | ||
| 590 | |||
| 591 | /** | ||
| 553 | * clk_register - allocate a new clock, register it and return an opaque cookie | 592 | * clk_register - allocate a new clock, register it and return an opaque cookie |
| 554 | * @dev: device that is registering this clock | 593 | * @dev: device that is registering this clock |
| 555 | * @hw: link to hardware-specific clock data | 594 | * @hw: link to hardware-specific clock data |
| @@ -568,31 +607,27 @@ void devm_clk_unregister(struct device *dev, struct clk *clk); | |||
| 568 | 607 | ||
| 569 | /* helper functions */ | 608 | /* helper functions */ |
| 570 | const char *__clk_get_name(struct clk *clk); | 609 | const char *__clk_get_name(struct clk *clk); |
| 610 | const char *clk_hw_get_name(const struct clk_hw *hw); | ||
| 571 | struct clk_hw *__clk_get_hw(struct clk *clk); | 611 | struct clk_hw *__clk_get_hw(struct clk *clk); |
| 572 | u8 __clk_get_num_parents(struct clk *clk); | 612 | unsigned int clk_hw_get_num_parents(const struct clk_hw *hw); |
| 573 | struct clk *__clk_get_parent(struct clk *clk); | 613 | struct clk_hw *clk_hw_get_parent(const struct clk_hw *hw); |
| 574 | struct clk *clk_get_parent_by_index(struct clk *clk, u8 index); | 614 | struct clk_hw *clk_hw_get_parent_by_index(const struct clk_hw *hw, |
| 615 | unsigned int index); | ||
| 575 | unsigned int __clk_get_enable_count(struct clk *clk); | 616 | unsigned int __clk_get_enable_count(struct clk *clk); |
| 576 | unsigned long __clk_get_rate(struct clk *clk); | 617 | unsigned long clk_hw_get_rate(const struct clk_hw *hw); |
| 577 | unsigned long __clk_get_flags(struct clk *clk); | 618 | unsigned long __clk_get_flags(struct clk *clk); |
| 578 | bool __clk_is_prepared(struct clk *clk); | 619 | unsigned long clk_hw_get_flags(const struct clk_hw *hw); |
| 620 | bool clk_hw_is_prepared(const struct clk_hw *hw); | ||
| 579 | bool __clk_is_enabled(struct clk *clk); | 621 | bool __clk_is_enabled(struct clk *clk); |
| 580 | struct clk *__clk_lookup(const char *name); | 622 | struct clk *__clk_lookup(const char *name); |
| 581 | long __clk_mux_determine_rate(struct clk_hw *hw, unsigned long rate, | 623 | int __clk_mux_determine_rate(struct clk_hw *hw, |
| 582 | unsigned long min_rate, | 624 | struct clk_rate_request *req); |
| 583 | unsigned long max_rate, | 625 | int __clk_determine_rate(struct clk_hw *core, struct clk_rate_request *req); |
| 584 | unsigned long *best_parent_rate, | 626 | int __clk_mux_determine_rate_closest(struct clk_hw *hw, |
| 585 | struct clk_hw **best_parent_p); | 627 | struct clk_rate_request *req); |
| 586 | unsigned long __clk_determine_rate(struct clk_hw *core, | ||
| 587 | unsigned long rate, | ||
| 588 | unsigned long min_rate, | ||
| 589 | unsigned long max_rate); | ||
| 590 | long __clk_mux_determine_rate_closest(struct clk_hw *hw, unsigned long rate, | ||
| 591 | unsigned long min_rate, | ||
| 592 | unsigned long max_rate, | ||
| 593 | unsigned long *best_parent_rate, | ||
| 594 | struct clk_hw **best_parent_p); | ||
| 595 | void clk_hw_reparent(struct clk_hw *hw, struct clk_hw *new_parent); | 628 | void clk_hw_reparent(struct clk_hw *hw, struct clk_hw *new_parent); |
| 629 | void clk_hw_set_rate_range(struct clk_hw *hw, unsigned long min_rate, | ||
| 630 | unsigned long max_rate); | ||
| 596 | 631 | ||
| 597 | static inline void __clk_hw_set_clk(struct clk_hw *dst, struct clk_hw *src) | 632 | static inline void __clk_hw_set_clk(struct clk_hw *dst, struct clk_hw *src) |
| 598 | { | 633 | { |
| @@ -603,7 +638,7 @@ static inline void __clk_hw_set_clk(struct clk_hw *dst, struct clk_hw *src) | |||
| 603 | /* | 638 | /* |
| 604 | * FIXME clock api without lock protection | 639 | * FIXME clock api without lock protection |
| 605 | */ | 640 | */ |
| 606 | unsigned long __clk_round_rate(struct clk *clk, unsigned long rate); | 641 | unsigned long clk_hw_round_rate(struct clk_hw *hw, unsigned long rate); |
| 607 | 642 | ||
| 608 | struct of_device_id; | 643 | struct of_device_id; |
| 609 | 644 | ||
diff --git a/include/linux/clk/clk-conf.h b/include/linux/clk/clk-conf.h index f3050e15f833..e0c362363c38 100644 --- a/include/linux/clk/clk-conf.h +++ b/include/linux/clk/clk-conf.h | |||
| @@ -7,6 +7,8 @@ | |||
| 7 | * published by the Free Software Foundation. | 7 | * published by the Free Software Foundation. |
| 8 | */ | 8 | */ |
| 9 | 9 | ||
| 10 | #include <linux/types.h> | ||
| 11 | |||
| 10 | struct device_node; | 12 | struct device_node; |
| 11 | 13 | ||
| 12 | #if defined(CONFIG_OF) && defined(CONFIG_COMMON_CLK) | 14 | #if defined(CONFIG_OF) && defined(CONFIG_COMMON_CLK) |
diff --git a/include/linux/clk/tegra.h b/include/linux/clk/tegra.h index 19c4208f4752..57bf7aab4516 100644 --- a/include/linux/clk/tegra.h +++ b/include/linux/clk/tegra.h | |||
| @@ -17,7 +17,8 @@ | |||
| 17 | #ifndef __LINUX_CLK_TEGRA_H_ | 17 | #ifndef __LINUX_CLK_TEGRA_H_ |
| 18 | #define __LINUX_CLK_TEGRA_H_ | 18 | #define __LINUX_CLK_TEGRA_H_ |
| 19 | 19 | ||
| 20 | #include <linux/clk.h> | 20 | #include <linux/types.h> |
| 21 | #include <linux/bug.h> | ||
| 21 | 22 | ||
| 22 | /* | 23 | /* |
| 23 | * Tegra CPU clock and reset control ops | 24 | * Tegra CPU clock and reset control ops |
diff --git a/include/linux/clk/ti.h b/include/linux/clk/ti.h index 79b76e13d904..9299222d680d 100644 --- a/include/linux/clk/ti.h +++ b/include/linux/clk/ti.h | |||
| @@ -188,33 +188,6 @@ struct clk_hw_omap { | |||
| 188 | /* DPLL Type and DCO Selection Flags */ | 188 | /* DPLL Type and DCO Selection Flags */ |
| 189 | #define DPLL_J_TYPE 0x1 | 189 | #define DPLL_J_TYPE 0x1 |
| 190 | 190 | ||
| 191 | /* Composite clock component types */ | ||
| 192 | enum { | ||
| 193 | CLK_COMPONENT_TYPE_GATE = 0, | ||
| 194 | CLK_COMPONENT_TYPE_DIVIDER, | ||
| 195 | CLK_COMPONENT_TYPE_MUX, | ||
| 196 | CLK_COMPONENT_TYPE_MAX, | ||
| 197 | }; | ||
| 198 | |||
| 199 | /** | ||
| 200 | * struct ti_dt_clk - OMAP DT clock alias declarations | ||
| 201 | * @lk: clock lookup definition | ||
| 202 | * @node_name: clock DT node to map to | ||
| 203 | */ | ||
| 204 | struct ti_dt_clk { | ||
| 205 | struct clk_lookup lk; | ||
| 206 | char *node_name; | ||
| 207 | }; | ||
| 208 | |||
| 209 | #define DT_CLK(dev, con, name) \ | ||
| 210 | { \ | ||
| 211 | .lk = { \ | ||
| 212 | .dev_id = dev, \ | ||
| 213 | .con_id = con, \ | ||
| 214 | }, \ | ||
| 215 | .node_name = name, \ | ||
| 216 | } | ||
| 217 | |||
| 218 | /* Static memmap indices */ | 191 | /* Static memmap indices */ |
| 219 | enum { | 192 | enum { |
| 220 | TI_CLKM_CM = 0, | 193 | TI_CLKM_CM = 0, |
| @@ -225,8 +198,6 @@ enum { | |||
| 225 | CLK_MAX_MEMMAPS | 198 | CLK_MAX_MEMMAPS |
| 226 | }; | 199 | }; |
| 227 | 200 | ||
| 228 | typedef void (*ti_of_clk_init_cb_t)(struct clk_hw *, struct device_node *); | ||
| 229 | |||
| 230 | /** | 201 | /** |
| 231 | * struct clk_omap_reg - OMAP register declaration | 202 | * struct clk_omap_reg - OMAP register declaration |
| 232 | * @offset: offset from the master IP module base address | 203 | * @offset: offset from the master IP module base address |
| @@ -238,93 +209,56 @@ struct clk_omap_reg { | |||
| 238 | }; | 209 | }; |
| 239 | 210 | ||
| 240 | /** | 211 | /** |
| 241 | * struct ti_clk_ll_ops - low-level register access ops for a clock | 212 | * struct ti_clk_ll_ops - low-level ops for clocks |
| 242 | * @clk_readl: pointer to register read function | 213 | * @clk_readl: pointer to register read function |
| 243 | * @clk_writel: pointer to register write function | 214 | * @clk_writel: pointer to register write function |
| 215 | * @clkdm_clk_enable: pointer to clockdomain enable function | ||
| 216 | * @clkdm_clk_disable: pointer to clockdomain disable function | ||
| 217 | * @cm_wait_module_ready: pointer to CM module wait ready function | ||
| 218 | * @cm_split_idlest_reg: pointer to CM module function to split idlest reg | ||
| 244 | * | 219 | * |
| 245 | * Low-level register access ops are generally used by the basic clock types | 220 | * Low-level ops are generally used by the basic clock types (clk-gate, |
| 246 | * (clk-gate, clk-mux, clk-divider etc.) to provide support for various | 221 | * clk-mux, clk-divider etc.) to provide support for various low-level |
| 247 | * low-level hardware interfaces (direct MMIO, regmap etc.), but can also be | 222 | * hadrware interfaces (direct MMIO, regmap etc.), and is initialized |
| 248 | * used by other hardware-specific clock drivers if needed. | 223 | * by board code. Low-level ops also contain some other platform specific |
| 224 | * operations not provided directly by clock drivers. | ||
| 249 | */ | 225 | */ |
| 250 | struct ti_clk_ll_ops { | 226 | struct ti_clk_ll_ops { |
| 251 | u32 (*clk_readl)(void __iomem *reg); | 227 | u32 (*clk_readl)(void __iomem *reg); |
| 252 | void (*clk_writel)(u32 val, void __iomem *reg); | 228 | void (*clk_writel)(u32 val, void __iomem *reg); |
| 229 | int (*clkdm_clk_enable)(struct clockdomain *clkdm, struct clk *clk); | ||
| 230 | int (*clkdm_clk_disable)(struct clockdomain *clkdm, | ||
| 231 | struct clk *clk); | ||
| 232 | int (*cm_wait_module_ready)(u8 part, s16 prcm_mod, u16 idlest_reg, | ||
| 233 | u8 idlest_shift); | ||
| 234 | int (*cm_split_idlest_reg)(void __iomem *idlest_reg, s16 *prcm_inst, | ||
| 235 | u8 *idlest_reg_id); | ||
| 253 | }; | 236 | }; |
| 254 | 237 | ||
| 255 | extern struct ti_clk_ll_ops *ti_clk_ll_ops; | ||
| 256 | |||
| 257 | extern const struct clk_ops ti_clk_divider_ops; | ||
| 258 | extern const struct clk_ops ti_clk_mux_ops; | ||
| 259 | |||
| 260 | #define to_clk_hw_omap(_hw) container_of(_hw, struct clk_hw_omap, hw) | 238 | #define to_clk_hw_omap(_hw) container_of(_hw, struct clk_hw_omap, hw) |
| 261 | 239 | ||
| 262 | void omap2_init_clk_hw_omap_clocks(struct clk *clk); | ||
| 263 | int omap3_noncore_dpll_enable(struct clk_hw *hw); | ||
| 264 | void omap3_noncore_dpll_disable(struct clk_hw *hw); | ||
| 265 | int omap3_noncore_dpll_set_parent(struct clk_hw *hw, u8 index); | ||
| 266 | int omap3_noncore_dpll_set_rate(struct clk_hw *hw, unsigned long rate, | ||
| 267 | unsigned long parent_rate); | ||
| 268 | int omap3_noncore_dpll_set_rate_and_parent(struct clk_hw *hw, | ||
| 269 | unsigned long rate, | ||
| 270 | unsigned long parent_rate, | ||
| 271 | u8 index); | ||
| 272 | long omap3_noncore_dpll_determine_rate(struct clk_hw *hw, | ||
| 273 | unsigned long rate, | ||
| 274 | unsigned long min_rate, | ||
| 275 | unsigned long max_rate, | ||
| 276 | unsigned long *best_parent_rate, | ||
| 277 | struct clk_hw **best_parent_clk); | ||
| 278 | unsigned long omap4_dpll_regm4xen_recalc(struct clk_hw *hw, | ||
| 279 | unsigned long parent_rate); | ||
| 280 | long omap4_dpll_regm4xen_round_rate(struct clk_hw *hw, | ||
| 281 | unsigned long target_rate, | ||
| 282 | unsigned long *parent_rate); | ||
| 283 | long omap4_dpll_regm4xen_determine_rate(struct clk_hw *hw, | ||
| 284 | unsigned long rate, | ||
| 285 | unsigned long min_rate, | ||
| 286 | unsigned long max_rate, | ||
| 287 | unsigned long *best_parent_rate, | ||
| 288 | struct clk_hw **best_parent_clk); | ||
| 289 | u8 omap2_init_dpll_parent(struct clk_hw *hw); | ||
| 290 | unsigned long omap3_dpll_recalc(struct clk_hw *hw, unsigned long parent_rate); | ||
| 291 | long omap2_dpll_round_rate(struct clk_hw *hw, unsigned long target_rate, | ||
| 292 | unsigned long *parent_rate); | ||
| 293 | void omap2_init_clk_clkdm(struct clk_hw *clk); | 240 | void omap2_init_clk_clkdm(struct clk_hw *clk); |
| 294 | unsigned long omap3_clkoutx2_recalc(struct clk_hw *hw, | ||
| 295 | unsigned long parent_rate); | ||
| 296 | int omap3_clkoutx2_set_rate(struct clk_hw *hw, unsigned long rate, | ||
| 297 | unsigned long parent_rate); | ||
| 298 | long omap3_clkoutx2_round_rate(struct clk_hw *hw, unsigned long rate, | ||
| 299 | unsigned long *prate); | ||
| 300 | int omap2_clkops_enable_clkdm(struct clk_hw *hw); | ||
| 301 | void omap2_clkops_disable_clkdm(struct clk_hw *hw); | ||
| 302 | int omap2_clk_disable_autoidle_all(void); | 241 | int omap2_clk_disable_autoidle_all(void); |
| 303 | void omap2_clk_enable_init_clocks(const char **clk_names, u8 num_clocks); | 242 | int omap2_clk_enable_autoidle_all(void); |
| 304 | int omap3_dpll4_set_rate(struct clk_hw *clk, unsigned long rate, | 243 | int omap2_clk_allow_idle(struct clk *clk); |
| 305 | unsigned long parent_rate); | 244 | int omap2_clk_deny_idle(struct clk *clk); |
| 306 | int omap3_dpll4_set_rate_and_parent(struct clk_hw *hw, unsigned long rate, | ||
| 307 | unsigned long parent_rate, u8 index); | ||
| 308 | int omap2_dflt_clk_enable(struct clk_hw *hw); | ||
| 309 | void omap2_dflt_clk_disable(struct clk_hw *hw); | ||
| 310 | int omap2_dflt_clk_is_enabled(struct clk_hw *hw); | ||
| 311 | void omap3_clk_lock_dpll5(void); | ||
| 312 | unsigned long omap2_dpllcore_recalc(struct clk_hw *hw, | 245 | unsigned long omap2_dpllcore_recalc(struct clk_hw *hw, |
| 313 | unsigned long parent_rate); | 246 | unsigned long parent_rate); |
| 314 | int omap2_reprogram_dpllcore(struct clk_hw *clk, unsigned long rate, | 247 | int omap2_reprogram_dpllcore(struct clk_hw *clk, unsigned long rate, |
| 315 | unsigned long parent_rate); | 248 | unsigned long parent_rate); |
| 316 | void omap2xxx_clkt_dpllcore_init(struct clk_hw *hw); | 249 | void omap2xxx_clkt_dpllcore_init(struct clk_hw *hw); |
| 317 | void omap2xxx_clkt_vps_init(void); | 250 | void omap2xxx_clkt_vps_init(void); |
| 251 | unsigned long omap2_get_dpll_rate(struct clk_hw_omap *clk); | ||
| 318 | 252 | ||
| 319 | void __iomem *ti_clk_get_reg_addr(struct device_node *node, int index); | ||
| 320 | void ti_dt_clocks_register(struct ti_dt_clk *oclks); | ||
| 321 | void ti_dt_clk_init_provider(struct device_node *np, int index); | ||
| 322 | void ti_dt_clk_init_retry_clks(void); | 253 | void ti_dt_clk_init_retry_clks(void); |
| 323 | void ti_dt_clockdomains_setup(void); | 254 | void ti_dt_clockdomains_setup(void); |
| 324 | int ti_clk_retry_init(struct device_node *node, struct clk_hw *hw, | 255 | int ti_clk_setup_ll_ops(struct ti_clk_ll_ops *ops); |
| 325 | ti_of_clk_init_cb_t func); | 256 | |
| 326 | int of_ti_clk_autoidle_setup(struct device_node *node); | 257 | struct regmap; |
| 327 | int ti_clk_add_component(struct device_node *node, struct clk_hw *hw, int type); | 258 | |
| 259 | int omap2_clk_provider_init(struct device_node *parent, int index, | ||
| 260 | struct regmap *syscon, void __iomem *mem); | ||
| 261 | void omap2_clk_legacy_provider_init(int index, void __iomem *mem); | ||
| 328 | 262 | ||
| 329 | int omap3430_dt_clk_init(void); | 263 | int omap3430_dt_clk_init(void); |
| 330 | int omap3630_dt_clk_init(void); | 264 | int omap3630_dt_clk_init(void); |
| @@ -338,27 +272,24 @@ int am43xx_dt_clk_init(void); | |||
| 338 | int omap2420_dt_clk_init(void); | 272 | int omap2420_dt_clk_init(void); |
| 339 | int omap2430_dt_clk_init(void); | 273 | int omap2430_dt_clk_init(void); |
| 340 | 274 | ||
| 341 | #ifdef CONFIG_OF | 275 | struct ti_clk_features { |
| 342 | void of_ti_clk_allow_autoidle_all(void); | 276 | u32 flags; |
| 343 | void of_ti_clk_deny_autoidle_all(void); | 277 | long fint_min; |
| 344 | #else | 278 | long fint_max; |
| 345 | static inline void of_ti_clk_allow_autoidle_all(void) { } | 279 | long fint_band1_max; |
| 346 | static inline void of_ti_clk_deny_autoidle_all(void) { } | 280 | long fint_band2_min; |
| 347 | #endif | 281 | u8 dpll_bypass_vals; |
| 282 | u8 cm_idlest_val; | ||
| 283 | }; | ||
| 284 | |||
| 285 | #define TI_CLK_DPLL_HAS_FREQSEL BIT(0) | ||
| 286 | #define TI_CLK_DPLL4_DENY_REPROGRAM BIT(1) | ||
| 287 | #define TI_CLK_DISABLE_CLKDM_CONTROL BIT(2) | ||
| 288 | |||
| 289 | void ti_clk_setup_features(struct ti_clk_features *features); | ||
| 290 | const struct ti_clk_features *ti_clk_get_features(void); | ||
| 348 | 291 | ||
| 349 | extern const struct clk_hw_omap_ops clkhwops_omap2xxx_dpll; | 292 | extern const struct clk_hw_omap_ops clkhwops_omap2xxx_dpll; |
| 350 | extern const struct clk_hw_omap_ops clkhwops_omap2430_i2chs_wait; | ||
| 351 | extern const struct clk_hw_omap_ops clkhwops_omap3_dpll; | ||
| 352 | extern const struct clk_hw_omap_ops clkhwops_omap4_dpllmx; | ||
| 353 | extern const struct clk_hw_omap_ops clkhwops_wait; | ||
| 354 | extern const struct clk_hw_omap_ops clkhwops_omap3430es2_dss_usbhost_wait; | ||
| 355 | extern const struct clk_hw_omap_ops clkhwops_am35xx_ipss_module_wait; | ||
| 356 | extern const struct clk_hw_omap_ops clkhwops_am35xx_ipss_wait; | ||
| 357 | extern const struct clk_hw_omap_ops clkhwops_iclk; | ||
| 358 | extern const struct clk_hw_omap_ops clkhwops_iclk_wait; | ||
| 359 | extern const struct clk_hw_omap_ops clkhwops_omap3430es2_iclk_ssi_wait; | ||
| 360 | extern const struct clk_hw_omap_ops clkhwops_omap3430es2_iclk_dss_usbhost_wait; | ||
| 361 | extern const struct clk_hw_omap_ops clkhwops_omap3430es2_iclk_hsotgusb_wait; | ||
| 362 | 293 | ||
| 363 | #ifdef CONFIG_ATAGS | 294 | #ifdef CONFIG_ATAGS |
| 364 | int omap3430_clk_legacy_init(void); | 295 | int omap3430_clk_legacy_init(void); |
diff --git a/include/linux/platform_data/clk-ux500.h b/include/linux/platform_data/clk-ux500.h index 97baf831e071..3af0da1f3be5 100644 --- a/include/linux/platform_data/clk-ux500.h +++ b/include/linux/platform_data/clk-ux500.h | |||
| @@ -10,14 +10,8 @@ | |||
| 10 | #ifndef __CLK_UX500_H | 10 | #ifndef __CLK_UX500_H |
| 11 | #define __CLK_UX500_H | 11 | #define __CLK_UX500_H |
| 12 | 12 | ||
| 13 | void u8500_of_clk_init(u32 clkrst1_base, u32 clkrst2_base, u32 clkrst3_base, | 13 | void u8500_clk_init(void); |
| 14 | u32 clkrst5_base, u32 clkrst6_base); | 14 | void u9540_clk_init(void); |
| 15 | 15 | void u8540_clk_init(void); | |
| 16 | void u8500_clk_init(u32 clkrst1_base, u32 clkrst2_base, u32 clkrst3_base, | ||
| 17 | u32 clkrst5_base, u32 clkrst6_base); | ||
| 18 | void u9540_clk_init(u32 clkrst1_base, u32 clkrst2_base, u32 clkrst3_base, | ||
| 19 | u32 clkrst5_base, u32 clkrst6_base); | ||
| 20 | void u8540_clk_init(u32 clkrst1_base, u32 clkrst2_base, u32 clkrst3_base, | ||
| 21 | u32 clkrst5_base, u32 clkrst6_base); | ||
| 22 | 16 | ||
| 23 | #endif /* __CLK_UX500_H */ | 17 | #endif /* __CLK_UX500_H */ |
