Commit 1dc7b776 authored by Magnus Damm's avatar Magnus Damm Committed by Paul Mundt

sh: use arch_flags for sh_mobile mstpcr clock bits

Use arch_flags to keep track of register and flag number.
Signed-off-by: default avatarMagnus Damm <damm@igel.co.jp>
Signed-off-by: default avatarPaul Mundt <lethal@linux-sh.org>
parent d902d04f
...@@ -567,12 +567,30 @@ static struct clk sh7722_video_clock = { ...@@ -567,12 +567,30 @@ static struct clk sh7722_video_clock = {
.ops = &sh7722_video_clk_ops, .ops = &sh7722_video_clk_ops,
}; };
static int sh7722_mstpcr_start_stop(struct clk *clk, unsigned long reg, #define MSTPCR_ARCH_FLAGS(reg, bit) (((reg) << 8) | (bit))
int enable) #define MSTPCR_ARCH_FLAGS_REG(value) ((value) >> 8)
#define MSTPCR_ARCH_FLAGS_BIT(value) ((value) & 0xff)
static int sh7722_mstpcr_start_stop(struct clk *clk, int enable)
{ {
unsigned long bit = clk->arch_flags; unsigned long bit = MSTPCR_ARCH_FLAGS_BIT(clk->arch_flags);
unsigned long reg;
unsigned long r; unsigned long r;
switch(MSTPCR_ARCH_FLAGS_REG(clk->arch_flags)) {
case 0:
reg = MSTPCR0;
break;
case 1:
reg = MSTPCR1;
break;
case 2:
reg = MSTPCR2;
break;
default:
return -EINVAL;
}
r = ctrl_inl(reg); r = ctrl_inl(reg);
if (enable) if (enable)
...@@ -584,56 +602,26 @@ static int sh7722_mstpcr_start_stop(struct clk *clk, unsigned long reg, ...@@ -584,56 +602,26 @@ static int sh7722_mstpcr_start_stop(struct clk *clk, unsigned long reg,
return 0; return 0;
} }
static void sh7722_mstpcr0_enable(struct clk *clk) static void sh7722_mstpcr_enable(struct clk *clk)
{
sh7722_mstpcr_start_stop(clk, MSTPCR0, 1);
}
static void sh7722_mstpcr0_disable(struct clk *clk)
{ {
sh7722_mstpcr_start_stop(clk, MSTPCR0, 0); sh7722_mstpcr_start_stop(clk, 1);
} }
static void sh7722_mstpcr1_enable(struct clk *clk) static void sh7722_mstpcr_disable(struct clk *clk)
{ {
sh7722_mstpcr_start_stop(clk, MSTPCR1, 1); sh7722_mstpcr_start_stop(clk, 0);
} }
static void sh7722_mstpcr1_disable(struct clk *clk) static struct clk_ops sh7722_mstpcr_clk_ops = {
{ .enable = sh7722_mstpcr_enable,
sh7722_mstpcr_start_stop(clk, MSTPCR1, 0); .disable = sh7722_mstpcr_disable,
}
static void sh7722_mstpcr2_enable(struct clk *clk)
{
sh7722_mstpcr_start_stop(clk, MSTPCR2, 1);
}
static void sh7722_mstpcr2_disable(struct clk *clk)
{
sh7722_mstpcr_start_stop(clk, MSTPCR2, 0);
}
static struct clk_ops sh7722_mstpcr0_clk_ops = {
.enable = sh7722_mstpcr0_enable,
.disable = sh7722_mstpcr0_disable,
};
static struct clk_ops sh7722_mstpcr1_clk_ops = {
.enable = sh7722_mstpcr1_enable,
.disable = sh7722_mstpcr1_disable,
};
static struct clk_ops sh7722_mstpcr2_clk_ops = {
.enable = sh7722_mstpcr2_enable,
.disable = sh7722_mstpcr2_disable,
}; };
#define DECLARE_MSTPCRN(regnr, bitnr, bitstr) \ #define DECLARE_MSTPCRN(regnr, bitnr, bitstr) \
{ \ { \
.name = "mstp" __stringify(regnr) bitstr, \ .name = "mstp" __stringify(regnr) bitstr, \
.arch_flags = bitnr, \ .arch_flags = MSTPCR_ARCH_FLAGS(regnr, bitnr), \
.ops = &sh7722_mstpcr ## regnr ## _clk_ops, \ .ops = &sh7722_mstpcr_clk_ops, \
} }
#define DECLARE_MSTPCR(regnr) \ #define DECLARE_MSTPCR(regnr) \
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment