i.MX: clk: Port imx_clk_gate2_cgr()
Update clk-gate2 code to be able to accept arbitrary 'cgr' value and introduce imx_clk_gate2_cgr() (Used by Vybrid clock tree) Signed-off-by: Andrey Smirnov <andrew.smirnov@gmail.com> Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
This commit is contained in:
parent
e187942b9a
commit
3ae4754b51
|
@ -26,6 +26,7 @@ struct clk_gate2 {
|
|||
struct clk clk;
|
||||
void __iomem *reg;
|
||||
int shift;
|
||||
u8 cgr_val;
|
||||
const char *parent;
|
||||
#define CLK_GATE_INVERTED (1 << 0)
|
||||
unsigned flags;
|
||||
|
@ -43,7 +44,7 @@ static int clk_gate2_enable(struct clk *clk)
|
|||
if (g->flags & CLK_GATE_INVERTED)
|
||||
val &= ~(3 << g->shift);
|
||||
else
|
||||
val |= 3 << g->shift;
|
||||
val |= g->cgr_val << g->shift;
|
||||
|
||||
writel(val, g->reg);
|
||||
|
||||
|
@ -87,12 +88,13 @@ static struct clk_ops clk_gate2_ops = {
|
|||
};
|
||||
|
||||
struct clk *clk_gate2_alloc(const char *name, const char *parent,
|
||||
void __iomem *reg, u8 shift)
|
||||
void __iomem *reg, u8 shift, u8 cgr_val)
|
||||
{
|
||||
struct clk_gate2 *g = xzalloc(sizeof(*g));
|
||||
|
||||
g->parent = parent;
|
||||
g->reg = reg;
|
||||
g->cgr_val = cgr_val;
|
||||
g->shift = shift;
|
||||
g->clk.ops = &clk_gate2_ops;
|
||||
g->clk.name = name;
|
||||
|
@ -111,12 +113,12 @@ void clk_gate2_free(struct clk *clk)
|
|||
}
|
||||
|
||||
struct clk *clk_gate2(const char *name, const char *parent, void __iomem *reg,
|
||||
u8 shift)
|
||||
u8 shift, u8 cgr_val)
|
||||
{
|
||||
struct clk *g;
|
||||
int ret;
|
||||
|
||||
g = clk_gate2_alloc(name , parent, reg, shift);
|
||||
g = clk_gate2_alloc(name , parent, reg, shift, cgr_val);
|
||||
|
||||
ret = clk_register(g);
|
||||
if (ret) {
|
||||
|
@ -133,7 +135,7 @@ struct clk *clk_gate2_inverted(const char *name, const char *parent,
|
|||
struct clk *clk;
|
||||
struct clk_gate2 *g;
|
||||
|
||||
clk = clk_gate2(name, parent, reg, shift);
|
||||
clk = clk_gate2(name, parent, reg, shift, 0x3);
|
||||
if (IS_ERR(clk))
|
||||
return clk;
|
||||
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
#define __IMX_CLK_H
|
||||
|
||||
struct clk *clk_gate2(const char *name, const char *parent, void __iomem *reg,
|
||||
u8 shift);
|
||||
u8 shift, u8 cgr_val);
|
||||
|
||||
static inline struct clk *imx_clk_divider(const char *name, const char *parent,
|
||||
void __iomem *reg, u8 shift, u8 width)
|
||||
|
@ -51,9 +51,16 @@ static inline struct clk *imx_clk_gate(const char *name, const char *parent,
|
|||
static inline struct clk *imx_clk_gate2(const char *name, const char *parent,
|
||||
void __iomem *reg, u8 shift)
|
||||
{
|
||||
return clk_gate2(name, parent, reg, shift);
|
||||
return clk_gate2(name, parent, reg, shift, 0x3);
|
||||
}
|
||||
|
||||
static inline struct clk *imx_clk_gate2_cgr(const char *name, const char *parent,
|
||||
void __iomem *reg, u8 shift, u8 cgr_val)
|
||||
{
|
||||
return clk_gate2(name, parent, reg, shift, cgr_val);
|
||||
}
|
||||
|
||||
|
||||
struct clk *imx_clk_pllv1(const char *name, const char *parent,
|
||||
void __iomem *base);
|
||||
|
||||
|
|
Loading…
Reference in New Issue