Commit 3f96f87520c22efe4a8b43f45f1b2011da50dc06
Committed by
Daniel Schwierzeck
1 parent
639200f6a0
Exists in
v2017.01-smarct4x
and in
26 other branches
clk: Use dummy clk_get_by_* functions when CONFIG_CLK is disabled
The implementations of clk_get_by_index & clk_get_by_name are only available when CONFIG_CLK is enabled. Provide the dummies when this is not the case in order to avoid build failures. Signed-off-by: Paul Burton <paul.burton@imgtec.com> Reviewed-by: Simon Glass <sjg@chromium.org>
Showing 1 changed file with 1 additions and 1 deletions Inline Diff
include/clk.h
1 | /* | 1 | /* |
2 | * Copyright (c) 2015 Google, Inc | 2 | * Copyright (c) 2015 Google, Inc |
3 | * Written by Simon Glass <sjg@chromium.org> | 3 | * Written by Simon Glass <sjg@chromium.org> |
4 | * Copyright (c) 2016, NVIDIA CORPORATION. | 4 | * Copyright (c) 2016, NVIDIA CORPORATION. |
5 | * | 5 | * |
6 | * SPDX-License-Identifier: GPL-2.0+ | 6 | * SPDX-License-Identifier: GPL-2.0+ |
7 | */ | 7 | */ |
8 | 8 | ||
9 | #ifndef _CLK_H_ | 9 | #ifndef _CLK_H_ |
10 | #define _CLK_H_ | 10 | #define _CLK_H_ |
11 | 11 | ||
12 | #include <linux/types.h> | 12 | #include <linux/types.h> |
13 | 13 | ||
14 | /** | 14 | /** |
15 | * A clock is a hardware signal that oscillates autonomously at a specific | 15 | * A clock is a hardware signal that oscillates autonomously at a specific |
16 | * frequency and duty cycle. Most hardware modules require one or more clock | 16 | * frequency and duty cycle. Most hardware modules require one or more clock |
17 | * signal to drive their operation. Clock signals are typically generated | 17 | * signal to drive their operation. Clock signals are typically generated |
18 | * externally to the HW module consuming them, by an entity this API calls a | 18 | * externally to the HW module consuming them, by an entity this API calls a |
19 | * clock provider. This API provides a standard means for drivers to enable and | 19 | * clock provider. This API provides a standard means for drivers to enable and |
20 | * disable clocks, and to set the rate at which they oscillate. | 20 | * disable clocks, and to set the rate at which they oscillate. |
21 | * | 21 | * |
22 | * A driver that implements UCLASS_CLOCK is a clock provider. A provider will | 22 | * A driver that implements UCLASS_CLOCK is a clock provider. A provider will |
23 | * often implement multiple separate clocks, since the hardware it manages | 23 | * often implement multiple separate clocks, since the hardware it manages |
24 | * often has this capability. clock_uclass.h describes the interface which | 24 | * often has this capability. clock_uclass.h describes the interface which |
25 | * clock providers must implement. | 25 | * clock providers must implement. |
26 | * | 26 | * |
27 | * Clock consumers/clients are the HW modules driven by the clock signals. This | 27 | * Clock consumers/clients are the HW modules driven by the clock signals. This |
28 | * header file describes the API used by drivers for those HW modules. | 28 | * header file describes the API used by drivers for those HW modules. |
29 | */ | 29 | */ |
30 | 30 | ||
31 | struct udevice; | 31 | struct udevice; |
32 | 32 | ||
33 | /** | 33 | /** |
34 | * struct clk - A handle to (allowing control of) a single clock. | 34 | * struct clk - A handle to (allowing control of) a single clock. |
35 | * | 35 | * |
36 | * Clients provide storage for clock handles. The content of the structure is | 36 | * Clients provide storage for clock handles. The content of the structure is |
37 | * managed solely by the clock API and clock drivers. A clock struct is | 37 | * managed solely by the clock API and clock drivers. A clock struct is |
38 | * initialized by "get"ing the clock struct. The clock struct is passed to all | 38 | * initialized by "get"ing the clock struct. The clock struct is passed to all |
39 | * other clock APIs to identify which clock signal to operate upon. | 39 | * other clock APIs to identify which clock signal to operate upon. |
40 | * | 40 | * |
41 | * @dev: The device which implements the clock signal. | 41 | * @dev: The device which implements the clock signal. |
42 | * @id: The clock signal ID within the provider. | 42 | * @id: The clock signal ID within the provider. |
43 | * | 43 | * |
44 | * Currently, the clock API assumes that a single integer ID is enough to | 44 | * Currently, the clock API assumes that a single integer ID is enough to |
45 | * identify and configure any clock signal for any clock provider. If this | 45 | * identify and configure any clock signal for any clock provider. If this |
46 | * assumption becomes invalid in the future, the struct could be expanded to | 46 | * assumption becomes invalid in the future, the struct could be expanded to |
47 | * either (a) add more fields to allow clock providers to store additional | 47 | * either (a) add more fields to allow clock providers to store additional |
48 | * information, or (b) replace the id field with an opaque pointer, which the | 48 | * information, or (b) replace the id field with an opaque pointer, which the |
49 | * provider would dynamically allocated during its .of_xlate op, and process | 49 | * provider would dynamically allocated during its .of_xlate op, and process |
50 | * during is .request op. This may require the addition of an extra op to clean | 50 | * during is .request op. This may require the addition of an extra op to clean |
51 | * up the allocation. | 51 | * up the allocation. |
52 | */ | 52 | */ |
53 | struct clk { | 53 | struct clk { |
54 | struct udevice *dev; | 54 | struct udevice *dev; |
55 | /* | 55 | /* |
56 | * Written by of_xlate. We assume a single id is enough for now. In the | 56 | * Written by of_xlate. We assume a single id is enough for now. In the |
57 | * future, we might add more fields here. | 57 | * future, we might add more fields here. |
58 | */ | 58 | */ |
59 | unsigned long id; | 59 | unsigned long id; |
60 | }; | 60 | }; |
61 | 61 | ||
62 | #if CONFIG_IS_ENABLED(OF_CONTROL) | 62 | #if CONFIG_IS_ENABLED(OF_CONTROL) && CONFIG_IS_ENABLED(CLK) |
63 | struct phandle_2_cell; | 63 | struct phandle_2_cell; |
64 | int clk_get_by_index_platdata(struct udevice *dev, int index, | 64 | int clk_get_by_index_platdata(struct udevice *dev, int index, |
65 | struct phandle_2_cell *cells, struct clk *clk); | 65 | struct phandle_2_cell *cells, struct clk *clk); |
66 | 66 | ||
67 | /** | 67 | /** |
68 | * clock_get_by_index - Get/request a clock by integer index. | 68 | * clock_get_by_index - Get/request a clock by integer index. |
69 | * | 69 | * |
70 | * This looks up and requests a clock. The index is relative to the client | 70 | * This looks up and requests a clock. The index is relative to the client |
71 | * device; each device is assumed to have n clocks associated with it somehow, | 71 | * device; each device is assumed to have n clocks associated with it somehow, |
72 | * and this function finds and requests one of them. The mapping of client | 72 | * and this function finds and requests one of them. The mapping of client |
73 | * device clock indices to provider clocks may be via device-tree properties, | 73 | * device clock indices to provider clocks may be via device-tree properties, |
74 | * board-provided mapping tables, or some other mechanism. | 74 | * board-provided mapping tables, or some other mechanism. |
75 | * | 75 | * |
76 | * @dev: The client device. | 76 | * @dev: The client device. |
77 | * @index: The index of the clock to request, within the client's list of | 77 | * @index: The index of the clock to request, within the client's list of |
78 | * clocks. | 78 | * clocks. |
79 | * @clock A pointer to a clock struct to initialize. | 79 | * @clock A pointer to a clock struct to initialize. |
80 | * @return 0 if OK, or a negative error code. | 80 | * @return 0 if OK, or a negative error code. |
81 | */ | 81 | */ |
82 | int clk_get_by_index(struct udevice *dev, int index, struct clk *clk); | 82 | int clk_get_by_index(struct udevice *dev, int index, struct clk *clk); |
83 | 83 | ||
84 | /** | 84 | /** |
85 | * clock_get_by_name - Get/request a clock by name. | 85 | * clock_get_by_name - Get/request a clock by name. |
86 | * | 86 | * |
87 | * This looks up and requests a clock. The name is relative to the client | 87 | * This looks up and requests a clock. The name is relative to the client |
88 | * device; each device is assumed to have n clocks associated with it somehow, | 88 | * device; each device is assumed to have n clocks associated with it somehow, |
89 | * and this function finds and requests one of them. The mapping of client | 89 | * and this function finds and requests one of them. The mapping of client |
90 | * device clock names to provider clocks may be via device-tree properties, | 90 | * device clock names to provider clocks may be via device-tree properties, |
91 | * board-provided mapping tables, or some other mechanism. | 91 | * board-provided mapping tables, or some other mechanism. |
92 | * | 92 | * |
93 | * @dev: The client device. | 93 | * @dev: The client device. |
94 | * @name: The name of the clock to request, within the client's list of | 94 | * @name: The name of the clock to request, within the client's list of |
95 | * clocks. | 95 | * clocks. |
96 | * @clock: A pointer to a clock struct to initialize. | 96 | * @clock: A pointer to a clock struct to initialize. |
97 | * @return 0 if OK, or a negative error code. | 97 | * @return 0 if OK, or a negative error code. |
98 | */ | 98 | */ |
99 | int clk_get_by_name(struct udevice *dev, const char *name, struct clk *clk); | 99 | int clk_get_by_name(struct udevice *dev, const char *name, struct clk *clk); |
100 | #else | 100 | #else |
101 | static inline int clk_get_by_index(struct udevice *dev, int index, | 101 | static inline int clk_get_by_index(struct udevice *dev, int index, |
102 | struct clk *clk) | 102 | struct clk *clk) |
103 | { | 103 | { |
104 | return -ENOSYS; | 104 | return -ENOSYS; |
105 | } | 105 | } |
106 | 106 | ||
107 | static inline int clk_get_by_name(struct udevice *dev, const char *name, | 107 | static inline int clk_get_by_name(struct udevice *dev, const char *name, |
108 | struct clk *clk) | 108 | struct clk *clk) |
109 | { | 109 | { |
110 | return -ENOSYS; | 110 | return -ENOSYS; |
111 | } | 111 | } |
112 | #endif | 112 | #endif |
113 | 113 | ||
114 | /** | 114 | /** |
115 | * clk_request - Request a clock by provider-specific ID. | 115 | * clk_request - Request a clock by provider-specific ID. |
116 | * | 116 | * |
117 | * This requests a clock using a provider-specific ID. Generally, this function | 117 | * This requests a clock using a provider-specific ID. Generally, this function |
118 | * should not be used, since clk_get_by_index/name() provide an interface that | 118 | * should not be used, since clk_get_by_index/name() provide an interface that |
119 | * better separates clients from intimate knowledge of clock providers. | 119 | * better separates clients from intimate knowledge of clock providers. |
120 | * However, this function may be useful in core SoC-specific code. | 120 | * However, this function may be useful in core SoC-specific code. |
121 | * | 121 | * |
122 | * @dev: The clock provider device. | 122 | * @dev: The clock provider device. |
123 | * @clock: A pointer to a clock struct to initialize. The caller must | 123 | * @clock: A pointer to a clock struct to initialize. The caller must |
124 | * have already initialized any field in this struct which the | 124 | * have already initialized any field in this struct which the |
125 | * clock provider uses to identify the clock. | 125 | * clock provider uses to identify the clock. |
126 | * @return 0 if OK, or a negative error code. | 126 | * @return 0 if OK, or a negative error code. |
127 | */ | 127 | */ |
128 | int clk_request(struct udevice *dev, struct clk *clk); | 128 | int clk_request(struct udevice *dev, struct clk *clk); |
129 | 129 | ||
130 | /** | 130 | /** |
131 | * clock_free - Free a previously requested clock. | 131 | * clock_free - Free a previously requested clock. |
132 | * | 132 | * |
133 | * @clock: A clock struct that was previously successfully requested by | 133 | * @clock: A clock struct that was previously successfully requested by |
134 | * clk_request/get_by_*(). | 134 | * clk_request/get_by_*(). |
135 | * @return 0 if OK, or a negative error code. | 135 | * @return 0 if OK, or a negative error code. |
136 | */ | 136 | */ |
137 | int clk_free(struct clk *clk); | 137 | int clk_free(struct clk *clk); |
138 | 138 | ||
139 | /** | 139 | /** |
140 | * clk_get_rate() - Get current clock rate. | 140 | * clk_get_rate() - Get current clock rate. |
141 | * | 141 | * |
142 | * @clk: A clock struct that was previously successfully requested by | 142 | * @clk: A clock struct that was previously successfully requested by |
143 | * clk_request/get_by_*(). | 143 | * clk_request/get_by_*(). |
144 | * @return clock rate in Hz, or -ve error code. | 144 | * @return clock rate in Hz, or -ve error code. |
145 | */ | 145 | */ |
146 | ulong clk_get_rate(struct clk *clk); | 146 | ulong clk_get_rate(struct clk *clk); |
147 | 147 | ||
148 | /** | 148 | /** |
149 | * clk_set_rate() - Set current clock rate. | 149 | * clk_set_rate() - Set current clock rate. |
150 | * | 150 | * |
151 | * @clk: A clock struct that was previously successfully requested by | 151 | * @clk: A clock struct that was previously successfully requested by |
152 | * clk_request/get_by_*(). | 152 | * clk_request/get_by_*(). |
153 | * @rate: New clock rate in Hz. | 153 | * @rate: New clock rate in Hz. |
154 | * @return new rate, or -ve error code. | 154 | * @return new rate, or -ve error code. |
155 | */ | 155 | */ |
156 | ulong clk_set_rate(struct clk *clk, ulong rate); | 156 | ulong clk_set_rate(struct clk *clk, ulong rate); |
157 | 157 | ||
158 | /** | 158 | /** |
159 | * clk_enable() - Enable (turn on) a clock. | 159 | * clk_enable() - Enable (turn on) a clock. |
160 | * | 160 | * |
161 | * @clk: A clock struct that was previously successfully requested by | 161 | * @clk: A clock struct that was previously successfully requested by |
162 | * clk_request/get_by_*(). | 162 | * clk_request/get_by_*(). |
163 | * @return zero on success, or -ve error code. | 163 | * @return zero on success, or -ve error code. |
164 | */ | 164 | */ |
165 | int clk_enable(struct clk *clk); | 165 | int clk_enable(struct clk *clk); |
166 | 166 | ||
167 | /** | 167 | /** |
168 | * clk_disable() - Disable (turn off) a clock. | 168 | * clk_disable() - Disable (turn off) a clock. |
169 | * | 169 | * |
170 | * @clk: A clock struct that was previously successfully requested by | 170 | * @clk: A clock struct that was previously successfully requested by |
171 | * clk_request/get_by_*(). | 171 | * clk_request/get_by_*(). |
172 | * @return zero on success, or -ve error code. | 172 | * @return zero on success, or -ve error code. |
173 | */ | 173 | */ |
174 | int clk_disable(struct clk *clk); | 174 | int clk_disable(struct clk *clk); |
175 | 175 | ||
176 | int soc_clk_dump(void); | 176 | int soc_clk_dump(void); |
177 | 177 | ||
178 | #endif | 178 | #endif |
179 | 179 |