Blame view
include/clk.h
7.46 KB
f26c8a8e7 dm: Add a clock u... |
1 2 3 |
/* * Copyright (c) 2015 Google, Inc * Written by Simon Glass <sjg@chromium.org> |
135aa9500 clk: convert API ... |
4 |
* Copyright (c) 2016, NVIDIA CORPORATION. |
f26c8a8e7 dm: Add a clock u... |
5 6 7 |
* * SPDX-License-Identifier: GPL-2.0+ */ |
08d0d6f32 common: Add new c... |
8 9 |
#ifndef _CLK_H_ #define _CLK_H_ |
1221ce459 treewide: replace... |
10 |
#include <linux/errno.h> |
ad1cf7858 clk: add needed i... |
11 |
#include <linux/types.h> |
135aa9500 clk: convert API ... |
12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
/** * A clock is a hardware signal that oscillates autonomously at a specific * frequency and duty cycle. Most hardware modules require one or more clock * signal to drive their operation. Clock signals are typically generated * externally to the HW module consuming them, by an entity this API calls a * clock provider. This API provides a standard means for drivers to enable and * disable clocks, and to set the rate at which they oscillate. * * A driver that implements UCLASS_CLOCK is a clock provider. A provider will * often implement multiple separate clocks, since the hardware it manages * often has this capability. clock_uclass.h describes the interface which * clock providers must implement. * * Clock consumers/clients are the HW modules driven by the clock signals. This * header file describes the API used by drivers for those HW modules. */ |
ad1cf7858 clk: add needed i... |
28 |
|
135aa9500 clk: convert API ... |
29 |
struct udevice; |
08d0d6f32 common: Add new c... |
30 |
|
135aa9500 clk: convert API ... |
31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
/** * struct clk - A handle to (allowing control of) a single clock. * * Clients provide storage for clock handles. The content of the structure is * managed solely by the clock API and clock drivers. A clock struct is * initialized by "get"ing the clock struct. The clock struct is passed to all * other clock APIs to identify which clock signal to operate upon. * * @dev: The device which implements the clock signal. * @id: The clock signal ID within the provider. * * Currently, the clock API assumes that a single integer ID is enough to * identify and configure any clock signal for any clock provider. If this * assumption becomes invalid in the future, the struct could be expanded to * either (a) add more fields to allow clock providers to store additional * information, or (b) replace the id field with an opaque pointer, which the * provider would dynamically allocated during its .of_xlate op, and process * during is .request op. This may require the addition of an extra op to clean * up the allocation. */ struct clk { struct udevice *dev; /* * Written by of_xlate. We assume a single id is enough for now. In the * future, we might add more fields here. |
f26c8a8e7 dm: Add a clock u... |
56 |
*/ |
135aa9500 clk: convert API ... |
57 |
unsigned long id; |
f26c8a8e7 dm: Add a clock u... |
58 |
}; |
3f96f8752 clk: Use dummy cl... |
59 |
#if CONFIG_IS_ENABLED(OF_CONTROL) && CONFIG_IS_ENABLED(CLK) |
0d15463c0 dtoc: Rename the ... |
60 |
struct phandle_1_arg; |
7423daa60 dm: clk: Add supp... |
61 |
int clk_get_by_index_platdata(struct udevice *dev, int index, |
0d15463c0 dtoc: Rename the ... |
62 |
struct phandle_1_arg *cells, struct clk *clk); |
7423daa60 dm: clk: Add supp... |
63 |
|
135aa9500 clk: convert API ... |
64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
/** * clock_get_by_index - Get/request a clock by integer index. * * This looks up and requests a clock. The index is relative to the client * device; each device is assumed to have n clocks associated with it somehow, * and this function finds and requests one of them. The mapping of client * device clock indices to provider clocks may be via device-tree properties, * board-provided mapping tables, or some other mechanism. * * @dev: The client device. * @index: The index of the clock to request, within the client's list of * clocks. * @clock A pointer to a clock struct to initialize. * @return 0 if OK, or a negative error code. */ int clk_get_by_index(struct udevice *dev, int index, struct clk *clk); |
f26c8a8e7 dm: Add a clock u... |
80 81 |
/** |
135aa9500 clk: convert API ... |
82 |
* clock_get_by_name - Get/request a clock by name. |
f26c8a8e7 dm: Add a clock u... |
83 |
* |
135aa9500 clk: convert API ... |
84 85 86 87 88 89 90 91 92 93 94 |
* This looks up and requests a clock. The name is relative to the client * device; each device is assumed to have n clocks associated with it somehow, * and this function finds and requests one of them. The mapping of client * device clock names to provider clocks may be via device-tree properties, * board-provided mapping tables, or some other mechanism. * * @dev: The client device. * @name: The name of the clock to request, within the client's list of * clocks. * @clock: A pointer to a clock struct to initialize. * @return 0 if OK, or a negative error code. |
f26c8a8e7 dm: Add a clock u... |
95 |
*/ |
135aa9500 clk: convert API ... |
96 |
int clk_get_by_name(struct udevice *dev, const char *name, struct clk *clk); |
b108d8a0d clk: fix compilat... |
97 98 99 100 101 102 103 104 105 106 107 108 109 110 |
/** * clk_release_all() - Disable (turn off)/Free an array of previously * requested clocks. * * For each clock contained in the clock array, this function will check if * clock has been previously requested and then will disable and free it. * * @clk: A clock struct array that was previously successfully * requested by clk_request/get_by_*(). * @count Number of clock contained in the array * @return zero on success, or -ve error code. */ int clk_release_all(struct clk *clk, int count); |
021abf696 Revert "ns16650: ... |
111 112 113 114 115 116 117 118 119 120 121 122 |
#else static inline int clk_get_by_index(struct udevice *dev, int index, struct clk *clk) { return -ENOSYS; } static inline int clk_get_by_name(struct udevice *dev, const char *name, struct clk *clk) { return -ENOSYS; } |
b108d8a0d clk: fix compilat... |
123 124 125 126 127 |
static inline int clk_release_all(struct clk *clk, int count) { return -ENOSYS; } |
021abf696 Revert "ns16650: ... |
128 |
#endif |
f26c8a8e7 dm: Add a clock u... |
129 |
|
f4fcba5c5 clk: implement cl... |
130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 |
#if (CONFIG_IS_ENABLED(OF_CONTROL) && !CONFIG_IS_ENABLED(OF_PLATDATA)) && \ CONFIG_IS_ENABLED(CLK) /** * clk_set_defaults - Process 'assigned-{clocks/clock-parents/clock-rates}' * properties to configure clocks * * @dev: A device to process (the ofnode associated with this device * will be processed). */ int clk_set_defaults(struct udevice *dev); #else static inline int clk_set_defaults(struct udevice *dev) { return 0; } #endif |
f26c8a8e7 dm: Add a clock u... |
146 |
/** |
135aa9500 clk: convert API ... |
147 |
* clk_request - Request a clock by provider-specific ID. |
f26c8a8e7 dm: Add a clock u... |
148 |
* |
135aa9500 clk: convert API ... |
149 150 151 152 153 154 155 156 157 158 |
* This requests a clock using a provider-specific ID. Generally, this function * should not be used, since clk_get_by_index/name() provide an interface that * better separates clients from intimate knowledge of clock providers. * However, this function may be useful in core SoC-specific code. * * @dev: The clock provider device. * @clock: A pointer to a clock struct to initialize. The caller must * have already initialized any field in this struct which the * clock provider uses to identify the clock. * @return 0 if OK, or a negative error code. |
f26c8a8e7 dm: Add a clock u... |
159 |
*/ |
135aa9500 clk: convert API ... |
160 |
int clk_request(struct udevice *dev, struct clk *clk); |
f26c8a8e7 dm: Add a clock u... |
161 162 |
/** |
135aa9500 clk: convert API ... |
163 |
* clock_free - Free a previously requested clock. |
f0e075162 clk: add API to e... |
164 |
* |
135aa9500 clk: convert API ... |
165 166 167 |
* @clock: A clock struct that was previously successfully requested by * clk_request/get_by_*(). * @return 0 if OK, or a negative error code. |
f0e075162 clk: add API to e... |
168 |
*/ |
135aa9500 clk: convert API ... |
169 |
int clk_free(struct clk *clk); |
f0e075162 clk: add API to e... |
170 171 |
/** |
135aa9500 clk: convert API ... |
172 |
* clk_get_rate() - Get current clock rate. |
f26c8a8e7 dm: Add a clock u... |
173 |
* |
135aa9500 clk: convert API ... |
174 175 176 |
* @clk: A clock struct that was previously successfully requested by * clk_request/get_by_*(). * @return clock rate in Hz, or -ve error code. |
f26c8a8e7 dm: Add a clock u... |
177 |
*/ |
135aa9500 clk: convert API ... |
178 |
ulong clk_get_rate(struct clk *clk); |
f26c8a8e7 dm: Add a clock u... |
179 180 |
/** |
135aa9500 clk: convert API ... |
181 |
* clk_set_rate() - Set current clock rate. |
f26c8a8e7 dm: Add a clock u... |
182 |
* |
135aa9500 clk: convert API ... |
183 184 185 186 |
* @clk: A clock struct that was previously successfully requested by * clk_request/get_by_*(). * @rate: New clock rate in Hz. * @return new rate, or -ve error code. |
f26c8a8e7 dm: Add a clock u... |
187 |
*/ |
135aa9500 clk: convert API ... |
188 |
ulong clk_set_rate(struct clk *clk, ulong rate); |
f26c8a8e7 dm: Add a clock u... |
189 |
|
e70cc4383 dm: clk: Add supp... |
190 |
/** |
f7d1046da clk: add clk_set_... |
191 192 193 194 195 196 197 198 199 200 201 |
* clk_set_parent() - Set current clock parent. * * @clk: A clock struct that was previously successfully requested by * clk_request/get_by_*(). * @parent: A clock struct that was previously successfully requested by * clk_request/get_by_*(). * @return new rate, or -ve error code. */ int clk_set_parent(struct clk *clk, struct clk *parent); /** |
135aa9500 clk: convert API ... |
202 |
* clk_enable() - Enable (turn on) a clock. |
e70cc4383 dm: clk: Add supp... |
203 |
* |
135aa9500 clk: convert API ... |
204 205 206 207 208 209 210 211 |
* @clk: A clock struct that was previously successfully requested by * clk_request/get_by_*(). * @return zero on success, or -ve error code. */ int clk_enable(struct clk *clk); /** * clk_disable() - Disable (turn off) a clock. |
e70cc4383 dm: clk: Add supp... |
212 |
* |
135aa9500 clk: convert API ... |
213 214 215 |
* @clk: A clock struct that was previously successfully requested by * clk_request/get_by_*(). * @return zero on success, or -ve error code. |
e70cc4383 dm: clk: Add supp... |
216 |
*/ |
135aa9500 clk: convert API ... |
217 |
int clk_disable(struct clk *clk); |
e70cc4383 dm: clk: Add supp... |
218 |
|
135aa9500 clk: convert API ... |
219 220 221 |
int soc_clk_dump(void); #endif |