diff options
Diffstat (limited to 'arch/arm/mach-imx/clk-gate2.c')
-rw-r--r-- | arch/arm/mach-imx/clk-gate2.c | 145 |
1 files changed, 0 insertions, 145 deletions
diff --git a/arch/arm/mach-imx/clk-gate2.c b/arch/arm/mach-imx/clk-gate2.c deleted file mode 100644 index faed6313fb..0000000000 --- a/arch/arm/mach-imx/clk-gate2.c +++ /dev/null @@ -1,145 +0,0 @@ -/* - * clk-gate2.c - barebox 2-bit clock support. Based on Linux clk support - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of - * the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - */ - -#include <common.h> -#include <io.h> -#include <malloc.h> -#include <linux/clk.h> -#include <linux/err.h> - -#include "clk.h" - - -struct clk_gate2 { - struct clk clk; - void __iomem *reg; - int shift; - const char *parent; -#define CLK_GATE_INVERTED (1 << 0) - unsigned flags; -}; - -#define to_clk_gate2(_clk) container_of(_clk, struct clk_gate2, clk) - -static int clk_gate2_enable(struct clk *clk) -{ - struct clk_gate2 *g = to_clk_gate2(clk); - u32 val; - - val = readl(g->reg); - - if (g->flags & CLK_GATE_INVERTED) - val &= ~(3 << g->shift); - else - val |= 3 << g->shift; - - writel(val, g->reg); - - return 0; -} - -static void clk_gate2_disable(struct clk *clk) -{ - struct clk_gate2 *g = to_clk_gate2(clk); - u32 val; - - val = readl(g->reg); - - if (g->flags & CLK_GATE_INVERTED) - val |= 3 << g->shift; - else - val &= ~(3 << g->shift); - - writel(val, g->reg); -} - -static int clk_gate2_is_enabled(struct clk *clk) -{ - struct clk_gate2 *g = to_clk_gate2(clk); - u32 val; - - val = readl(g->reg); - - if (val & (1 << g->shift)) - return g->flags & CLK_GATE_INVERTED ? 0 : 1; - else - return g->flags & CLK_GATE_INVERTED ? 1 : 0; -} - -static struct clk_ops clk_gate2_ops = { - .set_rate = clk_parent_set_rate, - .round_rate = clk_parent_round_rate, - .enable = clk_gate2_enable, - .disable = clk_gate2_disable, - .is_enabled = clk_gate2_is_enabled, -}; - -struct clk *clk_gate2_alloc(const char *name, const char *parent, - void __iomem *reg, u8 shift) -{ - struct clk_gate2 *g = xzalloc(sizeof(*g)); - - g->parent = parent; - g->reg = reg; - g->shift = shift; - g->clk.ops = &clk_gate2_ops; - g->clk.name = name; - g->clk.parent_names = &g->parent; - g->clk.num_parents = 1; - g->clk.flags = CLK_SET_RATE_PARENT; - - return &g->clk; -} - -void clk_gate2_free(struct clk *clk) -{ - struct clk_gate2 *g = to_clk_gate2(clk); - - free(g); -} - -struct clk *clk_gate2(const char *name, const char *parent, void __iomem *reg, - u8 shift) -{ - struct clk *g; - int ret; - - g = clk_gate2_alloc(name , parent, reg, shift); - - ret = clk_register(g); - if (ret) { - free(to_clk_gate2(g)); - return ERR_PTR(ret); - } - - return g; -} - -struct clk *clk_gate2_inverted(const char *name, const char *parent, - void __iomem *reg, u8 shift) -{ - struct clk *clk; - struct clk_gate2 *g; - - clk = clk_gate2(name, parent, reg, shift); - if (IS_ERR(clk)) - return clk; - - g = to_clk_gate2(clk); - - g->flags = CLK_GATE_INVERTED; - - return clk; -} |