blob: 34217a219fe02e4d0df969c2be24779c01dfbcb1 [file] [log] [blame]
Mike Turquetteb24764902012-03-15 23:11:19 -07001/*
2 * linux/include/linux/clk-provider.h
3 *
4 * Copyright (c) 2010-2011 Jeremy Kerr <jeremy.kerr@canonical.com>
5 * Copyright (C) 2011-2012 Linaro Ltd <mturquette@linaro.org>
6 *
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License version 2 as
9 * published by the Free Software Foundation.
10 */
11#ifndef __LINUX_CLK_PROVIDER_H
12#define __LINUX_CLK_PROVIDER_H
13
Gerhard Sittigaa514ce2013-07-22 14:14:40 +020014#include <linux/io.h>
Maxime Ripard355bb162014-08-30 21:18:00 +020015#include <linux/of.h>
Geert Uytterhoeveneb06d6b2018-04-18 16:50:01 +020016#include <linux/of_clk.h>
Stephen Boydf3494852016-05-16 11:05:16 +053017#include <linux/mutex.h>
Mike Turquetteb24764902012-03-15 23:11:19 -070018
19#ifdef CONFIG_COMMON_CLK
20
Mike Turquetteb24764902012-03-15 23:11:19 -070021/*
22 * flags used across common struct clk. these flags should only affect the
23 * top-level framework. custom flags for dealing with hardware specifics
24 * belong in struct clk_foo
Geert Uytterhoevena6059ab2018-01-03 12:06:16 +010025 *
26 * Please update clk_flags[] in drivers/clk/clk.c when making changes here!
Mike Turquetteb24764902012-03-15 23:11:19 -070027 */
28#define CLK_SET_RATE_GATE BIT(0) /* must be gated across rate change */
29#define CLK_SET_PARENT_GATE BIT(1) /* must be gated across re-parent */
30#define CLK_SET_RATE_PARENT BIT(2) /* propagate rate change up one level */
31#define CLK_IGNORE_UNUSED BIT(3) /* do not gate even if unused */
Stephen Boydb9610e72016-06-01 14:56:57 -070032 /* unused */
Rajendra Nayakf7d8caa2012-06-01 14:02:47 +053033#define CLK_IS_BASIC BIT(5) /* Basic clk, can't do a to_clk_foo() */
Ulf Hanssona093bde2012-08-31 14:21:28 +020034#define CLK_GET_RATE_NOCACHE BIT(6) /* do not use the cached clk rate */
James Hogan819c1de2013-07-29 12:25:01 +010035#define CLK_SET_RATE_NO_REPARENT BIT(7) /* don't re-parent on rate change */
Boris BREZILLON5279fc42013-12-21 10:34:47 +010036#define CLK_GET_ACCURACY_NOCACHE BIT(8) /* do not use the cached clk accuracy */
Bartlomiej Zolnierkiewiczd8d91982015-04-03 18:43:44 +020037#define CLK_RECALC_NEW_RATES BIT(9) /* recalc rates after notifications */
Heiko Stuebner2eb8c712015-12-22 22:27:58 +010038#define CLK_SET_RATE_UNGATE BIT(10) /* clock needs to run to set rate */
Lee Jones32b9b102016-02-11 13:19:09 -080039#define CLK_IS_CRITICAL BIT(11) /* do not gate, ever */
Dong Aishenga4b35182016-06-30 17:31:13 +080040/* parents need enable during gate/ungate, set rate and re-parent */
41#define CLK_OPS_PARENT_ENABLE BIT(12)
Jerome Brunet9fba7382018-06-19 16:41:41 +020042/* duty cycle call may be forwarded to the parent clock */
43#define CLK_DUTY_CYCLE_PARENT BIT(13)
Michael Turquettecc6ef922017-04-21 12:27:39 +053044#define CLK_ENABLE_HAND_OFF BIT(14) /* enable clock when registered. */
45 /*
46 * hand-off enable_count & prepare_count
47 * to first consumer that enables clk
48 */
Mike Turquetteb24764902012-03-15 23:11:19 -070049
Stephen Boyd61ae7652015-06-22 17:13:49 -070050struct clk;
Saravana Kannan0197b3e2012-04-25 22:58:56 -070051struct clk_hw;
Tomeu Vizoso035a61c2015-01-23 12:03:30 +010052struct clk_core;
Alex Elderc646cbf2014-03-21 06:43:56 -050053struct dentry;
Saravana Kannan0197b3e2012-04-25 22:58:56 -070054
Mike Turquetteb24764902012-03-15 23:11:19 -070055/**
Boris Brezillon0817b622015-07-07 20:48:08 +020056 * struct clk_rate_request - Structure encoding the clk constraints that
57 * a clock user might require.
58 *
59 * @rate: Requested clock rate. This field will be adjusted by
60 * clock drivers according to hardware capabilities.
61 * @min_rate: Minimum rate imposed by clk users.
Masahiro Yamada1971dfb2015-11-05 18:02:34 +090062 * @max_rate: Maximum rate imposed by clk users.
Boris Brezillon0817b622015-07-07 20:48:08 +020063 * @best_parent_rate: The best parent rate a parent can provide to fulfill the
64 * requested constraints.
65 * @best_parent_hw: The most appropriate parent clock that fulfills the
66 * requested constraints.
67 *
68 */
69struct clk_rate_request {
70 unsigned long rate;
71 unsigned long min_rate;
72 unsigned long max_rate;
73 unsigned long best_parent_rate;
74 struct clk_hw *best_parent_hw;
75};
76
77/**
Jerome Brunet9fba7382018-06-19 16:41:41 +020078 * struct clk_duty - Struture encoding the duty cycle ratio of a clock
79 *
80 * @num: Numerator of the duty cycle ratio
81 * @den: Denominator of the duty cycle ratio
82 */
83struct clk_duty {
84 unsigned int num;
85 unsigned int den;
86};
87
88/**
Mike Turquetteb24764902012-03-15 23:11:19 -070089 * struct clk_ops - Callback operations for hardware clocks; these are to
90 * be provided by the clock implementation, and will be called by drivers
91 * through the clk_* api.
92 *
93 * @prepare: Prepare the clock for enabling. This must not return until
Geert Uytterhoeven725b4182014-04-22 15:11:41 +020094 * the clock is fully prepared, and it's safe to call clk_enable.
95 * This callback is intended to allow clock implementations to
96 * do any initialisation that may sleep. Called with
97 * prepare_lock held.
Mike Turquetteb24764902012-03-15 23:11:19 -070098 *
99 * @unprepare: Release the clock from its prepared state. This will typically
Geert Uytterhoeven725b4182014-04-22 15:11:41 +0200100 * undo any work done in the @prepare callback. Called with
101 * prepare_lock held.
Mike Turquetteb24764902012-03-15 23:11:19 -0700102 *
Ulf Hansson3d6ee282013-03-12 20:26:02 +0100103 * @is_prepared: Queries the hardware to determine if the clock is prepared.
104 * This function is allowed to sleep. Optional, if this op is not
105 * set then the prepare count will be used.
106 *
Ulf Hansson3cc82472013-03-12 20:26:04 +0100107 * @unprepare_unused: Unprepare the clock atomically. Only called from
108 * clk_disable_unused for prepare clocks with special needs.
109 * Called with prepare mutex held. This function may sleep.
110 *
Mike Turquetteb24764902012-03-15 23:11:19 -0700111 * @enable: Enable the clock atomically. This must not return until the
Geert Uytterhoeven725b4182014-04-22 15:11:41 +0200112 * clock is generating a valid clock signal, usable by consumer
113 * devices. Called with enable_lock held. This function must not
114 * sleep.
Mike Turquetteb24764902012-03-15 23:11:19 -0700115 *
116 * @disable: Disable the clock atomically. Called with enable_lock held.
Geert Uytterhoeven725b4182014-04-22 15:11:41 +0200117 * This function must not sleep.
Mike Turquetteb24764902012-03-15 23:11:19 -0700118 *
Stephen Boyd119c7122012-10-03 23:38:53 -0700119 * @is_enabled: Queries the hardware to determine if the clock is enabled.
Geert Uytterhoeven725b4182014-04-22 15:11:41 +0200120 * This function must not sleep. Optional, if this op is not
121 * set then the enable count will be used.
Stephen Boyd119c7122012-10-03 23:38:53 -0700122 *
Mike Turquette7c045a52012-12-04 11:00:35 -0800123 * @disable_unused: Disable the clock atomically. Only called from
124 * clk_disable_unused for gate clocks with special needs.
125 * Called with enable_lock held. This function must not
126 * sleep.
127 *
Stephen Boyd7ce3e8c2012-10-03 23:38:54 -0700128 * @recalc_rate Recalculate the rate of this clock, by querying hardware. The
Geert Uytterhoeven725b4182014-04-22 15:11:41 +0200129 * parent rate is an input parameter. It is up to the caller to
130 * ensure that the prepare_mutex is held across this call.
131 * Returns the calculated rate. Optional, but recommended - if
132 * this op is not set then clock rate will be initialized to 0.
Mike Turquetteb24764902012-03-15 23:11:19 -0700133 *
134 * @round_rate: Given a target rate as input, returns the closest rate actually
Geert Uytterhoeven54e73012014-04-22 15:11:42 +0200135 * supported by the clock. The parent rate is an input/output
136 * parameter.
Mike Turquetteb24764902012-03-15 23:11:19 -0700137 *
James Hogan71472c02013-07-29 12:25:00 +0100138 * @determine_rate: Given a target rate as input, returns the closest rate
139 * actually supported by the clock, and optionally the parent clock
140 * that should be used to provide the clock rate.
141 *
Mike Turquetteb24764902012-03-15 23:11:19 -0700142 * @set_parent: Change the input source of this clock; for clocks with multiple
Geert Uytterhoeven54e73012014-04-22 15:11:42 +0200143 * possible parents specify a new parent by passing in the index
144 * as a u8 corresponding to the parent in either the .parent_names
145 * or .parents arrays. This function in affect translates an
146 * array index into the value programmed into the hardware.
147 * Returns 0 on success, -EERROR otherwise.
148 *
Mike Turquetteb24764902012-03-15 23:11:19 -0700149 * @get_parent: Queries the hardware to determine the parent of a clock. The
Geert Uytterhoeven725b4182014-04-22 15:11:41 +0200150 * return value is a u8 which specifies the index corresponding to
151 * the parent clock. This index can be applied to either the
152 * .parent_names or .parents arrays. In short, this function
153 * translates the parent value read from hardware into an array
154 * index. Currently only called when the clock is initialized by
155 * __clk_init. This callback is mandatory for clocks with
156 * multiple parents. It is optional (and unnecessary) for clocks
157 * with 0 or 1 parents.
Mike Turquetteb24764902012-03-15 23:11:19 -0700158 *
Shawn Guo1c0035d2012-04-12 20:50:18 +0800159 * @set_rate: Change the rate of this clock. The requested rate is specified
160 * by the second argument, which should typically be the return
161 * of .round_rate call. The third argument gives the parent rate
162 * which is likely helpful for most .set_rate implementation.
163 * Returns 0 on success, -EERROR otherwise.
Mike Turquetteb24764902012-03-15 23:11:19 -0700164 *
Stephen Boyd3fa22522014-01-15 10:47:22 -0800165 * @set_rate_and_parent: Change the rate and the parent of this clock. The
166 * requested rate is specified by the second argument, which
167 * should typically be the return of .round_rate call. The
168 * third argument gives the parent rate which is likely helpful
169 * for most .set_rate_and_parent implementation. The fourth
170 * argument gives the parent index. This callback is optional (and
171 * unnecessary) for clocks with 0 or 1 parents as well as
172 * for clocks that can tolerate switching the rate and the parent
173 * separately via calls to .set_parent and .set_rate.
174 * Returns 0 on success, -EERROR otherwise.
175 *
Geert Uytterhoeven54e73012014-04-22 15:11:42 +0200176 * @recalc_accuracy: Recalculate the accuracy of this clock. The clock accuracy
177 * is expressed in ppb (parts per billion). The parent accuracy is
178 * an input parameter.
179 * Returns the calculated accuracy. Optional - if this op is not
180 * set then clock accuracy will be initialized to parent accuracy
181 * or 0 (perfect clock) if clock has no parent.
182 *
Maxime Ripard9824cf72014-07-14 13:53:27 +0200183 * @get_phase: Queries the hardware to get the current phase of a clock.
184 * Returned values are 0-359 degrees on success, negative
185 * error codes on failure.
186 *
Mike Turquettee59c5372014-02-18 21:21:25 -0800187 * @set_phase: Shift the phase this clock signal in degrees specified
188 * by the second argument. Valid values for degrees are
189 * 0-359. Return 0 on success, otherwise -EERROR.
190 *
Jerome Brunet9fba7382018-06-19 16:41:41 +0200191 * @get_duty_cycle: Queries the hardware to get the current duty cycle ratio
192 * of a clock. Returned values denominator cannot be 0 and must be
193 * superior or equal to the numerator.
194 *
195 * @set_duty_cycle: Apply the duty cycle ratio to this clock signal specified by
196 * the numerator (2nd argurment) and denominator (3rd argument).
197 * Argument must be a valid ratio (denominator > 0
198 * and >= numerator) Return 0 on success, otherwise -EERROR.
199 *
Geert Uytterhoeven54e73012014-04-22 15:11:42 +0200200 * @init: Perform platform-specific initialization magic.
201 * This is not not used by any of the basic clock types.
202 * Please consider other ways of solving initialization problems
203 * before using this callback, as its use is discouraged.
204 *
Alex Elderc646cbf2014-03-21 06:43:56 -0500205 * @debug_init: Set up type-specific debugfs entries for this clock. This
206 * is called once, after the debugfs directory entry for this
207 * clock has been created. The dentry pointer representing that
208 * directory is provided as an argument. Called with
209 * prepare_lock held. Returns 0 on success, -EERROR otherwise.
210 *
David Daib9048782016-06-15 12:15:01 +0530211 * @set_flags: Set custom flags which deal with hardware specifics. Returns 0
212 * on success, -EERROR otherwise.
Stephen Boyd3fa22522014-01-15 10:47:22 -0800213 *
Taniya Dasc4316252016-11-14 11:26:02 +0530214 * @list_registers: Queries the hardware to get the current register contents.
215 * This callback is optional.
216 *
217 * @list_rate: On success, return the nth supported frequency for a given
218 * clock that is below rate_max. Return -ENXIO in case there is
219 * no frequency table.
220 *
Mike Turquetteb24764902012-03-15 23:11:19 -0700221 * The clk_enable/clk_disable and clk_prepare/clk_unprepare pairs allow
222 * implementations to split any work between atomic (enable) and sleepable
223 * (prepare) contexts. If enabling a clock requires code that might sleep,
224 * this must be done in clk_prepare. Clock enable code that will never be
Stephen Boyd7ce3e8c2012-10-03 23:38:54 -0700225 * called in a sleepable context may be implemented in clk_enable.
Mike Turquetteb24764902012-03-15 23:11:19 -0700226 *
227 * Typically, drivers will call clk_prepare when a clock may be needed later
228 * (eg. when a device is opened), and clk_enable when the clock is actually
229 * required (eg. from an interrupt). Note that clk_prepare MUST have been
230 * called before clk_enable.
231 */
232struct clk_ops {
233 int (*prepare)(struct clk_hw *hw);
234 void (*unprepare)(struct clk_hw *hw);
Ulf Hansson3d6ee282013-03-12 20:26:02 +0100235 int (*is_prepared)(struct clk_hw *hw);
Ulf Hansson3cc82472013-03-12 20:26:04 +0100236 void (*unprepare_unused)(struct clk_hw *hw);
Mike Turquetteb24764902012-03-15 23:11:19 -0700237 int (*enable)(struct clk_hw *hw);
238 void (*disable)(struct clk_hw *hw);
239 int (*is_enabled)(struct clk_hw *hw);
Mike Turquette7c045a52012-12-04 11:00:35 -0800240 void (*disable_unused)(struct clk_hw *hw);
Mike Turquetteb24764902012-03-15 23:11:19 -0700241 unsigned long (*recalc_rate)(struct clk_hw *hw,
242 unsigned long parent_rate);
Geert Uytterhoeven54e73012014-04-22 15:11:42 +0200243 long (*round_rate)(struct clk_hw *hw, unsigned long rate,
244 unsigned long *parent_rate);
Boris Brezillon0817b622015-07-07 20:48:08 +0200245 int (*determine_rate)(struct clk_hw *hw,
246 struct clk_rate_request *req);
Mike Turquetteb24764902012-03-15 23:11:19 -0700247 int (*set_parent)(struct clk_hw *hw, u8 index);
248 u8 (*get_parent)(struct clk_hw *hw);
Geert Uytterhoeven54e73012014-04-22 15:11:42 +0200249 int (*set_rate)(struct clk_hw *hw, unsigned long rate,
250 unsigned long parent_rate);
Stephen Boyd3fa22522014-01-15 10:47:22 -0800251 int (*set_rate_and_parent)(struct clk_hw *hw,
252 unsigned long rate,
253 unsigned long parent_rate, u8 index);
Boris BREZILLON5279fc42013-12-21 10:34:47 +0100254 unsigned long (*recalc_accuracy)(struct clk_hw *hw,
255 unsigned long parent_accuracy);
Maxime Ripard9824cf72014-07-14 13:53:27 +0200256 int (*get_phase)(struct clk_hw *hw);
Mike Turquettee59c5372014-02-18 21:21:25 -0800257 int (*set_phase)(struct clk_hw *hw, int degrees);
Jerome Brunet9fba7382018-06-19 16:41:41 +0200258 int (*get_duty_cycle)(struct clk_hw *hw,
259 struct clk_duty *duty);
260 int (*set_duty_cycle)(struct clk_hw *hw,
261 struct clk_duty *duty);
Mike Turquetteb24764902012-03-15 23:11:19 -0700262 void (*init)(struct clk_hw *hw);
Stephen Boydd75d50c2018-06-01 21:42:07 -0700263 void (*debug_init)(struct clk_hw *hw, struct dentry *dentry);
David Daib9048782016-06-15 12:15:01 +0530264 int (*set_flags)(struct clk_hw *hw, unsigned int flags);
Taniya Dasc4316252016-11-14 11:26:02 +0530265 void (*list_registers)(struct seq_file *f,
266 struct clk_hw *hw);
267 long (*list_rate)(struct clk_hw *hw, unsigned int n,
268 unsigned long rate_max);
Mike Turquetteb24764902012-03-15 23:11:19 -0700269};
270
Saravana Kannan0197b3e2012-04-25 22:58:56 -0700271/**
272 * struct clk_init_data - holds init data that's common to all clocks and is
273 * shared between the clock provider and the common clock framework.
274 *
275 * @name: clock name
276 * @ops: operations this clock supports
277 * @parent_names: array of string names for all possible parents
278 * @num_parents: number of possible parents
279 * @flags: framework-level hints and quirks
Stephen Boydf3494852016-05-16 11:05:16 +0530280 * @vdd_class: voltage scaling requirement class
281 * @rate_max: maximum clock rate in Hz supported at each voltage level
282 * @num_rate_max: number of maximum voltage level supported
Saravana Kannan0197b3e2012-04-25 22:58:56 -0700283 */
284struct clk_init_data {
285 const char *name;
286 const struct clk_ops *ops;
Sascha Hauer2893c372015-03-31 20:16:52 +0200287 const char * const *parent_names;
Saravana Kannan0197b3e2012-04-25 22:58:56 -0700288 u8 num_parents;
289 unsigned long flags;
Stephen Boydf3494852016-05-16 11:05:16 +0530290 struct clk_vdd_class *vdd_class;
291 unsigned long *rate_max;
292 int num_rate_max;
Saravana Kannan0197b3e2012-04-25 22:58:56 -0700293};
294
Stephen Boydf3494852016-05-16 11:05:16 +0530295struct regulator;
296
297/**
298 * struct clk_vdd_class - Voltage scaling class
299 * @class_name: name of the class
300 * @regulator: array of regulators
301 * @num_regulators: size of regulator array. Standard regulator APIs will be
302 used if this field > 0
303 * @set_vdd: function to call when applying a new voltage setting
304 * @vdd_uv: sorted 2D array of legal voltage settings. Indexed by level, then
305 regulator
306 * @level_votes: array of votes for each level
307 * @num_levels: specifies the size of level_votes array
308 * @skip_handoff: do not vote for the max possible voltage during init
309 * @use_max_uV: use INT_MAX for max_uV when calling regulator_set_voltage
310 * @cur_level: the currently set voltage level
311 * @lock: lock to protect this struct
312 */
313struct clk_vdd_class {
314 const char *class_name;
315 struct regulator **regulator;
316 int num_regulators;
317 int (*set_vdd)(struct clk_vdd_class *v_class, int level);
318 int *vdd_uv;
319 int *level_votes;
320 int num_levels;
321 bool skip_handoff;
322 bool use_max_uV;
323 unsigned long cur_level;
324 struct mutex lock;
325};
326
327#define DEFINE_VDD_CLASS(_name, _set_vdd, _num_levels) \
328 struct clk_vdd_class _name = { \
329 .class_name = #_name, \
330 .set_vdd = _set_vdd, \
331 .level_votes = (int [_num_levels]) {}, \
332 .num_levels = _num_levels, \
333 .cur_level = _num_levels, \
334 .lock = __MUTEX_INITIALIZER(_name.lock) \
335 }
336
337#define DEFINE_VDD_REGULATORS(_name, _num_levels, _num_regulators, _vdd_uv) \
338 struct clk_vdd_class _name = { \
339 .class_name = #_name, \
340 .vdd_uv = _vdd_uv, \
341 .regulator = (struct regulator * [_num_regulators]) {}, \
342 .num_regulators = _num_regulators, \
343 .level_votes = (int [_num_levels]) {}, \
344 .num_levels = _num_levels, \
345 .cur_level = _num_levels, \
346 .lock = __MUTEX_INITIALIZER(_name.lock) \
347 }
348
349#define DEFINE_VDD_REGS_INIT(_name, _num_regulators) \
350 struct clk_vdd_class _name = { \
351 .class_name = #_name, \
352 .regulator = (struct regulator * [_num_regulators]) {}, \
353 .num_regulators = _num_regulators, \
354 .lock = __MUTEX_INITIALIZER(_name.lock) \
355 }
356
Saravana Kannan0197b3e2012-04-25 22:58:56 -0700357/**
358 * struct clk_hw - handle for traversing from a struct clk to its corresponding
359 * hardware-specific structure. struct clk_hw should be declared within struct
360 * clk_foo and then referenced by the struct clk instance that uses struct
361 * clk_foo's clk_ops
362 *
Tomeu Vizoso035a61c2015-01-23 12:03:30 +0100363 * @core: pointer to the struct clk_core instance that points back to this
364 * struct clk_hw instance
365 *
366 * @clk: pointer to the per-user struct clk instance that can be used to call
367 * into the clk API
Saravana Kannan0197b3e2012-04-25 22:58:56 -0700368 *
369 * @init: pointer to struct clk_init_data that contains the init data shared
370 * with the common clock framework.
371 */
372struct clk_hw {
Tomeu Vizoso035a61c2015-01-23 12:03:30 +0100373 struct clk_core *core;
Saravana Kannan0197b3e2012-04-25 22:58:56 -0700374 struct clk *clk;
Mark Browndc4cd942012-05-14 15:12:42 +0100375 const struct clk_init_data *init;
Saravana Kannan0197b3e2012-04-25 22:58:56 -0700376};
377
Mike Turquette9d9f78e2012-03-15 23:11:20 -0700378/*
379 * DOC: Basic clock implementations common to many platforms
380 *
381 * Each basic clock hardware type is comprised of a structure describing the
382 * clock hardware, implementations of the relevant callbacks in struct clk_ops,
383 * unique flags for that hardware type, a registration function and an
384 * alternative macro for static initialization
385 */
386
387/**
388 * struct clk_fixed_rate - fixed-rate clock
389 * @hw: handle between common and hardware-specific interfaces
390 * @fixed_rate: constant frequency of clock
391 */
392struct clk_fixed_rate {
393 struct clk_hw hw;
394 unsigned long fixed_rate;
Boris BREZILLON0903ea62013-12-21 10:34:48 +0100395 unsigned long fixed_accuracy;
Mike Turquette9d9f78e2012-03-15 23:11:20 -0700396 u8 flags;
397};
398
Geliang Tang5fd9c052016-01-08 23:51:46 +0800399#define to_clk_fixed_rate(_hw) container_of(_hw, struct clk_fixed_rate, hw)
400
Shawn Guobffad662012-03-27 15:23:23 +0800401extern const struct clk_ops clk_fixed_rate_ops;
Mike Turquette9d9f78e2012-03-15 23:11:20 -0700402struct clk *clk_register_fixed_rate(struct device *dev, const char *name,
403 const char *parent_name, unsigned long flags,
404 unsigned long fixed_rate);
Stephen Boyd26ef56b2016-02-07 00:34:13 -0800405struct clk_hw *clk_hw_register_fixed_rate(struct device *dev, const char *name,
406 const char *parent_name, unsigned long flags,
407 unsigned long fixed_rate);
Boris BREZILLON0903ea62013-12-21 10:34:48 +0100408struct clk *clk_register_fixed_rate_with_accuracy(struct device *dev,
409 const char *name, const char *parent_name, unsigned long flags,
410 unsigned long fixed_rate, unsigned long fixed_accuracy);
Masahiro Yamada0b225e42016-01-06 13:25:10 +0900411void clk_unregister_fixed_rate(struct clk *clk);
Stephen Boyd26ef56b2016-02-07 00:34:13 -0800412struct clk_hw *clk_hw_register_fixed_rate_with_accuracy(struct device *dev,
413 const char *name, const char *parent_name, unsigned long flags,
414 unsigned long fixed_rate, unsigned long fixed_accuracy);
Masahiro Yamada52445632016-05-22 14:33:35 +0900415void clk_hw_unregister_fixed_rate(struct clk_hw *hw);
Stephen Boyd26ef56b2016-02-07 00:34:13 -0800416
Grant Likely015ba402012-04-07 21:39:39 -0500417void of_fixed_clk_setup(struct device_node *np);
418
Mike Turquette9d9f78e2012-03-15 23:11:20 -0700419/**
420 * struct clk_gate - gating clock
421 *
422 * @hw: handle between common and hardware-specific interfaces
423 * @reg: register controlling gate
424 * @bit_idx: single bit controlling gate
425 * @flags: hardware-specific flags
426 * @lock: register lock
427 *
428 * Clock which can gate its output. Implements .enable & .disable
429 *
430 * Flags:
Viresh Kumar1f73f312012-04-17 16:45:35 +0530431 * CLK_GATE_SET_TO_DISABLE - by default this clock sets the bit at bit_idx to
Geert Uytterhoeven725b4182014-04-22 15:11:41 +0200432 * enable the clock. Setting this flag does the opposite: setting the bit
433 * disable the clock and clearing it enables the clock
Haojian Zhuang04577992013-06-08 22:47:19 +0800434 * CLK_GATE_HIWORD_MASK - The gate settings are only in lower 16-bit
Geert Uytterhoeven725b4182014-04-22 15:11:41 +0200435 * of this register, and mask of gate bits are in higher 16-bit of this
436 * register. While setting the gate bits, higher 16-bit should also be
437 * updated to indicate changing gate bits.
Mike Turquette9d9f78e2012-03-15 23:11:20 -0700438 */
439struct clk_gate {
440 struct clk_hw hw;
441 void __iomem *reg;
442 u8 bit_idx;
443 u8 flags;
444 spinlock_t *lock;
Mike Turquette9d9f78e2012-03-15 23:11:20 -0700445};
446
Geliang Tang5fd9c052016-01-08 23:51:46 +0800447#define to_clk_gate(_hw) container_of(_hw, struct clk_gate, hw)
448
Mike Turquette9d9f78e2012-03-15 23:11:20 -0700449#define CLK_GATE_SET_TO_DISABLE BIT(0)
Haojian Zhuang04577992013-06-08 22:47:19 +0800450#define CLK_GATE_HIWORD_MASK BIT(1)
Mike Turquette9d9f78e2012-03-15 23:11:20 -0700451
Shawn Guobffad662012-03-27 15:23:23 +0800452extern const struct clk_ops clk_gate_ops;
Mike Turquette9d9f78e2012-03-15 23:11:20 -0700453struct clk *clk_register_gate(struct device *dev, const char *name,
454 const char *parent_name, unsigned long flags,
455 void __iomem *reg, u8 bit_idx,
456 u8 clk_gate_flags, spinlock_t *lock);
Stephen Boyde270d8c2016-02-06 23:54:45 -0800457struct clk_hw *clk_hw_register_gate(struct device *dev, const char *name,
458 const char *parent_name, unsigned long flags,
459 void __iomem *reg, u8 bit_idx,
460 u8 clk_gate_flags, spinlock_t *lock);
Krzysztof Kozlowski4e3c0212015-01-05 10:52:40 +0100461void clk_unregister_gate(struct clk *clk);
Stephen Boyde270d8c2016-02-06 23:54:45 -0800462void clk_hw_unregister_gate(struct clk_hw *hw);
Gabriel Fernandez0a9c8692017-08-21 13:59:01 +0200463int clk_gate_is_enabled(struct clk_hw *hw);
Mike Turquette9d9f78e2012-03-15 23:11:20 -0700464
Rajendra Nayak357c3f02012-06-29 19:06:32 +0530465struct clk_div_table {
466 unsigned int val;
467 unsigned int div;
468};
469
Mike Turquette9d9f78e2012-03-15 23:11:20 -0700470/**
471 * struct clk_divider - adjustable divider clock
472 *
473 * @hw: handle between common and hardware-specific interfaces
474 * @reg: register containing the divider
475 * @shift: shift to the divider bit field
476 * @width: width of the divider bit field
Rajendra Nayak357c3f02012-06-29 19:06:32 +0530477 * @table: array of value/divider pairs, last entry should have div = 0
Mike Turquette9d9f78e2012-03-15 23:11:20 -0700478 * @lock: register lock
479 *
480 * Clock with an adjustable divider affecting its output frequency. Implements
481 * .recalc_rate, .set_rate and .round_rate
482 *
483 * Flags:
484 * CLK_DIVIDER_ONE_BASED - by default the divisor is the value read from the
Geert Uytterhoeven725b4182014-04-22 15:11:41 +0200485 * register plus one. If CLK_DIVIDER_ONE_BASED is set then the divider is
486 * the raw value read from the register, with the value of zero considered
Soren Brinkmann056b20532013-04-02 15:36:56 -0700487 * invalid, unless CLK_DIVIDER_ALLOW_ZERO is set.
Mike Turquette9d9f78e2012-03-15 23:11:20 -0700488 * CLK_DIVIDER_POWER_OF_TWO - clock divisor is 2 raised to the value read from
Geert Uytterhoeven725b4182014-04-22 15:11:41 +0200489 * the hardware register
Soren Brinkmann056b20532013-04-02 15:36:56 -0700490 * CLK_DIVIDER_ALLOW_ZERO - Allow zero divisors. For dividers which have
491 * CLK_DIVIDER_ONE_BASED set, it is possible to end up with a zero divisor.
492 * Some hardware implementations gracefully handle this case and allow a
493 * zero divisor by not modifying their input clock
494 * (divide by one / bypass).
Haojian Zhuangd57dfe72013-06-08 22:47:18 +0800495 * CLK_DIVIDER_HIWORD_MASK - The divider settings are only in lower 16-bit
Geert Uytterhoeven725b4182014-04-22 15:11:41 +0200496 * of this register, and mask of divider bits are in higher 16-bit of this
497 * register. While setting the divider bits, higher 16-bit should also be
498 * updated to indicate changing divider bits.
Maxime COQUELIN774b5142014-01-29 17:24:07 +0100499 * CLK_DIVIDER_ROUND_CLOSEST - Makes the best calculated divider to be rounded
500 * to the closest integer instead of the up one.
Heiko Stuebner79c6ab52014-05-23 18:32:15 +0530501 * CLK_DIVIDER_READ_ONLY - The divider settings are preconfigured and should
502 * not be changed by the clock framework.
Jim Quinlanafe76c8f2015-05-15 15:45:47 -0400503 * CLK_DIVIDER_MAX_AT_ZERO - For dividers which are like CLK_DIVIDER_ONE_BASED
504 * except when the value read from the register is zero, the divisor is
505 * 2^width of the field.
Mike Turquette9d9f78e2012-03-15 23:11:20 -0700506 */
507struct clk_divider {
508 struct clk_hw hw;
509 void __iomem *reg;
510 u8 shift;
511 u8 width;
512 u8 flags;
Rajendra Nayak357c3f02012-06-29 19:06:32 +0530513 const struct clk_div_table *table;
Mike Turquette9d9f78e2012-03-15 23:11:20 -0700514 spinlock_t *lock;
Mike Turquette9d9f78e2012-03-15 23:11:20 -0700515};
516
Jerome Brunete6d3cc72018-02-14 14:43:33 +0100517#define clk_div_mask(width) ((1 << (width)) - 1)
Geliang Tang5fd9c052016-01-08 23:51:46 +0800518#define to_clk_divider(_hw) container_of(_hw, struct clk_divider, hw)
519
Mike Turquette9d9f78e2012-03-15 23:11:20 -0700520#define CLK_DIVIDER_ONE_BASED BIT(0)
521#define CLK_DIVIDER_POWER_OF_TWO BIT(1)
Soren Brinkmann056b20532013-04-02 15:36:56 -0700522#define CLK_DIVIDER_ALLOW_ZERO BIT(2)
Haojian Zhuangd57dfe72013-06-08 22:47:18 +0800523#define CLK_DIVIDER_HIWORD_MASK BIT(3)
Maxime COQUELIN774b5142014-01-29 17:24:07 +0100524#define CLK_DIVIDER_ROUND_CLOSEST BIT(4)
Heiko Stuebner79c6ab52014-05-23 18:32:15 +0530525#define CLK_DIVIDER_READ_ONLY BIT(5)
Jim Quinlanafe76c8f2015-05-15 15:45:47 -0400526#define CLK_DIVIDER_MAX_AT_ZERO BIT(6)
Mike Turquette9d9f78e2012-03-15 23:11:20 -0700527
Shawn Guobffad662012-03-27 15:23:23 +0800528extern const struct clk_ops clk_divider_ops;
Heiko Stuebner50359812016-01-21 21:53:09 +0100529extern const struct clk_ops clk_divider_ro_ops;
Stephen Boydbca96902015-01-19 18:05:29 -0800530
531unsigned long divider_recalc_rate(struct clk_hw *hw, unsigned long parent_rate,
532 unsigned int val, const struct clk_div_table *table,
Jerome Brunet12a26c22017-12-21 17:30:54 +0100533 unsigned long flags, unsigned long width);
Maxime Ripard22833a92017-05-17 09:40:30 +0200534long divider_round_rate_parent(struct clk_hw *hw, struct clk_hw *parent,
535 unsigned long rate, unsigned long *prate,
536 const struct clk_div_table *table,
537 u8 width, unsigned long flags);
Jerome Brunetb15ee492018-02-14 14:43:39 +0100538long divider_ro_round_rate_parent(struct clk_hw *hw, struct clk_hw *parent,
539 unsigned long rate, unsigned long *prate,
540 const struct clk_div_table *table, u8 width,
541 unsigned long flags, unsigned int val);
Stephen Boydbca96902015-01-19 18:05:29 -0800542int divider_get_val(unsigned long rate, unsigned long parent_rate,
543 const struct clk_div_table *table, u8 width,
544 unsigned long flags);
545
Mike Turquette9d9f78e2012-03-15 23:11:20 -0700546struct clk *clk_register_divider(struct device *dev, const char *name,
547 const char *parent_name, unsigned long flags,
548 void __iomem *reg, u8 shift, u8 width,
549 u8 clk_divider_flags, spinlock_t *lock);
Stephen Boydeb7d2642016-02-06 23:26:37 -0800550struct clk_hw *clk_hw_register_divider(struct device *dev, const char *name,
551 const char *parent_name, unsigned long flags,
552 void __iomem *reg, u8 shift, u8 width,
553 u8 clk_divider_flags, spinlock_t *lock);
Rajendra Nayak357c3f02012-06-29 19:06:32 +0530554struct clk *clk_register_divider_table(struct device *dev, const char *name,
555 const char *parent_name, unsigned long flags,
556 void __iomem *reg, u8 shift, u8 width,
557 u8 clk_divider_flags, const struct clk_div_table *table,
558 spinlock_t *lock);
Stephen Boydeb7d2642016-02-06 23:26:37 -0800559struct clk_hw *clk_hw_register_divider_table(struct device *dev,
560 const char *name, const char *parent_name, unsigned long flags,
561 void __iomem *reg, u8 shift, u8 width,
562 u8 clk_divider_flags, const struct clk_div_table *table,
563 spinlock_t *lock);
Krzysztof Kozlowski4e3c0212015-01-05 10:52:40 +0100564void clk_unregister_divider(struct clk *clk);
Stephen Boydeb7d2642016-02-06 23:26:37 -0800565void clk_hw_unregister_divider(struct clk_hw *hw);
Mike Turquette9d9f78e2012-03-15 23:11:20 -0700566
567/**
568 * struct clk_mux - multiplexer clock
569 *
570 * @hw: handle between common and hardware-specific interfaces
571 * @reg: register controlling multiplexer
Jerome Brunetfe3f3382018-02-14 14:43:38 +0100572 * @table: array of register values corresponding to the parent index
Mike Turquette9d9f78e2012-03-15 23:11:20 -0700573 * @shift: shift to multiplexer bit field
Jerome Brunetfe3f3382018-02-14 14:43:38 +0100574 * @mask: mask of mutliplexer bit field
James Hogan3566d402013-03-25 14:35:07 +0000575 * @flags: hardware-specific flags
Mike Turquette9d9f78e2012-03-15 23:11:20 -0700576 * @lock: register lock
577 *
578 * Clock with multiple selectable parents. Implements .get_parent, .set_parent
579 * and .recalc_rate
580 *
581 * Flags:
582 * CLK_MUX_INDEX_ONE - register index starts at 1, not 0
Viresh Kumar1f73f312012-04-17 16:45:35 +0530583 * CLK_MUX_INDEX_BIT - register index is a single bit (power of two)
Haojian Zhuangba492e92013-06-08 22:47:17 +0800584 * CLK_MUX_HIWORD_MASK - The mux settings are only in lower 16-bit of this
Geert Uytterhoeven725b4182014-04-22 15:11:41 +0200585 * register, and mask of mux bits are in higher 16-bit of this register.
586 * While setting the mux bits, higher 16-bit should also be updated to
587 * indicate changing mux bits.
Stephen Boyd15a02c12015-01-19 18:05:28 -0800588 * CLK_MUX_ROUND_CLOSEST - Use the parent rate that is closest to the desired
589 * frequency.
Mike Turquette9d9f78e2012-03-15 23:11:20 -0700590 */
591struct clk_mux {
592 struct clk_hw hw;
593 void __iomem *reg;
Peter De Schrijverce4f3312013-03-22 14:07:53 +0200594 u32 *table;
595 u32 mask;
Mike Turquette9d9f78e2012-03-15 23:11:20 -0700596 u8 shift;
Mike Turquette9d9f78e2012-03-15 23:11:20 -0700597 u8 flags;
598 spinlock_t *lock;
599};
600
Geliang Tang5fd9c052016-01-08 23:51:46 +0800601#define to_clk_mux(_hw) container_of(_hw, struct clk_mux, hw)
602
Mike Turquette9d9f78e2012-03-15 23:11:20 -0700603#define CLK_MUX_INDEX_ONE BIT(0)
604#define CLK_MUX_INDEX_BIT BIT(1)
Haojian Zhuangba492e92013-06-08 22:47:17 +0800605#define CLK_MUX_HIWORD_MASK BIT(2)
Stephen Boyd15a02c12015-01-19 18:05:28 -0800606#define CLK_MUX_READ_ONLY BIT(3) /* mux can't be changed */
607#define CLK_MUX_ROUND_CLOSEST BIT(4)
Mike Turquette9d9f78e2012-03-15 23:11:20 -0700608
Shawn Guobffad662012-03-27 15:23:23 +0800609extern const struct clk_ops clk_mux_ops;
Tomasz Figac57acd12013-07-23 01:49:18 +0200610extern const struct clk_ops clk_mux_ro_ops;
Peter De Schrijverce4f3312013-03-22 14:07:53 +0200611
Mike Turquette9d9f78e2012-03-15 23:11:20 -0700612struct clk *clk_register_mux(struct device *dev, const char *name,
Sascha Hauer2893c372015-03-31 20:16:52 +0200613 const char * const *parent_names, u8 num_parents,
614 unsigned long flags,
Mike Turquette9d9f78e2012-03-15 23:11:20 -0700615 void __iomem *reg, u8 shift, u8 width,
616 u8 clk_mux_flags, spinlock_t *lock);
Stephen Boyd264b3172016-02-07 00:05:48 -0800617struct clk_hw *clk_hw_register_mux(struct device *dev, const char *name,
618 const char * const *parent_names, u8 num_parents,
619 unsigned long flags,
620 void __iomem *reg, u8 shift, u8 width,
621 u8 clk_mux_flags, spinlock_t *lock);
Mike Turquetteb24764902012-03-15 23:11:19 -0700622
Peter De Schrijverce4f3312013-03-22 14:07:53 +0200623struct clk *clk_register_mux_table(struct device *dev, const char *name,
Sascha Hauer2893c372015-03-31 20:16:52 +0200624 const char * const *parent_names, u8 num_parents,
625 unsigned long flags,
Peter De Schrijverce4f3312013-03-22 14:07:53 +0200626 void __iomem *reg, u8 shift, u32 mask,
627 u8 clk_mux_flags, u32 *table, spinlock_t *lock);
Stephen Boyd264b3172016-02-07 00:05:48 -0800628struct clk_hw *clk_hw_register_mux_table(struct device *dev, const char *name,
629 const char * const *parent_names, u8 num_parents,
630 unsigned long flags,
631 void __iomem *reg, u8 shift, u32 mask,
632 u8 clk_mux_flags, u32 *table, spinlock_t *lock);
Peter De Schrijverce4f3312013-03-22 14:07:53 +0200633
Jerome Brunet77deb662018-02-14 14:43:34 +0100634int clk_mux_val_to_index(struct clk_hw *hw, u32 *table, unsigned int flags,
635 unsigned int val);
636unsigned int clk_mux_index_to_val(u32 *table, unsigned int flags, u8 index);
637
Krzysztof Kozlowski4e3c0212015-01-05 10:52:40 +0100638void clk_unregister_mux(struct clk *clk);
Stephen Boyd264b3172016-02-07 00:05:48 -0800639void clk_hw_unregister_mux(struct clk_hw *hw);
Krzysztof Kozlowski4e3c0212015-01-05 10:52:40 +0100640
Gregory CLEMENT79b16642013-04-12 13:57:44 +0200641void of_fixed_factor_clk_setup(struct device_node *node);
642
Mike Turquetteb24764902012-03-15 23:11:19 -0700643/**
Sascha Hauerf0948f52012-05-03 15:36:14 +0530644 * struct clk_fixed_factor - fixed multiplier and divider clock
645 *
646 * @hw: handle between common and hardware-specific interfaces
647 * @mult: multiplier
648 * @div: divider
649 *
650 * Clock with a fixed multiplier and divider. The output frequency is the
651 * parent clock rate divided by div and multiplied by mult.
652 * Implements .recalc_rate, .set_rate and .round_rate
653 */
654
655struct clk_fixed_factor {
656 struct clk_hw hw;
657 unsigned int mult;
658 unsigned int div;
659};
660
Geliang Tang5fd9c052016-01-08 23:51:46 +0800661#define to_clk_fixed_factor(_hw) container_of(_hw, struct clk_fixed_factor, hw)
662
Daniel Thompson3037e9e2015-06-10 21:04:54 +0100663extern const struct clk_ops clk_fixed_factor_ops;
Sascha Hauerf0948f52012-05-03 15:36:14 +0530664struct clk *clk_register_fixed_factor(struct device *dev, const char *name,
665 const char *parent_name, unsigned long flags,
666 unsigned int mult, unsigned int div);
Masahiro Yamadacbf95912016-01-06 13:25:09 +0900667void clk_unregister_fixed_factor(struct clk *clk);
Stephen Boyd0759ac82016-02-07 00:11:06 -0800668struct clk_hw *clk_hw_register_fixed_factor(struct device *dev,
669 const char *name, const char *parent_name, unsigned long flags,
670 unsigned int mult, unsigned int div);
671void clk_hw_unregister_fixed_factor(struct clk_hw *hw);
Sascha Hauerf0948f52012-05-03 15:36:14 +0530672
Heikki Krogeruse2d0e902014-05-15 16:40:25 +0300673/**
674 * struct clk_fractional_divider - adjustable fractional divider clock
675 *
676 * @hw: handle between common and hardware-specific interfaces
677 * @reg: register containing the divider
678 * @mshift: shift to the numerator bit field
679 * @mwidth: width of the numerator bit field
680 * @nshift: shift to the denominator bit field
681 * @nwidth: width of the denominator bit field
682 * @lock: register lock
683 *
684 * Clock with adjustable fractional divider affecting its output frequency.
685 */
Heikki Krogeruse2d0e902014-05-15 16:40:25 +0300686struct clk_fractional_divider {
687 struct clk_hw hw;
688 void __iomem *reg;
689 u8 mshift;
Andy Shevchenko934e2532015-09-22 18:54:09 +0300690 u8 mwidth;
Heikki Krogeruse2d0e902014-05-15 16:40:25 +0300691 u32 mmask;
692 u8 nshift;
Andy Shevchenko934e2532015-09-22 18:54:09 +0300693 u8 nwidth;
Heikki Krogeruse2d0e902014-05-15 16:40:25 +0300694 u32 nmask;
695 u8 flags;
Elaine Zhangec52e462017-08-01 18:21:22 +0200696 void (*approximation)(struct clk_hw *hw,
697 unsigned long rate, unsigned long *parent_rate,
698 unsigned long *m, unsigned long *n);
Heikki Krogeruse2d0e902014-05-15 16:40:25 +0300699 spinlock_t *lock;
700};
701
Geliang Tang5fd9c052016-01-08 23:51:46 +0800702#define to_clk_fd(_hw) container_of(_hw, struct clk_fractional_divider, hw)
703
Heikki Krogeruse2d0e902014-05-15 16:40:25 +0300704extern const struct clk_ops clk_fractional_divider_ops;
705struct clk *clk_register_fractional_divider(struct device *dev,
706 const char *name, const char *parent_name, unsigned long flags,
707 void __iomem *reg, u8 mshift, u8 mwidth, u8 nshift, u8 nwidth,
708 u8 clk_divider_flags, spinlock_t *lock);
Stephen Boyd39b44cf2016-02-07 00:15:09 -0800709struct clk_hw *clk_hw_register_fractional_divider(struct device *dev,
710 const char *name, const char *parent_name, unsigned long flags,
711 void __iomem *reg, u8 mshift, u8 mwidth, u8 nshift, u8 nwidth,
712 u8 clk_divider_flags, spinlock_t *lock);
713void clk_hw_unregister_fractional_divider(struct clk_hw *hw);
Heikki Krogeruse2d0e902014-05-15 16:40:25 +0300714
Maxime Ripardf2e0a532015-05-19 22:19:33 +0200715/**
716 * struct clk_multiplier - adjustable multiplier clock
717 *
718 * @hw: handle between common and hardware-specific interfaces
719 * @reg: register containing the multiplier
720 * @shift: shift to the multiplier bit field
721 * @width: width of the multiplier bit field
722 * @lock: register lock
723 *
724 * Clock with an adjustable multiplier affecting its output frequency.
725 * Implements .recalc_rate, .set_rate and .round_rate
726 *
727 * Flags:
728 * CLK_MULTIPLIER_ZERO_BYPASS - By default, the multiplier is the value read
729 * from the register, with 0 being a valid value effectively
730 * zeroing the output clock rate. If CLK_MULTIPLIER_ZERO_BYPASS is
731 * set, then a null multiplier will be considered as a bypass,
732 * leaving the parent rate unmodified.
733 * CLK_MULTIPLIER_ROUND_CLOSEST - Makes the best calculated divider to be
734 * rounded to the closest integer instead of the down one.
735 */
736struct clk_multiplier {
737 struct clk_hw hw;
738 void __iomem *reg;
739 u8 shift;
740 u8 width;
741 u8 flags;
742 spinlock_t *lock;
743};
744
Geliang Tang5fd9c052016-01-08 23:51:46 +0800745#define to_clk_multiplier(_hw) container_of(_hw, struct clk_multiplier, hw)
746
Maxime Ripardf2e0a532015-05-19 22:19:33 +0200747#define CLK_MULTIPLIER_ZERO_BYPASS BIT(0)
748#define CLK_MULTIPLIER_ROUND_CLOSEST BIT(1)
749
750extern const struct clk_ops clk_multiplier_ops;
751
Prashant Gaikwadece70092013-03-20 17:30:34 +0530752/***
753 * struct clk_composite - aggregate clock of mux, divider and gate clocks
754 *
755 * @hw: handle between common and hardware-specific interfaces
Mike Turquetted3a1c7b2013-04-11 11:31:36 -0700756 * @mux_hw: handle between composite and hardware-specific mux clock
757 * @rate_hw: handle between composite and hardware-specific rate clock
758 * @gate_hw: handle between composite and hardware-specific gate clock
Prashant Gaikwadece70092013-03-20 17:30:34 +0530759 * @mux_ops: clock ops for mux
Mike Turquetted3a1c7b2013-04-11 11:31:36 -0700760 * @rate_ops: clock ops for rate
Prashant Gaikwadece70092013-03-20 17:30:34 +0530761 * @gate_ops: clock ops for gate
762 */
763struct clk_composite {
764 struct clk_hw hw;
765 struct clk_ops ops;
766
767 struct clk_hw *mux_hw;
Mike Turquetted3a1c7b2013-04-11 11:31:36 -0700768 struct clk_hw *rate_hw;
Prashant Gaikwadece70092013-03-20 17:30:34 +0530769 struct clk_hw *gate_hw;
770
771 const struct clk_ops *mux_ops;
Mike Turquetted3a1c7b2013-04-11 11:31:36 -0700772 const struct clk_ops *rate_ops;
Prashant Gaikwadece70092013-03-20 17:30:34 +0530773 const struct clk_ops *gate_ops;
774};
775
Geliang Tang5fd9c052016-01-08 23:51:46 +0800776#define to_clk_composite(_hw) container_of(_hw, struct clk_composite, hw)
777
Prashant Gaikwadece70092013-03-20 17:30:34 +0530778struct clk *clk_register_composite(struct device *dev, const char *name,
Sascha Hauer2893c372015-03-31 20:16:52 +0200779 const char * const *parent_names, int num_parents,
Prashant Gaikwadece70092013-03-20 17:30:34 +0530780 struct clk_hw *mux_hw, const struct clk_ops *mux_ops,
Mike Turquetted3a1c7b2013-04-11 11:31:36 -0700781 struct clk_hw *rate_hw, const struct clk_ops *rate_ops,
Prashant Gaikwadece70092013-03-20 17:30:34 +0530782 struct clk_hw *gate_hw, const struct clk_ops *gate_ops,
783 unsigned long flags);
Maxime Ripard92a39d92016-03-23 17:38:24 +0100784void clk_unregister_composite(struct clk *clk);
Stephen Boyd49cb3922016-02-07 00:20:31 -0800785struct clk_hw *clk_hw_register_composite(struct device *dev, const char *name,
786 const char * const *parent_names, int num_parents,
787 struct clk_hw *mux_hw, const struct clk_ops *mux_ops,
788 struct clk_hw *rate_hw, const struct clk_ops *rate_ops,
789 struct clk_hw *gate_hw, const struct clk_ops *gate_ops,
790 unsigned long flags);
791void clk_hw_unregister_composite(struct clk_hw *hw);
Prashant Gaikwadece70092013-03-20 17:30:34 +0530792
Jyri Sarhac873d142014-09-05 15:21:34 +0300793/***
794 * struct clk_gpio_gate - gpio gated clock
795 *
796 * @hw: handle between common and hardware-specific interfaces
797 * @gpiod: gpio descriptor
798 *
799 * Clock with a gpio control for enabling and disabling the parent clock.
800 * Implements .enable, .disable and .is_enabled
801 */
802
803struct clk_gpio {
804 struct clk_hw hw;
805 struct gpio_desc *gpiod;
806};
807
Geliang Tang5fd9c052016-01-08 23:51:46 +0800808#define to_clk_gpio(_hw) container_of(_hw, struct clk_gpio, hw)
809
Jyri Sarhac873d142014-09-05 15:21:34 +0300810extern const struct clk_ops clk_gpio_gate_ops;
811struct clk *clk_register_gpio_gate(struct device *dev, const char *name,
Linus Walleij908a5432017-09-24 18:19:18 +0200812 const char *parent_name, struct gpio_desc *gpiod,
Jyri Sarhac873d142014-09-05 15:21:34 +0300813 unsigned long flags);
Stephen Boydb1207432016-02-07 00:27:55 -0800814struct clk_hw *clk_hw_register_gpio_gate(struct device *dev, const char *name,
Linus Walleij908a5432017-09-24 18:19:18 +0200815 const char *parent_name, struct gpio_desc *gpiod,
Stephen Boydb1207432016-02-07 00:27:55 -0800816 unsigned long flags);
817void clk_hw_unregister_gpio_gate(struct clk_hw *hw);
Jyri Sarhac873d142014-09-05 15:21:34 +0300818
Sascha Hauerf0948f52012-05-03 15:36:14 +0530819/**
Sergej Sawazki80eeb1f2015-06-28 16:24:55 +0200820 * struct clk_gpio_mux - gpio controlled clock multiplexer
821 *
822 * @hw: see struct clk_gpio
823 * @gpiod: gpio descriptor to select the parent of this clock multiplexer
824 *
825 * Clock with a gpio control for selecting the parent clock.
826 * Implements .get_parent, .set_parent and .determine_rate
827 */
828
829extern const struct clk_ops clk_gpio_mux_ops;
830struct clk *clk_register_gpio_mux(struct device *dev, const char *name,
Linus Walleij908a5432017-09-24 18:19:18 +0200831 const char * const *parent_names, u8 num_parents, struct gpio_desc *gpiod,
832 unsigned long flags);
Stephen Boydb1207432016-02-07 00:27:55 -0800833struct clk_hw *clk_hw_register_gpio_mux(struct device *dev, const char *name,
Linus Walleij908a5432017-09-24 18:19:18 +0200834 const char * const *parent_names, u8 num_parents, struct gpio_desc *gpiod,
835 unsigned long flags);
Stephen Boydb1207432016-02-07 00:27:55 -0800836void clk_hw_unregister_gpio_mux(struct clk_hw *hw);
Sergej Sawazki80eeb1f2015-06-28 16:24:55 +0200837
Sergej Sawazki80eeb1f2015-06-28 16:24:55 +0200838/**
Mike Turquetteb24764902012-03-15 23:11:19 -0700839 * clk_register - allocate a new clock, register it and return an opaque cookie
840 * @dev: device that is registering this clock
Mike Turquetteb24764902012-03-15 23:11:19 -0700841 * @hw: link to hardware-specific clock data
Mike Turquetteb24764902012-03-15 23:11:19 -0700842 *
843 * clk_register is the primary interface for populating the clock tree with new
844 * clock nodes. It returns a pointer to the newly allocated struct clk which
845 * cannot be dereferenced by driver code but may be used in conjuction with the
Mike Turquetted1302a32012-03-29 14:30:40 -0700846 * rest of the clock API. In the event of an error clk_register will return an
847 * error code; drivers must test for an error code after calling clk_register.
Mike Turquetteb24764902012-03-15 23:11:19 -0700848 */
Saravana Kannan0197b3e2012-04-25 22:58:56 -0700849struct clk *clk_register(struct device *dev, struct clk_hw *hw);
Stephen Boyd46c87732012-09-24 13:38:04 -0700850struct clk *devm_clk_register(struct device *dev, struct clk_hw *hw);
Mike Turquetteb24764902012-03-15 23:11:19 -0700851
Stephen Boyd41438042016-02-05 17:02:52 -0800852int __must_check clk_hw_register(struct device *dev, struct clk_hw *hw);
853int __must_check devm_clk_hw_register(struct device *dev, struct clk_hw *hw);
854
Mark Brown1df5c932012-04-18 09:07:12 +0100855void clk_unregister(struct clk *clk);
Stephen Boyd46c87732012-09-24 13:38:04 -0700856void devm_clk_unregister(struct device *dev, struct clk *clk);
Mark Brown1df5c932012-04-18 09:07:12 +0100857
Stephen Boyd41438042016-02-05 17:02:52 -0800858void clk_hw_unregister(struct clk_hw *hw);
859void devm_clk_hw_unregister(struct device *dev, struct clk_hw *hw);
860
Mike Turquetteb24764902012-03-15 23:11:19 -0700861/* helper functions */
Geert Uytterhoevenb76281c2015-10-16 14:35:21 +0200862const char *__clk_get_name(const struct clk *clk);
Stephen Boyde7df6f62015-08-12 13:04:56 -0700863const char *clk_hw_get_name(const struct clk_hw *hw);
Mike Turquetteb24764902012-03-15 23:11:19 -0700864struct clk_hw *__clk_get_hw(struct clk *clk);
Stephen Boyde7df6f62015-08-12 13:04:56 -0700865unsigned int clk_hw_get_num_parents(const struct clk_hw *hw);
866struct clk_hw *clk_hw_get_parent(const struct clk_hw *hw);
867struct clk_hw *clk_hw_get_parent_by_index(const struct clk_hw *hw,
Stephen Boyd1a9c0692015-06-25 15:55:14 -0700868 unsigned int index);
Linus Torvalds93874682012-12-11 11:25:08 -0800869unsigned int __clk_get_enable_count(struct clk *clk);
Stephen Boyde7df6f62015-08-12 13:04:56 -0700870unsigned long clk_hw_get_rate(const struct clk_hw *hw);
Mike Turquetteb24764902012-03-15 23:11:19 -0700871unsigned long __clk_get_flags(struct clk *clk);
Stephen Boyde7df6f62015-08-12 13:04:56 -0700872unsigned long clk_hw_get_flags(const struct clk_hw *hw);
873bool clk_hw_is_prepared(const struct clk_hw *hw);
Jerome Brunete55a8392017-12-01 22:51:56 +0100874bool clk_hw_rate_is_protected(const struct clk_hw *hw);
Joachim Eastwoodbe68bf82015-10-24 18:55:22 +0200875bool clk_hw_is_enabled(const struct clk_hw *hw);
Stephen Boyd2ac6b1f2012-10-03 23:38:55 -0700876bool __clk_is_enabled(struct clk *clk);
Mike Turquetteb24764902012-03-15 23:11:19 -0700877struct clk *__clk_lookup(const char *name);
Boris Brezillon0817b622015-07-07 20:48:08 +0200878int __clk_mux_determine_rate(struct clk_hw *hw,
879 struct clk_rate_request *req);
880int __clk_determine_rate(struct clk_hw *core, struct clk_rate_request *req);
881int __clk_mux_determine_rate_closest(struct clk_hw *hw,
882 struct clk_rate_request *req);
Jerome Brunet4ad69b802018-04-09 15:59:20 +0200883int clk_mux_determine_rate_flags(struct clk_hw *hw,
884 struct clk_rate_request *req,
885 unsigned long flags);
Tomeu Vizoso42c86542015-03-11 11:34:25 +0100886void clk_hw_reparent(struct clk_hw *hw, struct clk_hw *new_parent);
Stephen Boyd9783c0d2015-07-16 12:50:27 -0700887void clk_hw_set_rate_range(struct clk_hw *hw, unsigned long min_rate,
888 unsigned long max_rate);
Mike Turquetteb24764902012-03-15 23:11:19 -0700889
Taniya Das6a4951a2016-08-19 10:08:28 +0530890unsigned long clk_aggregate_rate(struct clk_hw *hw,
891 const struct clk_core *parent);
Deepak Katragadda1ac95162017-08-25 13:58:13 -0700892int clk_vote_rate_vdd(struct clk_core *core, unsigned long rate);
893void clk_unvote_rate_vdd(struct clk_core *core, unsigned long rate);
Taniya Das6a4951a2016-08-19 10:08:28 +0530894
Javier Martinez Canillas2e65d8b2015-02-12 14:58:29 +0100895static inline void __clk_hw_set_clk(struct clk_hw *dst, struct clk_hw *src)
896{
897 dst->clk = src->clk;
898 dst->core = src->core;
899}
900
Maxime Ripard22833a92017-05-17 09:40:30 +0200901static inline long divider_round_rate(struct clk_hw *hw, unsigned long rate,
902 unsigned long *prate,
903 const struct clk_div_table *table,
904 u8 width, unsigned long flags)
905{
906 return divider_round_rate_parent(hw, clk_hw_get_parent(hw),
907 rate, prate, table, width, flags);
908}
909
Jerome Brunetb15ee492018-02-14 14:43:39 +0100910static inline long divider_ro_round_rate(struct clk_hw *hw, unsigned long rate,
911 unsigned long *prate,
912 const struct clk_div_table *table,
913 u8 width, unsigned long flags,
914 unsigned int val)
915{
916 return divider_ro_round_rate_parent(hw, clk_hw_get_parent(hw),
917 rate, prate, table, width, flags,
918 val);
919}
920
Mike Turquetteb24764902012-03-15 23:11:19 -0700921/*
922 * FIXME clock api without lock protection
923 */
Stephen Boyd1a9c0692015-06-25 15:55:14 -0700924unsigned long clk_hw_round_rate(struct clk_hw *hw, unsigned long rate);
Mike Turquetteb24764902012-03-15 23:11:19 -0700925
Grant Likely766e6a42012-04-09 14:50:06 -0500926struct of_device_id;
927
Sebastian Hesselbarth0b151de2013-05-01 02:58:28 +0200928struct clk_onecell_data {
929 struct clk **clks;
930 unsigned int clk_num;
931};
932
Stephen Boyd0861e5b2016-02-05 17:38:26 -0800933struct clk_hw_onecell_data {
Masahiro Yamada5963f192016-09-23 21:29:36 +0900934 unsigned int num;
Stephen Boyd0861e5b2016-02-05 17:38:26 -0800935 struct clk_hw *hws[];
936};
937
Tero Kristo819b4862013-10-22 11:39:36 +0300938extern struct of_device_id __clk_of_table;
939
Rob Herring54196cc2014-05-08 16:09:24 -0500940#define CLK_OF_DECLARE(name, compat, fn) OF_DECLARE_1(clk, name, compat, fn)
Sebastian Hesselbarth0b151de2013-05-01 02:58:28 +0200941
Ricardo Ribalda Delgadoc7296c52016-07-05 18:23:25 +0200942/*
943 * Use this macro when you have a driver that requires two initialization
944 * routines, one at of_clk_init(), and one at platform device probe
945 */
946#define CLK_OF_DECLARE_DRIVER(name, compat, fn) \
Shawn Guo339e1e52016-10-08 16:59:38 +0800947 static void __init name##_of_clk_init_driver(struct device_node *np) \
Ricardo Ribalda Delgadoc7296c52016-07-05 18:23:25 +0200948 { \
949 of_node_clear_flag(np, OF_POPULATED); \
950 fn(np); \
951 } \
952 OF_DECLARE_1(clk, name, compat, name##_of_clk_init_driver)
953
Chunyan Zhang1ded8792017-12-07 20:57:04 +0800954#define CLK_HW_INIT(_name, _parent, _ops, _flags) \
955 (&(struct clk_init_data) { \
956 .flags = _flags, \
957 .name = _name, \
958 .parent_names = (const char *[]) { _parent }, \
959 .num_parents = 1, \
960 .ops = _ops, \
961 })
962
963#define CLK_HW_INIT_PARENTS(_name, _parents, _ops, _flags) \
964 (&(struct clk_init_data) { \
965 .flags = _flags, \
966 .name = _name, \
967 .parent_names = _parents, \
968 .num_parents = ARRAY_SIZE(_parents), \
969 .ops = _ops, \
970 })
971
972#define CLK_HW_INIT_NO_PARENT(_name, _ops, _flags) \
973 (&(struct clk_init_data) { \
974 .flags = _flags, \
975 .name = _name, \
976 .parent_names = NULL, \
977 .num_parents = 0, \
978 .ops = _ops, \
979 })
980
981#define CLK_FIXED_FACTOR(_struct, _name, _parent, \
982 _div, _mult, _flags) \
983 struct clk_fixed_factor _struct = { \
984 .div = _div, \
985 .mult = _mult, \
986 .hw.init = CLK_HW_INIT(_name, \
987 _parent, \
988 &clk_fixed_factor_ops, \
989 _flags), \
990 }
991
Sebastian Hesselbarth0b151de2013-05-01 02:58:28 +0200992#ifdef CONFIG_OF
Grant Likely766e6a42012-04-09 14:50:06 -0500993int of_clk_add_provider(struct device_node *np,
994 struct clk *(*clk_src_get)(struct of_phandle_args *args,
995 void *data),
996 void *data);
Stephen Boyd0861e5b2016-02-05 17:38:26 -0800997int of_clk_add_hw_provider(struct device_node *np,
998 struct clk_hw *(*get)(struct of_phandle_args *clkspec,
999 void *data),
1000 void *data);
Stephen Boydaa795c42017-09-01 16:16:40 -07001001int devm_of_clk_add_hw_provider(struct device *dev,
1002 struct clk_hw *(*get)(struct of_phandle_args *clkspec,
1003 void *data),
1004 void *data);
Grant Likely766e6a42012-04-09 14:50:06 -05001005void of_clk_del_provider(struct device_node *np);
Stephen Boydaa795c42017-09-01 16:16:40 -07001006void devm_of_clk_del_provider(struct device *dev);
Grant Likely766e6a42012-04-09 14:50:06 -05001007struct clk *of_clk_src_simple_get(struct of_phandle_args *clkspec,
1008 void *data);
Stephen Boyd0861e5b2016-02-05 17:38:26 -08001009struct clk_hw *of_clk_hw_simple_get(struct of_phandle_args *clkspec,
1010 void *data);
Shawn Guo494bfec2012-08-22 21:36:27 +08001011struct clk *of_clk_src_onecell_get(struct of_phandle_args *clkspec, void *data);
Stephen Boyd0861e5b2016-02-05 17:38:26 -08001012struct clk_hw *of_clk_hw_onecell_get(struct of_phandle_args *clkspec,
1013 void *data);
Dinh Nguyen2e61dfb2015-06-05 11:26:13 -05001014int of_clk_parent_fill(struct device_node *np, const char **parents,
1015 unsigned int size);
Lee Jonesd56f8992016-02-11 13:19:11 -08001016int of_clk_detect_critical(struct device_node *np, int index,
1017 unsigned long *flags);
Grant Likely766e6a42012-04-09 14:50:06 -05001018
Sebastian Hesselbarth0b151de2013-05-01 02:58:28 +02001019#else /* !CONFIG_OF */
Prashant Gaikwadf2f6c252013-01-04 12:30:52 +05301020
Sebastian Hesselbarth0b151de2013-05-01 02:58:28 +02001021static inline int of_clk_add_provider(struct device_node *np,
1022 struct clk *(*clk_src_get)(struct of_phandle_args *args,
1023 void *data),
1024 void *data)
1025{
1026 return 0;
1027}
Stephen Boyd0861e5b2016-02-05 17:38:26 -08001028static inline int of_clk_add_hw_provider(struct device_node *np,
1029 struct clk_hw *(*get)(struct of_phandle_args *clkspec,
1030 void *data),
1031 void *data)
1032{
1033 return 0;
1034}
Stephen Boydaa795c42017-09-01 16:16:40 -07001035static inline int 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)
1039{
1040 return 0;
1041}
Geert Uytterhoeven20dd8822015-10-29 22:12:56 +01001042static inline void of_clk_del_provider(struct device_node *np) {}
Stephen Boydaa795c42017-09-01 16:16:40 -07001043static inline void devm_of_clk_del_provider(struct device *dev) {}
Sebastian Hesselbarth0b151de2013-05-01 02:58:28 +02001044static inline struct clk *of_clk_src_simple_get(
1045 struct of_phandle_args *clkspec, void *data)
1046{
1047 return ERR_PTR(-ENOENT);
1048}
Stephen Boyd0861e5b2016-02-05 17:38:26 -08001049static inline struct clk_hw *
1050of_clk_hw_simple_get(struct of_phandle_args *clkspec, void *data)
1051{
1052 return ERR_PTR(-ENOENT);
1053}
Sebastian Hesselbarth0b151de2013-05-01 02:58:28 +02001054static inline struct clk *of_clk_src_onecell_get(
1055 struct of_phandle_args *clkspec, void *data)
1056{
1057 return ERR_PTR(-ENOENT);
1058}
Stephen Boyd0861e5b2016-02-05 17:38:26 -08001059static inline struct clk_hw *
1060of_clk_hw_onecell_get(struct of_phandle_args *clkspec, void *data)
1061{
1062 return ERR_PTR(-ENOENT);
1063}
Stephen Boyd679c51c2015-10-26 11:55:34 -07001064static inline int of_clk_parent_fill(struct device_node *np,
1065 const char **parents, unsigned int size)
1066{
1067 return 0;
1068}
Lee Jonesd56f8992016-02-11 13:19:11 -08001069static inline int of_clk_detect_critical(struct device_node *np, int index,
1070 unsigned long *flags)
1071{
1072 return 0;
1073}
Sebastian Hesselbarth0b151de2013-05-01 02:58:28 +02001074#endif /* CONFIG_OF */
Gerhard Sittigaa514ce2013-07-22 14:14:40 +02001075
1076/*
1077 * wrap access to peripherals in accessor routines
1078 * for improved portability across platforms
1079 */
1080
Gerhard Sittig6d8cdb62013-11-30 23:51:24 +01001081#if IS_ENABLED(CONFIG_PPC)
1082
1083static inline u32 clk_readl(u32 __iomem *reg)
1084{
1085 return ioread32be(reg);
1086}
1087
1088static inline void clk_writel(u32 val, u32 __iomem *reg)
1089{
1090 iowrite32be(val, reg);
1091}
1092
1093#else /* platform dependent I/O accessors */
1094
Gerhard Sittigaa514ce2013-07-22 14:14:40 +02001095static inline u32 clk_readl(u32 __iomem *reg)
1096{
1097 return readl(reg);
1098}
1099
1100static inline void clk_writel(u32 val, u32 __iomem *reg)
1101{
1102 writel(val, reg);
1103}
1104
Gerhard Sittig6d8cdb62013-11-30 23:51:24 +01001105#endif /* platform dependent I/O accessors */
1106
Mike Turquetteb24764902012-03-15 23:11:19 -07001107#endif /* CONFIG_COMMON_CLK */
1108#endif /* CLK_PROVIDER_H */