Skip to content

Commit

Permalink
ARM: 7534/1: clk: Make the managed clk functions generically available
Browse files Browse the repository at this point in the history
The managed clk functions are currently only available when the generic clk
lookup framework is build. But the managed clk functions are merely wrappers
around clk_get and clk_put and do not depend on any specifics of the generic
lookup functions and there are still quite a few custom implementations of the
clk API. So make the managed functions available whenever the clk API is
implemented.

The patch also removes the custom implementation of devm_clk_get for the
coldfire platform.

Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
Acked-by: Greg Ungerer <gerg@uclinux.org>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
  • Loading branch information
Lars-Peter Clausen authored and Russell King committed Sep 15, 2012
1 parent 55d512e commit 8ef997b
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_destroy(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 8ef997b

Please sign in to comment.