diff options
Diffstat (limited to 'include/linux')
| -rw-r--r-- | include/linux/clk-provider.h | 127 | ||||
| -rw-r--r-- | include/linux/clk/shmobile.h | 3 | ||||
| -rw-r--r-- | include/linux/clk/sunxi.h | 22 |
3 files changed, 95 insertions, 57 deletions
diff --git a/include/linux/clk-provider.h b/include/linux/clk-provider.h index f295bab1865d..0c287dbbb144 100644 --- a/include/linux/clk-provider.h +++ b/include/linux/clk-provider.h | |||
| @@ -40,14 +40,14 @@ struct dentry; | |||
| 40 | * through the clk_* api. | 40 | * through the clk_* api. |
| 41 | * | 41 | * |
| 42 | * @prepare: Prepare the clock for enabling. This must not return until | 42 | * @prepare: Prepare the clock for enabling. This must not return until |
| 43 | * the clock is fully prepared, and it's safe to call clk_enable. | 43 | * the clock is fully prepared, and it's safe to call clk_enable. |
| 44 | * This callback is intended to allow clock implementations to | 44 | * This callback is intended to allow clock implementations to |
| 45 | * do any initialisation that may sleep. Called with | 45 | * do any initialisation that may sleep. Called with |
| 46 | * prepare_lock held. | 46 | * prepare_lock held. |
| 47 | * | 47 | * |
| 48 | * @unprepare: Release the clock from its prepared state. This will typically | 48 | * @unprepare: Release the clock from its prepared state. This will typically |
| 49 | * undo any work done in the @prepare callback. Called with | 49 | * undo any work done in the @prepare callback. Called with |
| 50 | * prepare_lock held. | 50 | * prepare_lock held. |
| 51 | * | 51 | * |
| 52 | * @is_prepared: Queries the hardware to determine if the clock is prepared. | 52 | * @is_prepared: Queries the hardware to determine if the clock is prepared. |
| 53 | * This function is allowed to sleep. Optional, if this op is not | 53 | * This function is allowed to sleep. Optional, if this op is not |
| @@ -58,16 +58,16 @@ struct dentry; | |||
| 58 | * Called with prepare mutex held. This function may sleep. | 58 | * Called with prepare mutex held. This function may sleep. |
| 59 | * | 59 | * |
| 60 | * @enable: Enable the clock atomically. This must not return until the | 60 | * @enable: Enable the clock atomically. This must not return until the |
| 61 | * clock is generating a valid clock signal, usable by consumer | 61 | * clock is generating a valid clock signal, usable by consumer |
| 62 | * devices. Called with enable_lock held. This function must not | 62 | * devices. Called with enable_lock held. This function must not |
| 63 | * sleep. | 63 | * sleep. |
| 64 | * | 64 | * |
| 65 | * @disable: Disable the clock atomically. Called with enable_lock held. | 65 | * @disable: Disable the clock atomically. Called with enable_lock held. |
| 66 | * This function must not sleep. | 66 | * This function must not sleep. |
| 67 | * | 67 | * |
| 68 | * @is_enabled: Queries the hardware to determine if the clock is enabled. | 68 | * @is_enabled: Queries the hardware to determine if the clock is enabled. |
| 69 | * This function must not sleep. Optional, if this op is not | 69 | * This function must not sleep. Optional, if this op is not |
| 70 | * set then the enable count will be used. | 70 | * set then the enable count will be used. |
| 71 | * | 71 | * |
| 72 | * @disable_unused: Disable the clock atomically. Only called from | 72 | * @disable_unused: Disable the clock atomically. Only called from |
| 73 | * clk_disable_unused for gate clocks with special needs. | 73 | * clk_disable_unused for gate clocks with special needs. |
| @@ -75,34 +75,35 @@ struct dentry; | |||
| 75 | * sleep. | 75 | * sleep. |
| 76 | * | 76 | * |
| 77 | * @recalc_rate Recalculate the rate of this clock, by querying hardware. The | 77 | * @recalc_rate Recalculate the rate of this clock, by querying hardware. The |
| 78 | * parent rate is an input parameter. It is up to the caller to | 78 | * parent rate is an input parameter. It is up to the caller to |
| 79 | * ensure that the prepare_mutex is held across this call. | 79 | * ensure that the prepare_mutex is held across this call. |
| 80 | * Returns the calculated rate. Optional, but recommended - if | 80 | * Returns the calculated rate. Optional, but recommended - if |
| 81 | * this op is not set then clock rate will be initialized to 0. | 81 | * this op is not set then clock rate will be initialized to 0. |
| 82 | * | 82 | * |
| 83 | * @round_rate: Given a target rate as input, returns the closest rate actually | 83 | * @round_rate: Given a target rate as input, returns the closest rate actually |
| 84 | * supported by the clock. | 84 | * supported by the clock. The parent rate is an input/output |
| 85 | * parameter. | ||
| 85 | * | 86 | * |
| 86 | * @determine_rate: Given a target rate as input, returns the closest rate | 87 | * @determine_rate: Given a target rate as input, returns the closest rate |
| 87 | * actually supported by the clock, and optionally the parent clock | 88 | * actually supported by the clock, and optionally the parent clock |
| 88 | * that should be used to provide the clock rate. | 89 | * that should be used to provide the clock rate. |
| 89 | * | 90 | * |
| 90 | * @get_parent: Queries the hardware to determine the parent of a clock. The | ||
| 91 | * return value is a u8 which specifies the index corresponding to | ||
| 92 | * the parent clock. This index can be applied to either the | ||
| 93 | * .parent_names or .parents arrays. In short, this function | ||
| 94 | * translates the parent value read from hardware into an array | ||
| 95 | * index. Currently only called when the clock is initialized by | ||
| 96 | * __clk_init. This callback is mandatory for clocks with | ||
| 97 | * multiple parents. It is optional (and unnecessary) for clocks | ||
| 98 | * with 0 or 1 parents. | ||
| 99 | * | ||
| 100 | * @set_parent: Change the input source of this clock; for clocks with multiple | 91 | * @set_parent: Change the input source of this clock; for clocks with multiple |
| 101 | * possible parents specify a new parent by passing in the index | 92 | * possible parents specify a new parent by passing in the index |
| 102 | * as a u8 corresponding to the parent in either the .parent_names | 93 | * as a u8 corresponding to the parent in either the .parent_names |
| 103 | * or .parents arrays. This function in affect translates an | 94 | * or .parents arrays. This function in affect translates an |
| 104 | * array index into the value programmed into the hardware. | 95 | * array index into the value programmed into the hardware. |
| 105 | * Returns 0 on success, -EERROR otherwise. | 96 | * Returns 0 on success, -EERROR otherwise. |
| 97 | * | ||
| 98 | * @get_parent: Queries the hardware to determine the parent of a clock. The | ||
| 99 | * return value is a u8 which specifies the index corresponding to | ||
| 100 | * the parent clock. This index can be applied to either the | ||
| 101 | * .parent_names or .parents arrays. In short, this function | ||
| 102 | * translates the parent value read from hardware into an array | ||
| 103 | * index. Currently only called when the clock is initialized by | ||
| 104 | * __clk_init. This callback is mandatory for clocks with | ||
| 105 | * multiple parents. It is optional (and unnecessary) for clocks | ||
| 106 | * with 0 or 1 parents. | ||
| 106 | * | 107 | * |
| 107 | * @set_rate: Change the rate of this clock. The requested rate is specified | 108 | * @set_rate: Change the rate of this clock. The requested rate is specified |
| 108 | * by the second argument, which should typically be the return | 109 | * by the second argument, which should typically be the return |
| @@ -110,13 +111,6 @@ struct dentry; | |||
| 110 | * which is likely helpful for most .set_rate implementation. | 111 | * which is likely helpful for most .set_rate implementation. |
| 111 | * Returns 0 on success, -EERROR otherwise. | 112 | * Returns 0 on success, -EERROR otherwise. |
| 112 | * | 113 | * |
| 113 | * @recalc_accuracy: Recalculate the accuracy of this clock. The clock accuracy | ||
| 114 | * is expressed in ppb (parts per billion). The parent accuracy is | ||
| 115 | * an input parameter. | ||
| 116 | * Returns the calculated accuracy. Optional - if this op is not | ||
| 117 | * set then clock accuracy will be initialized to parent accuracy | ||
| 118 | * or 0 (perfect clock) if clock has no parent. | ||
| 119 | * | ||
| 120 | * @set_rate_and_parent: Change the rate and the parent of this clock. The | 114 | * @set_rate_and_parent: Change the rate and the parent of this clock. The |
| 121 | * requested rate is specified by the second argument, which | 115 | * requested rate is specified by the second argument, which |
| 122 | * should typically be the return of .round_rate call. The | 116 | * should typically be the return of .round_rate call. The |
| @@ -128,6 +122,18 @@ struct dentry; | |||
| 128 | * separately via calls to .set_parent and .set_rate. | 122 | * separately via calls to .set_parent and .set_rate. |
| 129 | * Returns 0 on success, -EERROR otherwise. | 123 | * Returns 0 on success, -EERROR otherwise. |
| 130 | * | 124 | * |
| 125 | * @recalc_accuracy: Recalculate the accuracy of this clock. The clock accuracy | ||
| 126 | * is expressed in ppb (parts per billion). The parent accuracy is | ||
| 127 | * an input parameter. | ||
| 128 | * Returns the calculated accuracy. Optional - if this op is not | ||
| 129 | * set then clock accuracy will be initialized to parent accuracy | ||
| 130 | * or 0 (perfect clock) if clock has no parent. | ||
| 131 | * | ||
| 132 | * @init: Perform platform-specific initialization magic. | ||
| 133 | * This is not not used by any of the basic clock types. | ||
| 134 | * Please consider other ways of solving initialization problems | ||
| 135 | * before using this callback, as its use is discouraged. | ||
| 136 | * | ||
| 131 | * @debug_init: Set up type-specific debugfs entries for this clock. This | 137 | * @debug_init: Set up type-specific debugfs entries for this clock. This |
| 132 | * is called once, after the debugfs directory entry for this | 138 | * is called once, after the debugfs directory entry for this |
| 133 | * clock has been created. The dentry pointer representing that | 139 | * clock has been created. The dentry pointer representing that |
| @@ -157,15 +163,15 @@ struct clk_ops { | |||
| 157 | void (*disable_unused)(struct clk_hw *hw); | 163 | void (*disable_unused)(struct clk_hw *hw); |
| 158 | unsigned long (*recalc_rate)(struct clk_hw *hw, | 164 | unsigned long (*recalc_rate)(struct clk_hw *hw, |
| 159 | unsigned long parent_rate); | 165 | unsigned long parent_rate); |
| 160 | long (*round_rate)(struct clk_hw *hw, unsigned long, | 166 | long (*round_rate)(struct clk_hw *hw, unsigned long rate, |
| 161 | unsigned long *); | 167 | unsigned long *parent_rate); |
| 162 | long (*determine_rate)(struct clk_hw *hw, unsigned long rate, | 168 | long (*determine_rate)(struct clk_hw *hw, unsigned long rate, |
| 163 | unsigned long *best_parent_rate, | 169 | unsigned long *best_parent_rate, |
| 164 | struct clk **best_parent_clk); | 170 | struct clk **best_parent_clk); |
| 165 | int (*set_parent)(struct clk_hw *hw, u8 index); | 171 | int (*set_parent)(struct clk_hw *hw, u8 index); |
| 166 | u8 (*get_parent)(struct clk_hw *hw); | 172 | u8 (*get_parent)(struct clk_hw *hw); |
| 167 | int (*set_rate)(struct clk_hw *hw, unsigned long, | 173 | int (*set_rate)(struct clk_hw *hw, unsigned long rate, |
| 168 | unsigned long); | 174 | unsigned long parent_rate); |
| 169 | int (*set_rate_and_parent)(struct clk_hw *hw, | 175 | int (*set_rate_and_parent)(struct clk_hw *hw, |
| 170 | unsigned long rate, | 176 | unsigned long rate, |
| 171 | unsigned long parent_rate, u8 index); | 177 | unsigned long parent_rate, u8 index); |
| @@ -254,12 +260,12 @@ void of_fixed_clk_setup(struct device_node *np); | |||
| 254 | * | 260 | * |
| 255 | * Flags: | 261 | * Flags: |
| 256 | * CLK_GATE_SET_TO_DISABLE - by default this clock sets the bit at bit_idx to | 262 | * CLK_GATE_SET_TO_DISABLE - by default this clock sets the bit at bit_idx to |
| 257 | * enable the clock. Setting this flag does the opposite: setting the bit | 263 | * enable the clock. Setting this flag does the opposite: setting the bit |
| 258 | * disable the clock and clearing it enables the clock | 264 | * disable the clock and clearing it enables the clock |
| 259 | * CLK_GATE_HIWORD_MASK - The gate settings are only in lower 16-bit | 265 | * CLK_GATE_HIWORD_MASK - The gate settings are only in lower 16-bit |
| 260 | * of this register, and mask of gate bits are in higher 16-bit of this | 266 | * of this register, and mask of gate bits are in higher 16-bit of this |
| 261 | * register. While setting the gate bits, higher 16-bit should also be | 267 | * register. While setting the gate bits, higher 16-bit should also be |
| 262 | * updated to indicate changing gate bits. | 268 | * updated to indicate changing gate bits. |
| 263 | */ | 269 | */ |
| 264 | struct clk_gate { | 270 | struct clk_gate { |
| 265 | struct clk_hw hw; | 271 | struct clk_hw hw; |
| @@ -298,20 +304,24 @@ struct clk_div_table { | |||
| 298 | * | 304 | * |
| 299 | * Flags: | 305 | * Flags: |
| 300 | * CLK_DIVIDER_ONE_BASED - by default the divisor is the value read from the | 306 | * CLK_DIVIDER_ONE_BASED - by default the divisor is the value read from the |
| 301 | * register plus one. If CLK_DIVIDER_ONE_BASED is set then the divider is | 307 | * register plus one. If CLK_DIVIDER_ONE_BASED is set then the divider is |
| 302 | * the raw value read from the register, with the value of zero considered | 308 | * the raw value read from the register, with the value of zero considered |
| 303 | * invalid, unless CLK_DIVIDER_ALLOW_ZERO is set. | 309 | * invalid, unless CLK_DIVIDER_ALLOW_ZERO is set. |
| 304 | * CLK_DIVIDER_POWER_OF_TWO - clock divisor is 2 raised to the value read from | 310 | * CLK_DIVIDER_POWER_OF_TWO - clock divisor is 2 raised to the value read from |
| 305 | * the hardware register | 311 | * the hardware register |
| 306 | * CLK_DIVIDER_ALLOW_ZERO - Allow zero divisors. For dividers which have | 312 | * CLK_DIVIDER_ALLOW_ZERO - Allow zero divisors. For dividers which have |
| 307 | * CLK_DIVIDER_ONE_BASED set, it is possible to end up with a zero divisor. | 313 | * CLK_DIVIDER_ONE_BASED set, it is possible to end up with a zero divisor. |
| 308 | * Some hardware implementations gracefully handle this case and allow a | 314 | * Some hardware implementations gracefully handle this case and allow a |
| 309 | * zero divisor by not modifying their input clock | 315 | * zero divisor by not modifying their input clock |
| 310 | * (divide by one / bypass). | 316 | * (divide by one / bypass). |
| 311 | * CLK_DIVIDER_HIWORD_MASK - The divider settings are only in lower 16-bit | 317 | * CLK_DIVIDER_HIWORD_MASK - The divider settings are only in lower 16-bit |
| 312 | * of this register, and mask of divider bits are in higher 16-bit of this | 318 | * of this register, and mask of divider bits are in higher 16-bit of this |
| 313 | * register. While setting the divider bits, higher 16-bit should also be | 319 | * register. While setting the divider bits, higher 16-bit should also be |
| 314 | * updated to indicate changing divider bits. | 320 | * updated to indicate changing divider bits. |
| 321 | * CLK_DIVIDER_ROUND_CLOSEST - Makes the best calculated divider to be rounded | ||
| 322 | * to the closest integer instead of the up one. | ||
| 323 | * CLK_DIVIDER_READ_ONLY - The divider settings are preconfigured and should | ||
| 324 | * not be changed by the clock framework. | ||
| 315 | */ | 325 | */ |
| 316 | struct clk_divider { | 326 | struct clk_divider { |
| 317 | struct clk_hw hw; | 327 | struct clk_hw hw; |
| @@ -327,8 +337,11 @@ struct clk_divider { | |||
| 327 | #define CLK_DIVIDER_POWER_OF_TWO BIT(1) | 337 | #define CLK_DIVIDER_POWER_OF_TWO BIT(1) |
| 328 | #define CLK_DIVIDER_ALLOW_ZERO BIT(2) | 338 | #define CLK_DIVIDER_ALLOW_ZERO BIT(2) |
| 329 | #define CLK_DIVIDER_HIWORD_MASK BIT(3) | 339 | #define CLK_DIVIDER_HIWORD_MASK BIT(3) |
| 340 | #define CLK_DIVIDER_ROUND_CLOSEST BIT(4) | ||
| 341 | #define CLK_DIVIDER_READ_ONLY BIT(5) | ||
| 330 | 342 | ||
| 331 | extern const struct clk_ops clk_divider_ops; | 343 | extern const struct clk_ops clk_divider_ops; |
| 344 | extern const struct clk_ops clk_divider_ro_ops; | ||
| 332 | struct clk *clk_register_divider(struct device *dev, const char *name, | 345 | struct clk *clk_register_divider(struct device *dev, const char *name, |
| 333 | const char *parent_name, unsigned long flags, | 346 | const char *parent_name, unsigned long flags, |
| 334 | void __iomem *reg, u8 shift, u8 width, | 347 | void __iomem *reg, u8 shift, u8 width, |
| @@ -356,9 +369,9 @@ struct clk *clk_register_divider_table(struct device *dev, const char *name, | |||
| 356 | * CLK_MUX_INDEX_ONE - register index starts at 1, not 0 | 369 | * CLK_MUX_INDEX_ONE - register index starts at 1, not 0 |
| 357 | * CLK_MUX_INDEX_BIT - register index is a single bit (power of two) | 370 | * CLK_MUX_INDEX_BIT - register index is a single bit (power of two) |
| 358 | * CLK_MUX_HIWORD_MASK - The mux settings are only in lower 16-bit of this | 371 | * CLK_MUX_HIWORD_MASK - The mux settings are only in lower 16-bit of this |
| 359 | * register, and mask of mux bits are in higher 16-bit of this register. | 372 | * register, and mask of mux bits are in higher 16-bit of this register. |
| 360 | * While setting the mux bits, higher 16-bit should also be updated to | 373 | * While setting the mux bits, higher 16-bit should also be updated to |
| 361 | * indicate changing mux bits. | 374 | * indicate changing mux bits. |
| 362 | */ | 375 | */ |
| 363 | struct clk_mux { | 376 | struct clk_mux { |
| 364 | struct clk_hw hw; | 377 | struct clk_hw hw; |
diff --git a/include/linux/clk/shmobile.h b/include/linux/clk/shmobile.h index f9bf080a1123..9f8a14041dd5 100644 --- a/include/linux/clk/shmobile.h +++ b/include/linux/clk/shmobile.h | |||
| @@ -1,7 +1,9 @@ | |||
| 1 | /* | 1 | /* |
| 2 | * Copyright 2013 Ideas On Board SPRL | 2 | * Copyright 2013 Ideas On Board SPRL |
| 3 | * Copyright 2013, 2014 Horms Solutions Ltd. | ||
| 3 | * | 4 | * |
| 4 | * Contact: Laurent Pinchart <laurent.pinchart@ideasonboard.com> | 5 | * Contact: Laurent Pinchart <laurent.pinchart@ideasonboard.com> |
| 6 | * Contact: Simon Horman <horms@verge.net.au> | ||
| 5 | * | 7 | * |
| 6 | * This program is free software; you can redistribute it and/or modify | 8 | * This program is free software; you can redistribute it and/or modify |
| 7 | * it under the terms of the GNU General Public License as published by | 9 | * it under the terms of the GNU General Public License as published by |
| @@ -14,6 +16,7 @@ | |||
| 14 | 16 | ||
| 15 | #include <linux/types.h> | 17 | #include <linux/types.h> |
| 16 | 18 | ||
| 19 | void r8a7779_clocks_init(u32 mode); | ||
| 17 | void rcar_gen2_clocks_init(u32 mode); | 20 | void rcar_gen2_clocks_init(u32 mode); |
| 18 | 21 | ||
| 19 | #endif | 22 | #endif |
diff --git a/include/linux/clk/sunxi.h b/include/linux/clk/sunxi.h new file mode 100644 index 000000000000..aed28c4451d9 --- /dev/null +++ b/include/linux/clk/sunxi.h | |||
| @@ -0,0 +1,22 @@ | |||
| 1 | /* | ||
| 2 | * Copyright 2013 - Hans de Goede <hdegoede@redhat.com> | ||
| 3 | * | ||
| 4 | * This program is free software; you can redistribute it and/or modify | ||
| 5 | * it under the terms of the GNU General Public License as published by | ||
| 6 | * the Free Software Foundation; either version 2 of the License, or | ||
| 7 | * (at your option) any later version. | ||
| 8 | * | ||
| 9 | * This program is distributed in the hope that it will be useful, | ||
| 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 12 | * GNU General Public License for more details. | ||
| 13 | */ | ||
| 14 | |||
| 15 | #ifndef __LINUX_CLK_SUNXI_H_ | ||
| 16 | #define __LINUX_CLK_SUNXI_H_ | ||
| 17 | |||
| 18 | #include <linux/clk.h> | ||
| 19 | |||
| 20 | void clk_sunxi_mmc_phase_control(struct clk *clk, u8 sample, u8 output); | ||
| 21 | |||
| 22 | #endif | ||
