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