tangled
alpha
login
or
join now
tjh.dev
/
kernel
Linux kernel mirror (for testing)
git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel
os
linux
1
fork
atom
overview
issues
pulls
pipelines
Merge branch 'clkdev' into fixes
Russell King
13 years ago
d99a910a
2b25d9f6
+56
-51
4 changed files
expand all
collapse all
unified
split
arch
m68k
platform
coldfire
clk.c
drivers
clk
Makefile
clk-devres.c
clkdev.c
-6
arch/m68k/platform/coldfire/clk.c
···
146
146
};
147
147
#endif /* MCFPM_PPMCR1 */
148
148
#endif /* MCFPM_PPMCR0 */
149
149
-
150
150
-
struct clk *devm_clk_get(struct device *dev, const char *id)
151
151
-
{
152
152
-
return NULL;
153
153
-
}
154
154
-
EXPORT_SYMBOL(devm_clk_get);
+1
drivers/clk/Makefile
···
1
1
# common clock types
2
2
+
obj-$(CONFIG_HAVE_CLK) += clk-devres.o
2
3
obj-$(CONFIG_CLKDEV_LOOKUP) += clkdev.o
3
4
obj-$(CONFIG_COMMON_CLK) += clk.o clk-fixed-rate.o clk-gate.o \
4
5
clk-mux.o clk-divider.o clk-fixed-factor.o
+55
drivers/clk/clk-devres.c
···
1
1
+
/*
2
2
+
* This program is free software; you can redistribute it and/or modify
3
3
+
* it under the terms of the GNU General Public License version 2 as
4
4
+
* published by the Free Software Foundation.
5
5
+
*/
6
6
+
7
7
+
#include <linux/clk.h>
8
8
+
#include <linux/device.h>
9
9
+
#include <linux/export.h>
10
10
+
#include <linux/gfp.h>
11
11
+
12
12
+
static void devm_clk_release(struct device *dev, void *res)
13
13
+
{
14
14
+
clk_put(*(struct clk **)res);
15
15
+
}
16
16
+
17
17
+
struct clk *devm_clk_get(struct device *dev, const char *id)
18
18
+
{
19
19
+
struct clk **ptr, *clk;
20
20
+
21
21
+
ptr = devres_alloc(devm_clk_release, sizeof(*ptr), GFP_KERNEL);
22
22
+
if (!ptr)
23
23
+
return ERR_PTR(-ENOMEM);
24
24
+
25
25
+
clk = clk_get(dev, id);
26
26
+
if (!IS_ERR(clk)) {
27
27
+
*ptr = clk;
28
28
+
devres_add(dev, ptr);
29
29
+
} else {
30
30
+
devres_free(ptr);
31
31
+
}
32
32
+
33
33
+
return clk;
34
34
+
}
35
35
+
EXPORT_SYMBOL(devm_clk_get);
36
36
+
37
37
+
static int devm_clk_match(struct device *dev, void *res, void *data)
38
38
+
{
39
39
+
struct clk **c = res;
40
40
+
if (!c || !*c) {
41
41
+
WARN_ON(!c || !*c);
42
42
+
return 0;
43
43
+
}
44
44
+
return *c == data;
45
45
+
}
46
46
+
47
47
+
void devm_clk_put(struct device *dev, struct clk *clk)
48
48
+
{
49
49
+
int ret;
50
50
+
51
51
+
ret = devres_release(dev, devm_clk_release, devm_clk_match, clk);
52
52
+
53
53
+
WARN_ON(ret);
54
54
+
}
55
55
+
EXPORT_SYMBOL(devm_clk_put);
-45
drivers/clk/clkdev.c
···
171
171
}
172
172
EXPORT_SYMBOL(clk_put);
173
173
174
174
-
static void devm_clk_release(struct device *dev, void *res)
175
175
-
{
176
176
-
clk_put(*(struct clk **)res);
177
177
-
}
178
178
-
179
179
-
struct clk *devm_clk_get(struct device *dev, const char *id)
180
180
-
{
181
181
-
struct clk **ptr, *clk;
182
182
-
183
183
-
ptr = devres_alloc(devm_clk_release, sizeof(*ptr), GFP_KERNEL);
184
184
-
if (!ptr)
185
185
-
return ERR_PTR(-ENOMEM);
186
186
-
187
187
-
clk = clk_get(dev, id);
188
188
-
if (!IS_ERR(clk)) {
189
189
-
*ptr = clk;
190
190
-
devres_add(dev, ptr);
191
191
-
} else {
192
192
-
devres_free(ptr);
193
193
-
}
194
194
-
195
195
-
return clk;
196
196
-
}
197
197
-
EXPORT_SYMBOL(devm_clk_get);
198
198
-
199
199
-
static int devm_clk_match(struct device *dev, void *res, void *data)
200
200
-
{
201
201
-
struct clk **c = res;
202
202
-
if (!c || !*c) {
203
203
-
WARN_ON(!c || !*c);
204
204
-
return 0;
205
205
-
}
206
206
-
return *c == data;
207
207
-
}
208
208
-
209
209
-
void devm_clk_put(struct device *dev, struct clk *clk)
210
210
-
{
211
211
-
int ret;
212
212
-
213
213
-
ret = devres_destroy(dev, devm_clk_release, devm_clk_match, clk);
214
214
-
215
215
-
WARN_ON(ret);
216
216
-
}
217
217
-
EXPORT_SYMBOL(devm_clk_put);
218
218
-
219
174
void clkdev_add(struct clk_lookup *cl)
220
175
{
221
176
mutex_lock(&clocks_mutex);