Skip to content

Commit

Permalink
Merge branch 'clkdev' into fixes
Browse files Browse the repository at this point in the history
  • Loading branch information
Russell King committed Sep 19, 2012
2 parents 2b25d9f + 20332ff commit d99a910
Show file tree
Hide file tree
Showing 4 changed files with 56 additions and 51 deletions.
6 changes: 0 additions & 6 deletions arch/m68k/platform/coldfire/clk.c
Original file line number Diff line number Diff line change
Expand Up @@ -146,9 +146,3 @@ struct clk_ops clk_ops1 = {
};
#endif /* MCFPM_PPMCR1 */
#endif /* MCFPM_PPMCR0 */

struct clk *devm_clk_get(struct device *dev, const char *id)
{
return NULL;
}
EXPORT_SYMBOL(devm_clk_get);
1 change: 1 addition & 0 deletions drivers/clk/Makefile
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
# common clock types
obj-$(CONFIG_HAVE_CLK) += clk-devres.o
obj-$(CONFIG_CLKDEV_LOOKUP) += clkdev.o
obj-$(CONFIG_COMMON_CLK) += clk.o clk-fixed-rate.o clk-gate.o \
clk-mux.o clk-divider.o clk-fixed-factor.o
Expand Down
55 changes: 55 additions & 0 deletions drivers/clk/clk-devres.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
/*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*/

#include <linux/clk.h>
#include <linux/device.h>
#include <linux/export.h>
#include <linux/gfp.h>

static void devm_clk_release(struct device *dev, void *res)
{
clk_put(*(struct clk **)res);
}

struct clk *devm_clk_get(struct device *dev, const char *id)
{
struct clk **ptr, *clk;

ptr = devres_alloc(devm_clk_release, sizeof(*ptr), GFP_KERNEL);
if (!ptr)
return ERR_PTR(-ENOMEM);

clk = clk_get(dev, id);
if (!IS_ERR(clk)) {
*ptr = clk;
devres_add(dev, ptr);
} else {
devres_free(ptr);
}

return clk;
}
EXPORT_SYMBOL(devm_clk_get);

static int devm_clk_match(struct device *dev, void *res, void *data)
{
struct clk **c = res;
if (!c || !*c) {
WARN_ON(!c || !*c);
return 0;
}
return *c == data;
}

void devm_clk_put(struct device *dev, struct clk *clk)
{
int ret;

ret = devres_release(dev, devm_clk_release, devm_clk_match, clk);

WARN_ON(ret);
}
EXPORT_SYMBOL(devm_clk_put);
45 changes: 0 additions & 45 deletions drivers/clk/clkdev.c
Original file line number Diff line number Diff line change
Expand Up @@ -171,51 +171,6 @@ void clk_put(struct clk *clk)
}
EXPORT_SYMBOL(clk_put);

static void devm_clk_release(struct device *dev, void *res)
{
clk_put(*(struct clk **)res);
}

struct clk *devm_clk_get(struct device *dev, const char *id)
{
struct clk **ptr, *clk;

ptr = devres_alloc(devm_clk_release, sizeof(*ptr), GFP_KERNEL);
if (!ptr)
return ERR_PTR(-ENOMEM);

clk = clk_get(dev, id);
if (!IS_ERR(clk)) {
*ptr = clk;
devres_add(dev, ptr);
} else {
devres_free(ptr);
}

return clk;
}
EXPORT_SYMBOL(devm_clk_get);

static int devm_clk_match(struct device *dev, void *res, void *data)
{
struct clk **c = res;
if (!c || !*c) {
WARN_ON(!c || !*c);
return 0;
}
return *c == data;
}

void devm_clk_put(struct device *dev, struct clk *clk)
{
int ret;

ret = devres_destroy(dev, devm_clk_release, devm_clk_match, clk);

WARN_ON(ret);
}
EXPORT_SYMBOL(devm_clk_put);

void clkdev_add(struct clk_lookup *cl)
{
mutex_lock(&clocks_mutex);
Expand Down

0 comments on commit d99a910

Please sign in to comment.