diff options
-rw-r--r-- | drivers/clk/clk-divider.c | 14 | ||||
-rw-r--r-- | drivers/clk/clk-fixed-rate.c | 14 | ||||
-rw-r--r-- | drivers/clk/clk-gate.c | 15 | ||||
-rw-r--r-- | drivers/clk/clk-mux.c | 10 | ||||
-rw-r--r-- | drivers/clk/clk.c | 89 | ||||
-rw-r--r-- | include/linux/clk-private.h | 2 | ||||
-rw-r--r-- | include/linux/clk-provider.h | 59 |
7 files changed, 129 insertions, 74 deletions
diff --git a/drivers/clk/clk-divider.c b/drivers/clk/clk-divider.c index 90627e4069af..8ea11b444528 100644 --- a/drivers/clk/clk-divider.c +++ b/drivers/clk/clk-divider.c | |||
@@ -167,6 +167,7 @@ struct clk *clk_register_divider(struct device *dev, const char *name, | |||
167 | { | 167 | { |
168 | struct clk_divider *div; | 168 | struct clk_divider *div; |
169 | struct clk *clk; | 169 | struct clk *clk; |
170 | struct clk_init_data init; | ||
170 | 171 | ||
171 | /* allocate the divider */ | 172 | /* allocate the divider */ |
172 | div = kzalloc(sizeof(struct clk_divider), GFP_KERNEL); | 173 | div = kzalloc(sizeof(struct clk_divider), GFP_KERNEL); |
@@ -175,19 +176,22 @@ struct clk *clk_register_divider(struct device *dev, const char *name, | |||
175 | return ERR_PTR(-ENOMEM); | 176 | return ERR_PTR(-ENOMEM); |
176 | } | 177 | } |
177 | 178 | ||
179 | init.name = name; | ||
180 | init.ops = &clk_divider_ops; | ||
181 | init.flags = flags; | ||
182 | init.parent_names = (parent_name ? &parent_name: NULL); | ||
183 | init.num_parents = (parent_name ? 1 : 0); | ||
184 | |||
178 | /* struct clk_divider assignments */ | 185 | /* struct clk_divider assignments */ |
179 | div->reg = reg; | 186 | div->reg = reg; |
180 | div->shift = shift; | 187 | div->shift = shift; |
181 | div->width = width; | 188 | div->width = width; |
182 | div->flags = clk_divider_flags; | 189 | div->flags = clk_divider_flags; |
183 | div->lock = lock; | 190 | div->lock = lock; |
191 | div->hw.init = &init; | ||
184 | 192 | ||
185 | /* register the clock */ | 193 | /* register the clock */ |
186 | clk = clk_register(dev, name, | 194 | clk = clk_register(dev, &div->hw); |
187 | &clk_divider_ops, &div->hw, | ||
188 | (parent_name ? &parent_name: NULL), | ||
189 | (parent_name ? 1 : 0), | ||
190 | flags); | ||
191 | 195 | ||
192 | if (IS_ERR(clk)) | 196 | if (IS_ERR(clk)) |
193 | kfree(div); | 197 | kfree(div); |
diff --git a/drivers/clk/clk-fixed-rate.c b/drivers/clk/clk-fixed-rate.c index b555a04c8df8..cbd246229786 100644 --- a/drivers/clk/clk-fixed-rate.c +++ b/drivers/clk/clk-fixed-rate.c | |||
@@ -52,6 +52,7 @@ struct clk *clk_register_fixed_rate(struct device *dev, const char *name, | |||
52 | { | 52 | { |
53 | struct clk_fixed_rate *fixed; | 53 | struct clk_fixed_rate *fixed; |
54 | struct clk *clk; | 54 | struct clk *clk; |
55 | struct clk_init_data init; | ||
55 | 56 | ||
56 | /* allocate fixed-rate clock */ | 57 | /* allocate fixed-rate clock */ |
57 | fixed = kzalloc(sizeof(struct clk_fixed_rate), GFP_KERNEL); | 58 | fixed = kzalloc(sizeof(struct clk_fixed_rate), GFP_KERNEL); |
@@ -60,15 +61,18 @@ struct clk *clk_register_fixed_rate(struct device *dev, const char *name, | |||
60 | return ERR_PTR(-ENOMEM); | 61 | return ERR_PTR(-ENOMEM); |
61 | } | 62 | } |
62 | 63 | ||
64 | init.name = name; | ||
65 | init.ops = &clk_fixed_rate_ops; | ||
66 | init.flags = flags; | ||
67 | init.parent_names = (parent_name ? &parent_name: NULL); | ||
68 | init.num_parents = (parent_name ? 1 : 0); | ||
69 | |||
63 | /* struct clk_fixed_rate assignments */ | 70 | /* struct clk_fixed_rate assignments */ |
64 | fixed->fixed_rate = fixed_rate; | 71 | fixed->fixed_rate = fixed_rate; |
72 | fixed->hw.init = &init; | ||
65 | 73 | ||
66 | /* register the clock */ | 74 | /* register the clock */ |
67 | clk = clk_register(dev, name, | 75 | clk = clk_register(dev, &fixed->hw); |
68 | &clk_fixed_rate_ops, &fixed->hw, | ||
69 | (parent_name ? &parent_name : NULL), | ||
70 | (parent_name ? 1 : 0), | ||
71 | flags); | ||
72 | 76 | ||
73 | if (IS_ERR(clk)) | 77 | if (IS_ERR(clk)) |
74 | kfree(fixed); | 78 | kfree(fixed); |
diff --git a/drivers/clk/clk-gate.c b/drivers/clk/clk-gate.c index 00216164fb9d..578465e04be6 100644 --- a/drivers/clk/clk-gate.c +++ b/drivers/clk/clk-gate.c | |||
@@ -119,6 +119,7 @@ struct clk *clk_register_gate(struct device *dev, const char *name, | |||
119 | { | 119 | { |
120 | struct clk_gate *gate; | 120 | struct clk_gate *gate; |
121 | struct clk *clk; | 121 | struct clk *clk; |
122 | struct clk_init_data init; | ||
122 | 123 | ||
123 | /* allocate the gate */ | 124 | /* allocate the gate */ |
124 | gate = kzalloc(sizeof(struct clk_gate), GFP_KERNEL); | 125 | gate = kzalloc(sizeof(struct clk_gate), GFP_KERNEL); |
@@ -127,18 +128,20 @@ struct clk *clk_register_gate(struct device *dev, const char *name, | |||
127 | return ERR_PTR(-ENOMEM); | 128 | return ERR_PTR(-ENOMEM); |
128 | } | 129 | } |
129 | 130 | ||
131 | init.name = name; | ||
132 | init.ops = &clk_gate_ops; | ||
133 | init.flags = flags; | ||
134 | init.parent_names = (parent_name ? &parent_name: NULL); | ||
135 | init.num_parents = (parent_name ? 1 : 0); | ||
136 | |||
130 | /* struct clk_gate assignments */ | 137 | /* struct clk_gate assignments */ |
131 | gate->reg = reg; | 138 | gate->reg = reg; |
132 | gate->bit_idx = bit_idx; | 139 | gate->bit_idx = bit_idx; |
133 | gate->flags = clk_gate_flags; | 140 | gate->flags = clk_gate_flags; |
134 | gate->lock = lock; | 141 | gate->lock = lock; |
142 | gate->hw.init = &init; | ||
135 | 143 | ||
136 | /* register the clock */ | 144 | clk = clk_register(dev, &gate->hw); |
137 | clk = clk_register(dev, name, | ||
138 | &clk_gate_ops, &gate->hw, | ||
139 | (parent_name ? &parent_name : NULL), | ||
140 | (parent_name ? 1 : 0), | ||
141 | flags); | ||
142 | 145 | ||
143 | if (IS_ERR(clk)) | 146 | if (IS_ERR(clk)) |
144 | kfree(gate); | 147 | kfree(gate); |
diff --git a/drivers/clk/clk-mux.c b/drivers/clk/clk-mux.c index 6e58f11ab81f..8e97491902e7 100644 --- a/drivers/clk/clk-mux.c +++ b/drivers/clk/clk-mux.c | |||
@@ -95,6 +95,7 @@ struct clk *clk_register_mux(struct device *dev, const char *name, | |||
95 | { | 95 | { |
96 | struct clk_mux *mux; | 96 | struct clk_mux *mux; |
97 | struct clk *clk; | 97 | struct clk *clk; |
98 | struct clk_init_data init; | ||
98 | 99 | ||
99 | /* allocate the mux */ | 100 | /* allocate the mux */ |
100 | mux = kzalloc(sizeof(struct clk_mux), GFP_KERNEL); | 101 | mux = kzalloc(sizeof(struct clk_mux), GFP_KERNEL); |
@@ -103,6 +104,12 @@ struct clk *clk_register_mux(struct device *dev, const char *name, | |||
103 | return ERR_PTR(-ENOMEM); | 104 | return ERR_PTR(-ENOMEM); |
104 | } | 105 | } |
105 | 106 | ||
107 | init.name = name; | ||
108 | init.ops = &clk_mux_ops; | ||
109 | init.flags = flags; | ||
110 | init.parent_names = parent_names; | ||
111 | init.num_parents = num_parents; | ||
112 | |||
106 | /* struct clk_mux assignments */ | 113 | /* struct clk_mux assignments */ |
107 | mux->reg = reg; | 114 | mux->reg = reg; |
108 | mux->shift = shift; | 115 | mux->shift = shift; |
@@ -110,8 +117,7 @@ struct clk *clk_register_mux(struct device *dev, const char *name, | |||
110 | mux->flags = clk_mux_flags; | 117 | mux->flags = clk_mux_flags; |
111 | mux->lock = lock; | 118 | mux->lock = lock; |
112 | 119 | ||
113 | clk = clk_register(dev, name, &clk_mux_ops, &mux->hw, | 120 | clk = clk_register(dev, &mux->hw); |
114 | parent_names, num_parents, flags); | ||
115 | 121 | ||
116 | if (IS_ERR(clk)) | 122 | if (IS_ERR(clk)) |
117 | kfree(mux); | 123 | kfree(mux); |
diff --git a/drivers/clk/clk.c b/drivers/clk/clk.c index 2dd20c01134d..c81803b9ba35 100644 --- a/drivers/clk/clk.c +++ b/drivers/clk/clk.c | |||
@@ -1169,26 +1169,6 @@ EXPORT_SYMBOL_GPL(clk_set_parent); | |||
1169 | * | 1169 | * |
1170 | * Initializes the lists in struct clk, queries the hardware for the | 1170 | * Initializes the lists in struct clk, queries the hardware for the |
1171 | * parent and rate and sets them both. | 1171 | * parent and rate and sets them both. |
1172 | * | ||
1173 | * Any struct clk passed into __clk_init must have the following members | ||
1174 | * populated: | ||
1175 | * .name | ||
1176 | * .ops | ||
1177 | * .hw | ||
1178 | * .parent_names | ||
1179 | * .num_parents | ||
1180 | * .flags | ||
1181 | * | ||
1182 | * Essentially, everything that would normally be passed into clk_register is | ||
1183 | * assumed to be initialized already in __clk_init. The other members may be | ||
1184 | * populated, but are optional. | ||
1185 | * | ||
1186 | * __clk_init is only exposed via clk-private.h and is intended for use with | ||
1187 | * very large numbers of clocks that need to be statically initialized. It is | ||
1188 | * a layering violation to include clk-private.h from any code which implements | ||
1189 | * a clock's .ops; as such any statically initialized clock data MUST be in a | ||
1190 | * separate C file from the logic that implements it's operations. Returns 0 | ||
1191 | * on success, otherwise an error code. | ||
1192 | */ | 1172 | */ |
1193 | int __clk_init(struct device *dev, struct clk *clk) | 1173 | int __clk_init(struct device *dev, struct clk *clk) |
1194 | { | 1174 | { |
@@ -1321,14 +1301,47 @@ out: | |||
1321 | } | 1301 | } |
1322 | 1302 | ||
1323 | /** | 1303 | /** |
1304 | * __clk_register - register a clock and return a cookie. | ||
1305 | * | ||
1306 | * Same as clk_register, except that the .clk field inside hw shall point to a | ||
1307 | * preallocated (generally statically allocated) struct clk. None of the fields | ||
1308 | * of the struct clk need to be initialized. | ||
1309 | * | ||
1310 | * The data pointed to by .init and .clk field shall NOT be marked as init | ||
1311 | * data. | ||
1312 | * | ||
1313 | * __clk_register is only exposed via clk-private.h and is intended for use with | ||
1314 | * very large numbers of clocks that need to be statically initialized. It is | ||
1315 | * a layering violation to include clk-private.h from any code which implements | ||
1316 | * a clock's .ops; as such any statically initialized clock data MUST be in a | ||
1317 | * separate C file from the logic that implements it's operations. Returns 0 | ||
1318 | * on success, otherwise an error code. | ||
1319 | */ | ||
1320 | struct clk *__clk_register(struct device *dev, struct clk_hw *hw) | ||
1321 | { | ||
1322 | int ret; | ||
1323 | struct clk *clk; | ||
1324 | |||
1325 | clk = hw->clk; | ||
1326 | clk->name = hw->init->name; | ||
1327 | clk->ops = hw->init->ops; | ||
1328 | clk->hw = hw; | ||
1329 | clk->flags = hw->init->flags; | ||
1330 | clk->parent_names = hw->init->parent_names; | ||
1331 | clk->num_parents = hw->init->num_parents; | ||
1332 | |||
1333 | ret = __clk_init(dev, clk); | ||
1334 | if (ret) | ||
1335 | return ERR_PTR(ret); | ||
1336 | |||
1337 | return clk; | ||
1338 | } | ||
1339 | EXPORT_SYMBOL_GPL(__clk_register); | ||
1340 | |||
1341 | /** | ||
1324 | * clk_register - allocate a new clock, register it and return an opaque cookie | 1342 | * clk_register - allocate a new clock, register it and return an opaque cookie |
1325 | * @dev: device that is registering this clock | 1343 | * @dev: device that is registering this clock |
1326 | * @name: clock name | ||
1327 | * @ops: operations this clock supports | ||
1328 | * @hw: link to hardware-specific clock data | 1344 | * @hw: link to hardware-specific clock data |
1329 | * @parent_names: array of string names for all possible parents | ||
1330 | * @num_parents: number of possible parents | ||
1331 | * @flags: framework-level hints and quirks | ||
1332 | * | 1345 | * |
1333 | * clk_register is the primary interface for populating the clock tree with new | 1346 | * clk_register is the primary interface for populating the clock tree with new |
1334 | * clock nodes. It returns a pointer to the newly allocated struct clk which | 1347 | * clock nodes. It returns a pointer to the newly allocated struct clk which |
@@ -1336,9 +1349,7 @@ out: | |||
1336 | * rest of the clock API. In the event of an error clk_register will return an | 1349 | * rest of the clock API. In the event of an error clk_register will return an |
1337 | * error code; drivers must test for an error code after calling clk_register. | 1350 | * error code; drivers must test for an error code after calling clk_register. |
1338 | */ | 1351 | */ |
1339 | struct clk *clk_register(struct device *dev, const char *name, | 1352 | struct clk *clk_register(struct device *dev, struct clk_hw *hw) |
1340 | const struct clk_ops *ops, struct clk_hw *hw, | ||
1341 | const char **parent_names, u8 num_parents, unsigned long flags) | ||
1342 | { | 1353 | { |
1343 | int i, ret; | 1354 | int i, ret; |
1344 | struct clk *clk; | 1355 | struct clk *clk; |
@@ -1350,15 +1361,20 @@ struct clk *clk_register(struct device *dev, const char *name, | |||
1350 | goto fail_out; | 1361 | goto fail_out; |
1351 | } | 1362 | } |
1352 | 1363 | ||
1353 | clk->name = name; | 1364 | clk->name = kstrdup(hw->init->name, GFP_KERNEL); |
1354 | clk->ops = ops; | 1365 | if (!clk->name) { |
1366 | pr_err("%s: could not allocate clk->name\n", __func__); | ||
1367 | ret = -ENOMEM; | ||
1368 | goto fail_name; | ||
1369 | } | ||
1370 | clk->ops = hw->init->ops; | ||
1355 | clk->hw = hw; | 1371 | clk->hw = hw; |
1356 | clk->flags = flags; | 1372 | clk->flags = hw->init->flags; |
1357 | clk->num_parents = num_parents; | 1373 | clk->num_parents = hw->init->num_parents; |
1358 | hw->clk = clk; | 1374 | hw->clk = clk; |
1359 | 1375 | ||
1360 | /* allocate local copy in case parent_names is __initdata */ | 1376 | /* allocate local copy in case parent_names is __initdata */ |
1361 | clk->parent_names = kzalloc((sizeof(char*) * num_parents), | 1377 | clk->parent_names = kzalloc((sizeof(char*) * clk->num_parents), |
1362 | GFP_KERNEL); | 1378 | GFP_KERNEL); |
1363 | 1379 | ||
1364 | if (!clk->parent_names) { | 1380 | if (!clk->parent_names) { |
@@ -1369,8 +1385,9 @@ struct clk *clk_register(struct device *dev, const char *name, | |||
1369 | 1385 | ||
1370 | 1386 | ||
1371 | /* copy each string name in case parent_names is __initdata */ | 1387 | /* copy each string name in case parent_names is __initdata */ |
1372 | for (i = 0; i < num_parents; i++) { | 1388 | for (i = 0; i < clk->num_parents; i++) { |
1373 | clk->parent_names[i] = kstrdup(parent_names[i], GFP_KERNEL); | 1389 | clk->parent_names[i] = kstrdup(hw->init->parent_names[i], |
1390 | GFP_KERNEL); | ||
1374 | if (!clk->parent_names[i]) { | 1391 | if (!clk->parent_names[i]) { |
1375 | pr_err("%s: could not copy parent_names\n", __func__); | 1392 | pr_err("%s: could not copy parent_names\n", __func__); |
1376 | ret = -ENOMEM; | 1393 | ret = -ENOMEM; |
@@ -1387,6 +1404,8 @@ fail_parent_names_copy: | |||
1387 | kfree(clk->parent_names[i]); | 1404 | kfree(clk->parent_names[i]); |
1388 | kfree(clk->parent_names); | 1405 | kfree(clk->parent_names); |
1389 | fail_parent_names: | 1406 | fail_parent_names: |
1407 | kfree(clk->name); | ||
1408 | fail_name: | ||
1390 | kfree(clk); | 1409 | kfree(clk); |
1391 | fail_out: | 1410 | fail_out: |
1392 | return ERR_PTR(ret); | 1411 | return ERR_PTR(ret); |
diff --git a/include/linux/clk-private.h b/include/linux/clk-private.h index 6ebec83f1a77..b258532162b8 100644 --- a/include/linux/clk-private.h +++ b/include/linux/clk-private.h | |||
@@ -167,5 +167,7 @@ struct clk { | |||
167 | */ | 167 | */ |
168 | int __clk_init(struct device *dev, struct clk *clk); | 168 | int __clk_init(struct device *dev, struct clk *clk); |
169 | 169 | ||
170 | struct clk *__clk_register(struct device *dev, struct clk_hw *hw); | ||
171 | |||
170 | #endif /* CONFIG_COMMON_CLK */ | 172 | #endif /* CONFIG_COMMON_CLK */ |
171 | #endif /* CLK_PRIVATE_H */ | 173 | #endif /* CLK_PRIVATE_H */ |
diff --git a/include/linux/clk-provider.h b/include/linux/clk-provider.h index 8f2148942b87..5db3412106b3 100644 --- a/include/linux/clk-provider.h +++ b/include/linux/clk-provider.h | |||
@@ -15,19 +15,6 @@ | |||
15 | 15 | ||
16 | #ifdef CONFIG_COMMON_CLK | 16 | #ifdef CONFIG_COMMON_CLK |
17 | 17 | ||
18 | /** | ||
19 | * struct clk_hw - handle for traversing from a struct clk to its corresponding | ||
20 | * hardware-specific structure. struct clk_hw should be declared within struct | ||
21 | * clk_foo and then referenced by the struct clk instance that uses struct | ||
22 | * clk_foo's clk_ops | ||
23 | * | ||
24 | * clk: pointer to the struct clk instance that points back to this struct | ||
25 | * clk_hw instance | ||
26 | */ | ||
27 | struct clk_hw { | ||
28 | struct clk *clk; | ||
29 | }; | ||
30 | |||
31 | /* | 18 | /* |
32 | * flags used across common struct clk. these flags should only affect the | 19 | * flags used across common struct clk. these flags should only affect the |
33 | * top-level framework. custom flags for dealing with hardware specifics | 20 | * top-level framework. custom flags for dealing with hardware specifics |
@@ -39,6 +26,8 @@ struct clk_hw { | |||
39 | #define CLK_IGNORE_UNUSED BIT(3) /* do not gate even if unused */ | 26 | #define CLK_IGNORE_UNUSED BIT(3) /* do not gate even if unused */ |
40 | #define CLK_IS_ROOT BIT(4) /* root clk, has no parent */ | 27 | #define CLK_IS_ROOT BIT(4) /* root clk, has no parent */ |
41 | 28 | ||
29 | struct clk_hw; | ||
30 | |||
42 | /** | 31 | /** |
43 | * struct clk_ops - Callback operations for hardware clocks; these are to | 32 | * struct clk_ops - Callback operations for hardware clocks; these are to |
44 | * be provided by the clock implementation, and will be called by drivers | 33 | * be provided by the clock implementation, and will be called by drivers |
@@ -122,6 +111,41 @@ struct clk_ops { | |||
122 | void (*init)(struct clk_hw *hw); | 111 | void (*init)(struct clk_hw *hw); |
123 | }; | 112 | }; |
124 | 113 | ||
114 | /** | ||
115 | * struct clk_init_data - holds init data that's common to all clocks and is | ||
116 | * shared between the clock provider and the common clock framework. | ||
117 | * | ||
118 | * @name: clock name | ||
119 | * @ops: operations this clock supports | ||
120 | * @parent_names: array of string names for all possible parents | ||
121 | * @num_parents: number of possible parents | ||
122 | * @flags: framework-level hints and quirks | ||
123 | */ | ||
124 | struct clk_init_data { | ||
125 | const char *name; | ||
126 | const struct clk_ops *ops; | ||
127 | const char **parent_names; | ||
128 | u8 num_parents; | ||
129 | unsigned long flags; | ||
130 | }; | ||
131 | |||
132 | /** | ||
133 | * struct clk_hw - handle for traversing from a struct clk to its corresponding | ||
134 | * hardware-specific structure. struct clk_hw should be declared within struct | ||
135 | * clk_foo and then referenced by the struct clk instance that uses struct | ||
136 | * clk_foo's clk_ops | ||
137 | * | ||
138 | * @clk: pointer to the struct clk instance that points back to this struct | ||
139 | * clk_hw instance | ||
140 | * | ||
141 | * @init: pointer to struct clk_init_data that contains the init data shared | ||
142 | * with the common clock framework. | ||
143 | */ | ||
144 | struct clk_hw { | ||
145 | struct clk *clk; | ||
146 | struct clk_init_data *init; | ||
147 | }; | ||
148 | |||
125 | /* | 149 | /* |
126 | * DOC: Basic clock implementations common to many platforms | 150 | * DOC: Basic clock implementations common to many platforms |
127 | * | 151 | * |
@@ -255,12 +279,7 @@ struct clk *clk_register_mux(struct device *dev, const char *name, | |||
255 | /** | 279 | /** |
256 | * clk_register - allocate a new clock, register it and return an opaque cookie | 280 | * clk_register - allocate a new clock, register it and return an opaque cookie |
257 | * @dev: device that is registering this clock | 281 | * @dev: device that is registering this clock |
258 | * @name: clock name | ||
259 | * @ops: operations this clock supports | ||
260 | * @hw: link to hardware-specific clock data | 282 | * @hw: link to hardware-specific clock data |
261 | * @parent_names: array of string names for all possible parents | ||
262 | * @num_parents: number of possible parents | ||
263 | * @flags: framework-level hints and quirks | ||
264 | * | 283 | * |
265 | * clk_register is the primary interface for populating the clock tree with new | 284 | * clk_register is the primary interface for populating the clock tree with new |
266 | * clock nodes. It returns a pointer to the newly allocated struct clk which | 285 | * clock nodes. It returns a pointer to the newly allocated struct clk which |
@@ -268,9 +287,7 @@ struct clk *clk_register_mux(struct device *dev, const char *name, | |||
268 | * rest of the clock API. In the event of an error clk_register will return an | 287 | * rest of the clock API. In the event of an error clk_register will return an |
269 | * error code; drivers must test for an error code after calling clk_register. | 288 | * error code; drivers must test for an error code after calling clk_register. |
270 | */ | 289 | */ |
271 | struct clk *clk_register(struct device *dev, const char *name, | 290 | struct clk *clk_register(struct device *dev, struct clk_hw *hw); |
272 | const struct clk_ops *ops, struct clk_hw *hw, | ||
273 | const char **parent_names, u8 num_parents, unsigned long flags); | ||
274 | 291 | ||
275 | /* helper functions */ | 292 | /* helper functions */ |
276 | const char *__clk_get_name(struct clk *clk); | 293 | const char *__clk_get_name(struct clk *clk); |