linux/include/linux/clk-provider.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0 */
   2/*
   3 *  Copyright (c) 2010-2011 Jeremy Kerr <jeremy.kerr@canonical.com>
   4 *  Copyright (C) 2011-2012 Linaro Ltd <mturquette@linaro.org>
   5 */
   6#ifndef __LINUX_CLK_PROVIDER_H
   7#define __LINUX_CLK_PROVIDER_H
   8
   9#include <linux/of.h>
  10#include <linux/of_clk.h>
  11
  12/*
  13 * flags used across common struct clk.  these flags should only affect the
  14 * top-level framework.  custom flags for dealing with hardware specifics
  15 * belong in struct clk_foo
  16 *
  17 * Please update clk_flags[] in drivers/clk/clk.c when making changes here!
  18 */
  19#define CLK_SET_RATE_GATE       BIT(0) /* must be gated across rate change */
  20#define CLK_SET_PARENT_GATE     BIT(1) /* must be gated across re-parent */
  21#define CLK_SET_RATE_PARENT     BIT(2) /* propagate rate change up one level */
  22#define CLK_IGNORE_UNUSED       BIT(3) /* do not gate even if unused */
  23                                /* unused */
  24                                /* unused */
  25#define CLK_GET_RATE_NOCACHE    BIT(6) /* do not use the cached clk rate */
  26#define CLK_SET_RATE_NO_REPARENT BIT(7) /* don't re-parent on rate change */
  27#define CLK_GET_ACCURACY_NOCACHE BIT(8) /* do not use the cached clk accuracy */
  28#define CLK_RECALC_NEW_RATES    BIT(9) /* recalc rates after notifications */
  29#define CLK_SET_RATE_UNGATE     BIT(10) /* clock needs to run to set rate */
  30#define CLK_IS_CRITICAL         BIT(11) /* do not gate, ever */
  31/* parents need enable during gate/ungate, set rate and re-parent */
  32#define CLK_OPS_PARENT_ENABLE   BIT(12)
  33/* duty cycle call may be forwarded to the parent clock */
  34#define CLK_DUTY_CYCLE_PARENT   BIT(13)
  35
  36struct clk;
  37struct clk_hw;
  38struct clk_core;
  39struct dentry;
  40
  41/**
  42 * struct clk_rate_request - Structure encoding the clk constraints that
  43 * a clock user might require.
  44 *
  45 * @rate:               Requested clock rate. This field will be adjusted by
  46 *                      clock drivers according to hardware capabilities.
  47 * @min_rate:           Minimum rate imposed by clk users.
  48 * @max_rate:           Maximum rate imposed by clk users.
  49 * @best_parent_rate:   The best parent rate a parent can provide to fulfill the
  50 *                      requested constraints.
  51 * @best_parent_hw:     The most appropriate parent clock that fulfills the
  52 *                      requested constraints.
  53 *
  54 */
  55struct clk_rate_request {
  56        unsigned long rate;
  57        unsigned long min_rate;
  58        unsigned long max_rate;
  59        unsigned long best_parent_rate;
  60        struct clk_hw *best_parent_hw;
  61};
  62
  63/**
  64 * struct clk_duty - Struture encoding the duty cycle ratio of a clock
  65 *
  66 * @num:        Numerator of the duty cycle ratio
  67 * @den:        Denominator of the duty cycle ratio
  68 */
  69struct clk_duty {
  70        unsigned int num;
  71        unsigned int den;
  72};
  73
  74/**
  75 * struct clk_ops -  Callback operations for hardware clocks; these are to
  76 * be provided by the clock implementation, and will be called by drivers
  77 * through the clk_* api.
  78 *
  79 * @prepare:    Prepare the clock for enabling. This must not return until
  80 *              the clock is fully prepared, and it's safe to call clk_enable.
  81 *              This callback is intended to allow clock implementations to
  82 *              do any initialisation that may sleep. Called with
  83 *              prepare_lock held.
  84 *
  85 * @unprepare:  Release the clock from its prepared state. This will typically
  86 *              undo any work done in the @prepare callback. Called with
  87 *              prepare_lock held.
  88 *
  89 * @is_prepared: Queries the hardware to determine if the clock is prepared.
  90 *              This function is allowed to sleep. Optional, if this op is not
  91 *              set then the prepare count will be used.
  92 *
  93 * @unprepare_unused: Unprepare the clock atomically.  Only called from
  94 *              clk_disable_unused for prepare clocks with special needs.
  95 *              Called with prepare mutex held. This function may sleep.
  96 *
  97 * @enable:     Enable the clock atomically. This must not return until the
  98 *              clock is generating a valid clock signal, usable by consumer
  99 *              devices. Called with enable_lock held. This function must not
 100 *              sleep.
 101 *
 102 * @disable:    Disable the clock atomically. Called with enable_lock held.
 103 *              This function must not sleep.
 104 *
 105 * @is_enabled: Queries the hardware to determine if the clock is enabled.
 106 *              This function must not sleep. Optional, if this op is not
 107 *              set then the enable count will be used.
 108 *
 109 * @disable_unused: Disable the clock atomically.  Only called from
 110 *              clk_disable_unused for gate clocks with special needs.
 111 *              Called with enable_lock held.  This function must not
 112 *              sleep.
 113 *
 114 * @save_context: Save the context of the clock in prepration for poweroff.
 115 *
 116 * @restore_context: Restore the context of the clock after a restoration
 117 *              of power.
 118 *
 119 * @recalc_rate Recalculate the rate of this clock, by querying hardware. The
 120 *              parent rate is an input parameter.  It is up to the caller to
 121 *              ensure that the prepare_mutex is held across this call.
 122 *              Returns the calculated rate.  Optional, but recommended - if
 123 *              this op is not set then clock rate will be initialized to 0.
 124 *
 125 * @round_rate: Given a target rate as input, returns the closest rate actually
 126 *              supported by the clock. The parent rate is an input/output
 127 *              parameter.
 128 *
 129 * @determine_rate: Given a target rate as input, returns the closest rate
 130 *              actually supported by the clock, and optionally the parent clock
 131 *              that should be used to provide the clock rate.
 132 *
 133 * @set_parent: Change the input source of this clock; for clocks with multiple
 134 *              possible parents specify a new parent by passing in the index
 135 *              as a u8 corresponding to the parent in either the .parent_names
 136 *              or .parents arrays.  This function in affect translates an
 137 *              array index into the value programmed into the hardware.
 138 *              Returns 0 on success, -EERROR otherwise.
 139 *
 140 * @get_parent: Queries the hardware to determine the parent of a clock.  The
 141 *              return value is a u8 which specifies the index corresponding to
 142 *              the parent clock.  This index can be applied to either the
 143 *              .parent_names or .parents arrays.  In short, this function
 144 *              translates the parent value read from hardware into an array
 145 *              index.  Currently only called when the clock is initialized by
 146 *              __clk_init.  This callback is mandatory for clocks with
 147 *              multiple parents.  It is optional (and unnecessary) for clocks
 148 *              with 0 or 1 parents.
 149 *
 150 * @set_rate:   Change the rate of this clock. The requested rate is specified
 151 *              by the second argument, which should typically be the return
 152 *              of .round_rate call.  The third argument gives the parent rate
 153 *              which is likely helpful for most .set_rate implementation.
 154 *              Returns 0 on success, -EERROR otherwise.
 155 *
 156 * @set_rate_and_parent: Change the rate and the parent of this clock. The
 157 *              requested rate is specified by the second argument, which
 158 *              should typically be the return of .round_rate call.  The
 159 *              third argument gives the parent rate which is likely helpful
 160 *              for most .set_rate_and_parent implementation. The fourth
 161 *              argument gives the parent index. This callback is optional (and
 162 *              unnecessary) for clocks with 0 or 1 parents as well as
 163 *              for clocks that can tolerate switching the rate and the parent
 164 *              separately via calls to .set_parent and .set_rate.
 165 *              Returns 0 on success, -EERROR otherwise.
 166 *
 167 * @recalc_accuracy: Recalculate the accuracy of this clock. The clock accuracy
 168 *              is expressed in ppb (parts per billion). The parent accuracy is
 169 *              an input parameter.
 170 *              Returns the calculated accuracy.  Optional - if this op is not
 171 *              set then clock accuracy will be initialized to parent accuracy
 172 *              or 0 (perfect clock) if clock has no parent.
 173 *
 174 * @get_phase:  Queries the hardware to get the current phase of a clock.
 175 *              Returned values are 0-359 degrees on success, negative
 176 *              error codes on failure.
 177 *
 178 * @set_phase:  Shift the phase this clock signal in degrees specified
 179 *              by the second argument. Valid values for degrees are
 180 *              0-359. Return 0 on success, otherwise -EERROR.
 181 *
 182 * @get_duty_cycle: Queries the hardware to get the current duty cycle ratio
 183 *              of a clock. Returned values denominator cannot be 0 and must be
 184 *              superior or equal to the numerator.
 185 *
 186 * @set_duty_cycle: Apply the duty cycle ratio to this clock signal specified by
 187 *              the numerator (2nd argurment) and denominator (3rd  argument).
 188 *              Argument must be a valid ratio (denominator > 0
 189 *              and >= numerator) Return 0 on success, otherwise -EERROR.
 190 *
 191 * @init:       Perform platform-specific initialization magic.
 192 *              This is not not used by any of the basic clock types.
 193 *              Please consider other ways of solving initialization problems
 194 *              before using this callback, as its use is discouraged.
 195 *
 196 * @debug_init: Set up type-specific debugfs entries for this clock.  This
 197 *              is called once, after the debugfs directory entry for this
 198 *              clock has been created.  The dentry pointer representing that
 199 *              directory is provided as an argument.  Called with
 200 *              prepare_lock held.  Returns 0 on success, -EERROR otherwise.
 201 *
 202 *
 203 * The clk_enable/clk_disable and clk_prepare/clk_unprepare pairs allow
 204 * implementations to split any work between atomic (enable) and sleepable
 205 * (prepare) contexts.  If enabling a clock requires code that might sleep,
 206 * this must be done in clk_prepare.  Clock enable code that will never be
 207 * called in a sleepable context may be implemented in clk_enable.
 208 *
 209 * Typically, drivers will call clk_prepare when a clock may be needed later
 210 * (eg. when a device is opened), and clk_enable when the clock is actually
 211 * required (eg. from an interrupt). Note that clk_prepare MUST have been
 212 * called before clk_enable.
 213 */
 214struct clk_ops {
 215        int             (*prepare)(struct clk_hw *hw);
 216        void            (*unprepare)(struct clk_hw *hw);
 217        int             (*is_prepared)(struct clk_hw *hw);
 218        void            (*unprepare_unused)(struct clk_hw *hw);
 219        int             (*enable)(struct clk_hw *hw);
 220        void            (*disable)(struct clk_hw *hw);
 221        int             (*is_enabled)(struct clk_hw *hw);
 222        void            (*disable_unused)(struct clk_hw *hw);
 223        int             (*save_context)(struct clk_hw *hw);
 224        void            (*restore_context)(struct clk_hw *hw);
 225        unsigned long   (*recalc_rate)(struct clk_hw *hw,
 226                                        unsigned long parent_rate);
 227        long            (*round_rate)(struct clk_hw *hw, unsigned long rate,
 228                                        unsigned long *parent_rate);
 229        int             (*determine_rate)(struct clk_hw *hw,
 230                                          struct clk_rate_request *req);
 231        int             (*set_parent)(struct clk_hw *hw, u8 index);
 232        u8              (*get_parent)(struct clk_hw *hw);
 233        int             (*set_rate)(struct clk_hw *hw, unsigned long rate,
 234                                    unsigned long parent_rate);
 235        int             (*set_rate_and_parent)(struct clk_hw *hw,
 236                                    unsigned long rate,
 237                                    unsigned long parent_rate, u8 index);
 238        unsigned long   (*recalc_accuracy)(struct clk_hw *hw,
 239                                           unsigned long parent_accuracy);
 240        int             (*get_phase)(struct clk_hw *hw);
 241        int             (*set_phase)(struct clk_hw *hw, int degrees);
 242        int             (*get_duty_cycle)(struct clk_hw *hw,
 243                                          struct clk_duty *duty);
 244        int             (*set_duty_cycle)(struct clk_hw *hw,
 245                                          struct clk_duty *duty);
 246        void            (*init)(struct clk_hw *hw);
 247        void            (*debug_init)(struct clk_hw *hw, struct dentry *dentry);
 248};
 249
 250/**
 251 * struct clk_parent_data - clk parent information
 252 * @hw: parent clk_hw pointer (used for clk providers with internal clks)
 253 * @fw_name: parent name local to provider registering clk
 254 * @name: globally unique parent name (used as a fallback)
 255 * @index: parent index local to provider registering clk (if @fw_name absent)
 256 */
 257struct clk_parent_data {
 258        const struct clk_hw     *hw;
 259        const char              *fw_name;
 260        const char              *name;
 261        int                     index;
 262};
 263
 264/**
 265 * struct clk_init_data - holds init data that's common to all clocks and is
 266 * shared between the clock provider and the common clock framework.
 267 *
 268 * @name: clock name
 269 * @ops: operations this clock supports
 270 * @parent_names: array of string names for all possible parents
 271 * @parent_data: array of parent data for all possible parents (when some
 272 *               parents are external to the clk controller)
 273 * @parent_hws: array of pointers to all possible parents (when all parents
 274 *              are internal to the clk controller)
 275 * @num_parents: number of possible parents
 276 * @flags: framework-level hints and quirks
 277 */
 278struct clk_init_data {
 279        const char              *name;
 280        const struct clk_ops    *ops;
 281        /* Only one of the following three should be assigned */
 282        const char              * const *parent_names;
 283        const struct clk_parent_data    *parent_data;
 284        const struct clk_hw             **parent_hws;
 285        u8                      num_parents;
 286        unsigned long           flags;
 287};
 288
 289/**
 290 * struct clk_hw - handle for traversing from a struct clk to its corresponding
 291 * hardware-specific structure.  struct clk_hw should be declared within struct
 292 * clk_foo and then referenced by the struct clk instance that uses struct
 293 * clk_foo's clk_ops
 294 *
 295 * @core: pointer to the struct clk_core instance that points back to this
 296 * struct clk_hw instance
 297 *
 298 * @clk: pointer to the per-user struct clk instance that can be used to call
 299 * into the clk API
 300 *
 301 * @init: pointer to struct clk_init_data that contains the init data shared
 302 * with the common clock framework.
 303 */
 304struct clk_hw {
 305        struct clk_core *core;
 306        struct clk *clk;
 307        const struct clk_init_data *init;
 308};
 309
 310/*
 311 * DOC: Basic clock implementations common to many platforms
 312 *
 313 * Each basic clock hardware type is comprised of a structure describing the
 314 * clock hardware, implementations of the relevant callbacks in struct clk_ops,
 315 * unique flags for that hardware type, a registration function and an
 316 * alternative macro for static initialization
 317 */
 318
 319/**
 320 * struct clk_fixed_rate - fixed-rate clock
 321 * @hw:         handle between common and hardware-specific interfaces
 322 * @fixed_rate: constant frequency of clock
 323 */
 324struct clk_fixed_rate {
 325        struct          clk_hw hw;
 326        unsigned long   fixed_rate;
 327        unsigned long   fixed_accuracy;
 328};
 329
 330#define to_clk_fixed_rate(_hw) container_of(_hw, struct clk_fixed_rate, hw)
 331
 332extern const struct clk_ops clk_fixed_rate_ops;
 333struct clk *clk_register_fixed_rate(struct device *dev, const char *name,
 334                const char *parent_name, unsigned long flags,
 335                unsigned long fixed_rate);
 336struct clk_hw *clk_hw_register_fixed_rate(struct device *dev, const char *name,
 337                const char *parent_name, unsigned long flags,
 338                unsigned long fixed_rate);
 339struct clk *clk_register_fixed_rate_with_accuracy(struct device *dev,
 340                const char *name, const char *parent_name, unsigned long flags,
 341                unsigned long fixed_rate, unsigned long fixed_accuracy);
 342void clk_unregister_fixed_rate(struct clk *clk);
 343struct clk_hw *clk_hw_register_fixed_rate_with_accuracy(struct device *dev,
 344                const char *name, const char *parent_name, unsigned long flags,
 345                unsigned long fixed_rate, unsigned long fixed_accuracy);
 346void clk_hw_unregister_fixed_rate(struct clk_hw *hw);
 347
 348void of_fixed_clk_setup(struct device_node *np);
 349
 350/**
 351 * struct clk_gate - gating clock
 352 *
 353 * @hw:         handle between common and hardware-specific interfaces
 354 * @reg:        register controlling gate
 355 * @bit_idx:    single bit controlling gate
 356 * @flags:      hardware-specific flags
 357 * @lock:       register lock
 358 *
 359 * Clock which can gate its output.  Implements .enable & .disable
 360 *
 361 * Flags:
 362 * CLK_GATE_SET_TO_DISABLE - by default this clock sets the bit at bit_idx to
 363 *      enable the clock.  Setting this flag does the opposite: setting the bit
 364 *      disable the clock and clearing it enables the clock
 365 * CLK_GATE_HIWORD_MASK - The gate settings are only in lower 16-bit
 366 *      of this register, and mask of gate bits are in higher 16-bit of this
 367 *      register.  While setting the gate bits, higher 16-bit should also be
 368 *      updated to indicate changing gate bits.
 369 * CLK_GATE_BIG_ENDIAN - by default little endian register accesses are used for
 370 *      the gate register.  Setting this flag makes the register accesses big
 371 *      endian.
 372 */
 373struct clk_gate {
 374        struct clk_hw hw;
 375        void __iomem    *reg;
 376        u8              bit_idx;
 377        u8              flags;
 378        spinlock_t      *lock;
 379};
 380
 381#define to_clk_gate(_hw) container_of(_hw, struct clk_gate, hw)
 382
 383#define CLK_GATE_SET_TO_DISABLE         BIT(0)
 384#define CLK_GATE_HIWORD_MASK            BIT(1)
 385#define CLK_GATE_BIG_ENDIAN             BIT(2)
 386
 387extern const struct clk_ops clk_gate_ops;
 388struct clk *clk_register_gate(struct device *dev, const char *name,
 389                const char *parent_name, unsigned long flags,
 390                void __iomem *reg, u8 bit_idx,
 391                u8 clk_gate_flags, spinlock_t *lock);
 392struct clk_hw *clk_hw_register_gate(struct device *dev, const char *name,
 393                const char *parent_name, unsigned long flags,
 394                void __iomem *reg, u8 bit_idx,
 395                u8 clk_gate_flags, spinlock_t *lock);
 396void clk_unregister_gate(struct clk *clk);
 397void clk_hw_unregister_gate(struct clk_hw *hw);
 398int clk_gate_is_enabled(struct clk_hw *hw);
 399
 400struct clk_div_table {
 401        unsigned int    val;
 402        unsigned int    div;
 403};
 404
 405/**
 406 * struct clk_divider - adjustable divider clock
 407 *
 408 * @hw:         handle between common and hardware-specific interfaces
 409 * @reg:        register containing the divider
 410 * @shift:      shift to the divider bit field
 411 * @width:      width of the divider bit field
 412 * @table:      array of value/divider pairs, last entry should have div = 0
 413 * @lock:       register lock
 414 *
 415 * Clock with an adjustable divider affecting its output frequency.  Implements
 416 * .recalc_rate, .set_rate and .round_rate
 417 *
 418 * Flags:
 419 * CLK_DIVIDER_ONE_BASED - by default the divisor is the value read from the
 420 *      register plus one.  If CLK_DIVIDER_ONE_BASED is set then the divider is
 421 *      the raw value read from the register, with the value of zero considered
 422 *      invalid, unless CLK_DIVIDER_ALLOW_ZERO is set.
 423 * CLK_DIVIDER_POWER_OF_TWO - clock divisor is 2 raised to the value read from
 424 *      the hardware register
 425 * CLK_DIVIDER_ALLOW_ZERO - Allow zero divisors.  For dividers which have
 426 *      CLK_DIVIDER_ONE_BASED set, it is possible to end up with a zero divisor.
 427 *      Some hardware implementations gracefully handle this case and allow a
 428 *      zero divisor by not modifying their input clock
 429 *      (divide by one / bypass).
 430 * CLK_DIVIDER_HIWORD_MASK - The divider settings are only in lower 16-bit
 431 *      of this register, and mask of divider bits are in higher 16-bit of this
 432 *      register.  While setting the divider bits, higher 16-bit should also be
 433 *      updated to indicate changing divider bits.
 434 * CLK_DIVIDER_ROUND_CLOSEST - Makes the best calculated divider to be rounded
 435 *      to the closest integer instead of the up one.
 436 * CLK_DIVIDER_READ_ONLY - The divider settings are preconfigured and should
 437 *      not be changed by the clock framework.
 438 * CLK_DIVIDER_MAX_AT_ZERO - For dividers which are like CLK_DIVIDER_ONE_BASED
 439 *      except when the value read from the register is zero, the divisor is
 440 *      2^width of the field.
 441 * CLK_DIVIDER_BIG_ENDIAN - By default little endian register accesses are used
 442 *      for the divider register.  Setting this flag makes the register accesses
 443 *      big endian.
 444 */
 445struct clk_divider {
 446        struct clk_hw   hw;
 447        void __iomem    *reg;
 448        u8              shift;
 449        u8              width;
 450        u8              flags;
 451        const struct clk_div_table      *table;
 452        spinlock_t      *lock;
 453};
 454
 455#define clk_div_mask(width)     ((1 << (width)) - 1)
 456#define to_clk_divider(_hw) container_of(_hw, struct clk_divider, hw)
 457
 458#define CLK_DIVIDER_ONE_BASED           BIT(0)
 459#define CLK_DIVIDER_POWER_OF_TWO        BIT(1)
 460#define CLK_DIVIDER_ALLOW_ZERO          BIT(2)
 461#define CLK_DIVIDER_HIWORD_MASK         BIT(3)
 462#define CLK_DIVIDER_ROUND_CLOSEST       BIT(4)
 463#define CLK_DIVIDER_READ_ONLY           BIT(5)
 464#define CLK_DIVIDER_MAX_AT_ZERO         BIT(6)
 465#define CLK_DIVIDER_BIG_ENDIAN          BIT(7)
 466
 467extern const struct clk_ops clk_divider_ops;
 468extern const struct clk_ops clk_divider_ro_ops;
 469
 470unsigned long divider_recalc_rate(struct clk_hw *hw, unsigned long parent_rate,
 471                unsigned int val, const struct clk_div_table *table,
 472                unsigned long flags, unsigned long width);
 473long divider_round_rate_parent(struct clk_hw *hw, struct clk_hw *parent,
 474                               unsigned long rate, unsigned long *prate,
 475                               const struct clk_div_table *table,
 476                               u8 width, unsigned long flags);
 477long divider_ro_round_rate_parent(struct clk_hw *hw, struct clk_hw *parent,
 478                                  unsigned long rate, unsigned long *prate,
 479                                  const struct clk_div_table *table, u8 width,
 480                                  unsigned long flags, unsigned int val);
 481int divider_get_val(unsigned long rate, unsigned long parent_rate,
 482                const struct clk_div_table *table, u8 width,
 483                unsigned long flags);
 484
 485struct clk *clk_register_divider(struct device *dev, const char *name,
 486                const char *parent_name, unsigned long flags,
 487                void __iomem *reg, u8 shift, u8 width,
 488                u8 clk_divider_flags, spinlock_t *lock);
 489struct clk_hw *clk_hw_register_divider(struct device *dev, const char *name,
 490                const char *parent_name, unsigned long flags,
 491                void __iomem *reg, u8 shift, u8 width,
 492                u8 clk_divider_flags, spinlock_t *lock);
 493struct clk *clk_register_divider_table(struct device *dev, const char *name,
 494                const char *parent_name, unsigned long flags,
 495                void __iomem *reg, u8 shift, u8 width,
 496                u8 clk_divider_flags, const struct clk_div_table *table,
 497                spinlock_t *lock);
 498struct clk_hw *clk_hw_register_divider_table(struct device *dev,
 499                const char *name, const char *parent_name, unsigned long flags,
 500                void __iomem *reg, u8 shift, u8 width,
 501                u8 clk_divider_flags, const struct clk_div_table *table,
 502                spinlock_t *lock);
 503void clk_unregister_divider(struct clk *clk);
 504void clk_hw_unregister_divider(struct clk_hw *hw);
 505
 506/**
 507 * struct clk_mux - multiplexer clock
 508 *
 509 * @hw:         handle between common and hardware-specific interfaces
 510 * @reg:        register controlling multiplexer
 511 * @table:      array of register values corresponding to the parent index
 512 * @shift:      shift to multiplexer bit field
 513 * @mask:       mask of mutliplexer bit field
 514 * @flags:      hardware-specific flags
 515 * @lock:       register lock
 516 *
 517 * Clock with multiple selectable parents.  Implements .get_parent, .set_parent
 518 * and .recalc_rate
 519 *
 520 * Flags:
 521 * CLK_MUX_INDEX_ONE - register index starts at 1, not 0
 522 * CLK_MUX_INDEX_BIT - register index is a single bit (power of two)
 523 * CLK_MUX_HIWORD_MASK - The mux settings are only in lower 16-bit of this
 524 *      register, and mask of mux bits are in higher 16-bit of this register.
 525 *      While setting the mux bits, higher 16-bit should also be updated to
 526 *      indicate changing mux bits.
 527 * CLK_MUX_READ_ONLY - The mux registers can't be written, only read in the
 528 *      .get_parent clk_op.
 529 * CLK_MUX_ROUND_CLOSEST - Use the parent rate that is closest to the desired
 530 *      frequency.
 531 * CLK_MUX_BIG_ENDIAN - By default little endian register accesses are used for
 532 *      the mux register.  Setting this flag makes the register accesses big
 533 *      endian.
 534 */
 535struct clk_mux {
 536        struct clk_hw   hw;
 537        void __iomem    *reg;
 538        u32             *table;
 539        u32             mask;
 540        u8              shift;
 541        u8              flags;
 542        spinlock_t      *lock;
 543};
 544
 545#define to_clk_mux(_hw) container_of(_hw, struct clk_mux, hw)
 546
 547#define CLK_MUX_INDEX_ONE               BIT(0)
 548#define CLK_MUX_INDEX_BIT               BIT(1)
 549#define CLK_MUX_HIWORD_MASK             BIT(2)
 550#define CLK_MUX_READ_ONLY               BIT(3) /* mux can't be changed */
 551#define CLK_MUX_ROUND_CLOSEST           BIT(4)
 552#define CLK_MUX_BIG_ENDIAN              BIT(5)
 553
 554extern const struct clk_ops clk_mux_ops;
 555extern const struct clk_ops clk_mux_ro_ops;
 556
 557struct clk *clk_register_mux(struct device *dev, const char *name,
 558                const char * const *parent_names, u8 num_parents,
 559                unsigned long flags,
 560                void __iomem *reg, u8 shift, u8 width,
 561                u8 clk_mux_flags, spinlock_t *lock);
 562struct clk_hw *clk_hw_register_mux(struct device *dev, const char *name,
 563                const char * const *parent_names, u8 num_parents,
 564                unsigned long flags,
 565                void __iomem *reg, u8 shift, u8 width,
 566                u8 clk_mux_flags, spinlock_t *lock);
 567
 568struct clk *clk_register_mux_table(struct device *dev, const char *name,
 569                const char * const *parent_names, u8 num_parents,
 570                unsigned long flags,
 571                void __iomem *reg, u8 shift, u32 mask,
 572                u8 clk_mux_flags, u32 *table, spinlock_t *lock);
 573struct clk_hw *clk_hw_register_mux_table(struct device *dev, const char *name,
 574                const char * const *parent_names, u8 num_parents,
 575                unsigned long flags,
 576                void __iomem *reg, u8 shift, u32 mask,
 577                u8 clk_mux_flags, u32 *table, spinlock_t *lock);
 578
 579int clk_mux_val_to_index(struct clk_hw *hw, u32 *table, unsigned int flags,
 580                         unsigned int val);
 581unsigned int clk_mux_index_to_val(u32 *table, unsigned int flags, u8 index);
 582
 583void clk_unregister_mux(struct clk *clk);
 584void clk_hw_unregister_mux(struct clk_hw *hw);
 585
 586void of_fixed_factor_clk_setup(struct device_node *node);
 587
 588/**
 589 * struct clk_fixed_factor - fixed multiplier and divider clock
 590 *
 591 * @hw:         handle between common and hardware-specific interfaces
 592 * @mult:       multiplier
 593 * @div:        divider
 594 *
 595 * Clock with a fixed multiplier and divider. The output frequency is the
 596 * parent clock rate divided by div and multiplied by mult.
 597 * Implements .recalc_rate, .set_rate and .round_rate
 598 */
 599
 600struct clk_fixed_factor {
 601        struct clk_hw   hw;
 602        unsigned int    mult;
 603        unsigned int    div;
 604};
 605
 606#define to_clk_fixed_factor(_hw) container_of(_hw, struct clk_fixed_factor, hw)
 607
 608extern const struct clk_ops clk_fixed_factor_ops;
 609struct clk *clk_register_fixed_factor(struct device *dev, const char *name,
 610                const char *parent_name, unsigned long flags,
 611                unsigned int mult, unsigned int div);
 612void clk_unregister_fixed_factor(struct clk *clk);
 613struct clk_hw *clk_hw_register_fixed_factor(struct device *dev,
 614                const char *name, const char *parent_name, unsigned long flags,
 615                unsigned int mult, unsigned int div);
 616void clk_hw_unregister_fixed_factor(struct clk_hw *hw);
 617
 618/**
 619 * struct clk_fractional_divider - adjustable fractional divider clock
 620 *
 621 * @hw:         handle between common and hardware-specific interfaces
 622 * @reg:        register containing the divider
 623 * @mshift:     shift to the numerator bit field
 624 * @mwidth:     width of the numerator bit field
 625 * @nshift:     shift to the denominator bit field
 626 * @nwidth:     width of the denominator bit field
 627 * @lock:       register lock
 628 *
 629 * Clock with adjustable fractional divider affecting its output frequency.
 630 *
 631 * Flags:
 632 * CLK_FRAC_DIVIDER_ZERO_BASED - by default the numerator and denominator
 633 *      is the value read from the register. If CLK_FRAC_DIVIDER_ZERO_BASED
 634 *      is set then the numerator and denominator are both the value read
 635 *      plus one.
 636 * CLK_FRAC_DIVIDER_BIG_ENDIAN - By default little endian register accesses are
 637 *      used for the divider register.  Setting this flag makes the register
 638 *      accesses big endian.
 639 */
 640struct clk_fractional_divider {
 641        struct clk_hw   hw;
 642        void __iomem    *reg;
 643        u8              mshift;
 644        u8              mwidth;
 645        u32             mmask;
 646        u8              nshift;
 647        u8              nwidth;
 648        u32             nmask;
 649        u8              flags;
 650        void            (*approximation)(struct clk_hw *hw,
 651                                unsigned long rate, unsigned long *parent_rate,
 652                                unsigned long *m, unsigned long *n);
 653        spinlock_t      *lock;
 654};
 655
 656#define to_clk_fd(_hw) container_of(_hw, struct clk_fractional_divider, hw)
 657
 658#define CLK_FRAC_DIVIDER_ZERO_BASED             BIT(0)
 659#define CLK_FRAC_DIVIDER_BIG_ENDIAN             BIT(1)
 660
 661extern const struct clk_ops clk_fractional_divider_ops;
 662struct clk *clk_register_fractional_divider(struct device *dev,
 663                const char *name, const char *parent_name, unsigned long flags,
 664                void __iomem *reg, u8 mshift, u8 mwidth, u8 nshift, u8 nwidth,
 665                u8 clk_divider_flags, spinlock_t *lock);
 666struct clk_hw *clk_hw_register_fractional_divider(struct device *dev,
 667                const char *name, const char *parent_name, unsigned long flags,
 668                void __iomem *reg, u8 mshift, u8 mwidth, u8 nshift, u8 nwidth,
 669                u8 clk_divider_flags, spinlock_t *lock);
 670void clk_hw_unregister_fractional_divider(struct clk_hw *hw);
 671
 672/**
 673 * struct clk_multiplier - adjustable multiplier clock
 674 *
 675 * @hw:         handle between common and hardware-specific interfaces
 676 * @reg:        register containing the multiplier
 677 * @shift:      shift to the multiplier bit field
 678 * @width:      width of the multiplier bit field
 679 * @lock:       register lock
 680 *
 681 * Clock with an adjustable multiplier affecting its output frequency.
 682 * Implements .recalc_rate, .set_rate and .round_rate
 683 *
 684 * Flags:
 685 * CLK_MULTIPLIER_ZERO_BYPASS - By default, the multiplier is the value read
 686 *      from the register, with 0 being a valid value effectively
 687 *      zeroing the output clock rate. If CLK_MULTIPLIER_ZERO_BYPASS is
 688 *      set, then a null multiplier will be considered as a bypass,
 689 *      leaving the parent rate unmodified.
 690 * CLK_MULTIPLIER_ROUND_CLOSEST - Makes the best calculated divider to be
 691 *      rounded to the closest integer instead of the down one.
 692 * CLK_MULTIPLIER_BIG_ENDIAN - By default little endian register accesses are
 693 *      used for the multiplier register.  Setting this flag makes the register
 694 *      accesses big endian.
 695 */
 696struct clk_multiplier {
 697        struct clk_hw   hw;
 698        void __iomem    *reg;
 699        u8              shift;
 700        u8              width;
 701        u8              flags;
 702        spinlock_t      *lock;
 703};
 704
 705#define to_clk_multiplier(_hw) container_of(_hw, struct clk_multiplier, hw)
 706
 707#define CLK_MULTIPLIER_ZERO_BYPASS              BIT(0)
 708#define CLK_MULTIPLIER_ROUND_CLOSEST    BIT(1)
 709#define CLK_MULTIPLIER_BIG_ENDIAN               BIT(2)
 710
 711extern const struct clk_ops clk_multiplier_ops;
 712
 713/***
 714 * struct clk_composite - aggregate clock of mux, divider and gate clocks
 715 *
 716 * @hw:         handle between common and hardware-specific interfaces
 717 * @mux_hw:     handle between composite and hardware-specific mux clock
 718 * @rate_hw:    handle between composite and hardware-specific rate clock
 719 * @gate_hw:    handle between composite and hardware-specific gate clock
 720 * @mux_ops:    clock ops for mux
 721 * @rate_ops:   clock ops for rate
 722 * @gate_ops:   clock ops for gate
 723 */
 724struct clk_composite {
 725        struct clk_hw   hw;
 726        struct clk_ops  ops;
 727
 728        struct clk_hw   *mux_hw;
 729        struct clk_hw   *rate_hw;
 730        struct clk_hw   *gate_hw;
 731
 732        const struct clk_ops    *mux_ops;
 733        const struct clk_ops    *rate_ops;
 734        const struct clk_ops    *gate_ops;
 735};
 736
 737#define to_clk_composite(_hw) container_of(_hw, struct clk_composite, hw)
 738
 739struct clk *clk_register_composite(struct device *dev, const char *name,
 740                const char * const *parent_names, int num_parents,
 741                struct clk_hw *mux_hw, const struct clk_ops *mux_ops,
 742                struct clk_hw *rate_hw, const struct clk_ops *rate_ops,
 743                struct clk_hw *gate_hw, const struct clk_ops *gate_ops,
 744                unsigned long flags);
 745void clk_unregister_composite(struct clk *clk);
 746struct clk_hw *clk_hw_register_composite(struct device *dev, const char *name,
 747                const char * const *parent_names, int num_parents,
 748                struct clk_hw *mux_hw, const struct clk_ops *mux_ops,
 749                struct clk_hw *rate_hw, const struct clk_ops *rate_ops,
 750                struct clk_hw *gate_hw, const struct clk_ops *gate_ops,
 751                unsigned long flags);
 752void clk_hw_unregister_composite(struct clk_hw *hw);
 753
 754/**
 755 * struct clk_gpio - gpio gated clock
 756 *
 757 * @hw:         handle between common and hardware-specific interfaces
 758 * @gpiod:      gpio descriptor
 759 *
 760 * Clock with a gpio control for enabling and disabling the parent clock
 761 * or switching between two parents by asserting or deasserting the gpio.
 762 *
 763 * Implements .enable, .disable and .is_enabled or
 764 * .get_parent, .set_parent and .determine_rate depending on which clk_ops
 765 * is used.
 766 */
 767struct clk_gpio {
 768        struct clk_hw   hw;
 769        struct gpio_desc *gpiod;
 770};
 771
 772#define to_clk_gpio(_hw) container_of(_hw, struct clk_gpio, hw)
 773
 774extern const struct clk_ops clk_gpio_gate_ops;
 775struct clk *clk_register_gpio_gate(struct device *dev, const char *name,
 776                const char *parent_name, struct gpio_desc *gpiod,
 777                unsigned long flags);
 778struct clk_hw *clk_hw_register_gpio_gate(struct device *dev, const char *name,
 779                const char *parent_name, struct gpio_desc *gpiod,
 780                unsigned long flags);
 781void clk_hw_unregister_gpio_gate(struct clk_hw *hw);
 782
 783extern const struct clk_ops clk_gpio_mux_ops;
 784struct clk *clk_register_gpio_mux(struct device *dev, const char *name,
 785                const char * const *parent_names, u8 num_parents, struct gpio_desc *gpiod,
 786                unsigned long flags);
 787struct clk_hw *clk_hw_register_gpio_mux(struct device *dev, const char *name,
 788                const char * const *parent_names, u8 num_parents, struct gpio_desc *gpiod,
 789                unsigned long flags);
 790void clk_hw_unregister_gpio_mux(struct clk_hw *hw);
 791
 792struct clk *clk_register(struct device *dev, struct clk_hw *hw);
 793struct clk *devm_clk_register(struct device *dev, struct clk_hw *hw);
 794
 795int __must_check clk_hw_register(struct device *dev, struct clk_hw *hw);
 796int __must_check devm_clk_hw_register(struct device *dev, struct clk_hw *hw);
 797int __must_check of_clk_hw_register(struct device_node *node, struct clk_hw *hw);
 798
 799void clk_unregister(struct clk *clk);
 800void devm_clk_unregister(struct device *dev, struct clk *clk);
 801
 802void clk_hw_unregister(struct clk_hw *hw);
 803void devm_clk_hw_unregister(struct device *dev, struct clk_hw *hw);
 804
 805/* helper functions */
 806const char *__clk_get_name(const struct clk *clk);
 807const char *clk_hw_get_name(const struct clk_hw *hw);
 808#ifdef CONFIG_COMMON_CLK
 809struct clk_hw *__clk_get_hw(struct clk *clk);
 810#else
 811static inline struct clk_hw *__clk_get_hw(struct clk *clk)
 812{
 813        return (struct clk_hw *)clk;
 814}
 815#endif
 816unsigned int clk_hw_get_num_parents(const struct clk_hw *hw);
 817struct clk_hw *clk_hw_get_parent(const struct clk_hw *hw);
 818struct clk_hw *clk_hw_get_parent_by_index(const struct clk_hw *hw,
 819                                          unsigned int index);
 820unsigned int __clk_get_enable_count(struct clk *clk);
 821unsigned long clk_hw_get_rate(const struct clk_hw *hw);
 822unsigned long __clk_get_flags(struct clk *clk);
 823unsigned long clk_hw_get_flags(const struct clk_hw *hw);
 824#define clk_hw_can_set_rate_parent(hw) \
 825        (clk_hw_get_flags((hw)) & CLK_SET_RATE_PARENT)
 826
 827bool clk_hw_is_prepared(const struct clk_hw *hw);
 828bool clk_hw_rate_is_protected(const struct clk_hw *hw);
 829bool clk_hw_is_enabled(const struct clk_hw *hw);
 830bool __clk_is_enabled(struct clk *clk);
 831struct clk *__clk_lookup(const char *name);
 832int __clk_mux_determine_rate(struct clk_hw *hw,
 833                             struct clk_rate_request *req);
 834int __clk_determine_rate(struct clk_hw *core, struct clk_rate_request *req);
 835int __clk_mux_determine_rate_closest(struct clk_hw *hw,
 836                                     struct clk_rate_request *req);
 837int clk_mux_determine_rate_flags(struct clk_hw *hw,
 838                                 struct clk_rate_request *req,
 839                                 unsigned long flags);
 840void clk_hw_reparent(struct clk_hw *hw, struct clk_hw *new_parent);
 841void clk_hw_set_rate_range(struct clk_hw *hw, unsigned long min_rate,
 842                           unsigned long max_rate);
 843
 844static inline void __clk_hw_set_clk(struct clk_hw *dst, struct clk_hw *src)
 845{
 846        dst->clk = src->clk;
 847        dst->core = src->core;
 848}
 849
 850static inline long divider_round_rate(struct clk_hw *hw, unsigned long rate,
 851                                      unsigned long *prate,
 852                                      const struct clk_div_table *table,
 853                                      u8 width, unsigned long flags)
 854{
 855        return divider_round_rate_parent(hw, clk_hw_get_parent(hw),
 856                                         rate, prate, table, width, flags);
 857}
 858
 859static inline long divider_ro_round_rate(struct clk_hw *hw, unsigned long rate,
 860                                         unsigned long *prate,
 861                                         const struct clk_div_table *table,
 862                                         u8 width, unsigned long flags,
 863                                         unsigned int val)
 864{
 865        return divider_ro_round_rate_parent(hw, clk_hw_get_parent(hw),
 866                                            rate, prate, table, width, flags,
 867                                            val);
 868}
 869
 870/*
 871 * FIXME clock api without lock protection
 872 */
 873unsigned long clk_hw_round_rate(struct clk_hw *hw, unsigned long rate);
 874
 875struct clk_onecell_data {
 876        struct clk **clks;
 877        unsigned int clk_num;
 878};
 879
 880struct clk_hw_onecell_data {
 881        unsigned int num;
 882        struct clk_hw *hws[];
 883};
 884
 885#define CLK_OF_DECLARE(name, compat, fn) OF_DECLARE_1(clk, name, compat, fn)
 886
 887/*
 888 * Use this macro when you have a driver that requires two initialization
 889 * routines, one at of_clk_init(), and one at platform device probe
 890 */
 891#define CLK_OF_DECLARE_DRIVER(name, compat, fn) \
 892        static void __init name##_of_clk_init_driver(struct device_node *np) \
 893        {                                                               \
 894                of_node_clear_flag(np, OF_POPULATED);                   \
 895                fn(np);                                                 \
 896        }                                                               \
 897        OF_DECLARE_1(clk, name, compat, name##_of_clk_init_driver)
 898
 899#define CLK_HW_INIT(_name, _parent, _ops, _flags)               \
 900        (&(struct clk_init_data) {                              \
 901                .flags          = _flags,                       \
 902                .name           = _name,                        \
 903                .parent_names   = (const char *[]) { _parent }, \
 904                .num_parents    = 1,                            \
 905                .ops            = _ops,                         \
 906        })
 907
 908#define CLK_HW_INIT_HW(_name, _parent, _ops, _flags)                    \
 909        (&(struct clk_init_data) {                                      \
 910                .flags          = _flags,                               \
 911                .name           = _name,                                \
 912                .parent_hws     = (const struct clk_hw*[]) { _parent }, \
 913                .num_parents    = 1,                                    \
 914                .ops            = _ops,                                 \
 915        })
 916
 917/*
 918 * This macro is intended for drivers to be able to share the otherwise
 919 * individual struct clk_hw[] compound literals created by the compiler
 920 * when using CLK_HW_INIT_HW. It does NOT support multiple parents.
 921 */
 922#define CLK_HW_INIT_HWS(_name, _parent, _ops, _flags)                   \
 923        (&(struct clk_init_data) {                                      \
 924                .flags          = _flags,                               \
 925                .name           = _name,                                \
 926                .parent_hws     = _parent,                              \
 927                .num_parents    = 1,                                    \
 928                .ops            = _ops,                                 \
 929        })
 930
 931#define CLK_HW_INIT_FW_NAME(_name, _parent, _ops, _flags)               \
 932        (&(struct clk_init_data) {                                      \
 933                .flags          = _flags,                               \
 934                .name           = _name,                                \
 935                .parent_data    = (const struct clk_parent_data[]) {    \
 936                                        { .fw_name = _parent },         \
 937                                  },                                    \
 938                .num_parents    = 1,                                    \
 939                .ops            = _ops,                                 \
 940        })
 941
 942#define CLK_HW_INIT_PARENTS(_name, _parents, _ops, _flags)      \
 943        (&(struct clk_init_data) {                              \
 944                .flags          = _flags,                       \
 945                .name           = _name,                        \
 946                .parent_names   = _parents,                     \
 947                .num_parents    = ARRAY_SIZE(_parents),         \
 948                .ops            = _ops,                         \
 949        })
 950
 951#define CLK_HW_INIT_PARENTS_HW(_name, _parents, _ops, _flags)   \
 952        (&(struct clk_init_data) {                              \
 953                .flags          = _flags,                       \
 954                .name           = _name,                        \
 955                .parent_hws     = _parents,                     \
 956                .num_parents    = ARRAY_SIZE(_parents),         \
 957                .ops            = _ops,                         \
 958        })
 959
 960#define CLK_HW_INIT_PARENTS_DATA(_name, _parents, _ops, _flags) \
 961        (&(struct clk_init_data) {                              \
 962                .flags          = _flags,                       \
 963                .name           = _name,                        \
 964                .parent_data    = _parents,                     \
 965                .num_parents    = ARRAY_SIZE(_parents),         \
 966                .ops            = _ops,                         \
 967        })
 968
 969#define CLK_HW_INIT_NO_PARENT(_name, _ops, _flags)      \
 970        (&(struct clk_init_data) {                      \
 971                .flags          = _flags,               \
 972                .name           = _name,                \
 973                .parent_names   = NULL,                 \
 974                .num_parents    = 0,                    \
 975                .ops            = _ops,                 \
 976        })
 977
 978#define CLK_FIXED_FACTOR(_struct, _name, _parent,                       \
 979                        _div, _mult, _flags)                            \
 980        struct clk_fixed_factor _struct = {                             \
 981                .div            = _div,                                 \
 982                .mult           = _mult,                                \
 983                .hw.init        = CLK_HW_INIT(_name,                    \
 984                                              _parent,                  \
 985                                              &clk_fixed_factor_ops,    \
 986                                              _flags),                  \
 987        }
 988
 989#define CLK_FIXED_FACTOR_HW(_struct, _name, _parent,                    \
 990                            _div, _mult, _flags)                        \
 991        struct clk_fixed_factor _struct = {                             \
 992                .div            = _div,                                 \
 993                .mult           = _mult,                                \
 994                .hw.init        = CLK_HW_INIT_HW(_name,                 \
 995                                                 _parent,               \
 996                                                 &clk_fixed_factor_ops, \
 997                                                 _flags),               \
 998        }
 999
1000/*
1001 * This macro allows the driver to reuse the _parent array for multiple
1002 * fixed factor clk declarations.
1003 */
1004#define CLK_FIXED_FACTOR_HWS(_struct, _name, _parent,                   \
1005                             _div, _mult, _flags)                       \
1006        struct clk_fixed_factor _struct = {                             \
1007                .div            = _div,                                 \
1008                .mult           = _mult,                                \
1009                .hw.init        = CLK_HW_INIT_HWS(_name,                \
1010                                                  _parent,              \
1011                                                  &clk_fixed_factor_ops, \
1012                                                  _flags),      \
1013        }
1014
1015#define CLK_FIXED_FACTOR_FW_NAME(_struct, _name, _parent,               \
1016                                 _div, _mult, _flags)                   \
1017        struct clk_fixed_factor _struct = {                             \
1018                .div            = _div,                                 \
1019                .mult           = _mult,                                \
1020                .hw.init        = CLK_HW_INIT_FW_NAME(_name,            \
1021                                                      _parent,          \
1022                                                      &clk_fixed_factor_ops, \
1023                                                      _flags),          \
1024        }
1025
1026#ifdef CONFIG_OF
1027int of_clk_add_provider(struct device_node *np,
1028                        struct clk *(*clk_src_get)(struct of_phandle_args *args,
1029                                                   void *data),
1030                        void *data);
1031int of_clk_add_hw_provider(struct device_node *np,
1032                           struct clk_hw *(*get)(struct of_phandle_args *clkspec,
1033                                                 void *data),
1034                           void *data);
1035int devm_of_clk_add_hw_provider(struct device *dev,
1036                           struct clk_hw *(*get)(struct of_phandle_args *clkspec,
1037                                                 void *data),
1038                           void *data);
1039void of_clk_del_provider(struct device_node *np);
1040void devm_of_clk_del_provider(struct device *dev);
1041struct clk *of_clk_src_simple_get(struct of_phandle_args *clkspec,
1042                                  void *data);
1043struct clk_hw *of_clk_hw_simple_get(struct of_phandle_args *clkspec,
1044                                    void *data);
1045struct clk *of_clk_src_onecell_get(struct of_phandle_args *clkspec, void *data);
1046struct clk_hw *of_clk_hw_onecell_get(struct of_phandle_args *clkspec,
1047                                     void *data);
1048int of_clk_parent_fill(struct device_node *np, const char **parents,
1049                       unsigned int size);
1050int of_clk_detect_critical(struct device_node *np, int index,
1051                            unsigned long *flags);
1052
1053#else /* !CONFIG_OF */
1054
1055static inline int of_clk_add_provider(struct device_node *np,
1056                        struct clk *(*clk_src_get)(struct of_phandle_args *args,
1057                                                   void *data),
1058                        void *data)
1059{
1060        return 0;
1061}
1062static inline int of_clk_add_hw_provider(struct device_node *np,
1063                        struct clk_hw *(*get)(struct of_phandle_args *clkspec,
1064                                              void *data),
1065                        void *data)
1066{
1067        return 0;
1068}
1069static inline int devm_of_clk_add_hw_provider(struct device *dev,
1070                           struct clk_hw *(*get)(struct of_phandle_args *clkspec,
1071                                                 void *data),
1072                           void *data)
1073{
1074        return 0;
1075}
1076static inline void of_clk_del_provider(struct device_node *np) {}
1077static inline void devm_of_clk_del_provider(struct device *dev) {}
1078static inline struct clk *of_clk_src_simple_get(
1079        struct of_phandle_args *clkspec, void *data)
1080{
1081        return ERR_PTR(-ENOENT);
1082}
1083static inline struct clk_hw *
1084of_clk_hw_simple_get(struct of_phandle_args *clkspec, void *data)
1085{
1086        return ERR_PTR(-ENOENT);
1087}
1088static inline struct clk *of_clk_src_onecell_get(
1089        struct of_phandle_args *clkspec, void *data)
1090{
1091        return ERR_PTR(-ENOENT);
1092}
1093static inline struct clk_hw *
1094of_clk_hw_onecell_get(struct of_phandle_args *clkspec, void *data)
1095{
1096        return ERR_PTR(-ENOENT);
1097}
1098static inline int of_clk_parent_fill(struct device_node *np,
1099                                     const char **parents, unsigned int size)
1100{
1101        return 0;
1102}
1103static inline int of_clk_detect_critical(struct device_node *np, int index,
1104                                          unsigned long *flags)
1105{
1106        return 0;
1107}
1108#endif /* CONFIG_OF */
1109
1110void clk_gate_restore_context(struct clk_hw *hw);
1111
1112#endif /* CLK_PROVIDER_H */
1113