blob: 136602ec890272b261878f2ef85c93620394d654 [file] [log] [blame]
#include <linux/clkdev.h>
#define RA_GBL_SYSPLLCTL 0x0014
#define RA_GBL_SYSPLLCTL1 0x0018
#define RA_GBL_CPUPLLCTL 0x003C
#define RA_GBL_CPUPLLCTL1 0x0040
#define RA_GBL_PLLSTATUS 0x014C
#define RA_GBL_CLKSELECT 0x0154
#define RA_GBL_CLKSELECT1 0x0158
#define RA_GBL_CLKSELECT2 0x015C
#define RA_GBL_CLKSWITCH 0x0164
#define RA_GBL_CLKSWITCH1 0x0168
#define RA_GBL_RESETTRIGGER 0x0178
#define RA_GBL_SDIOXINCLKCTRL 0x023C
#define RA_GBL_SDIO1XINCLKCTRL 0x0240
#define RA_GBL_STICKYRESETN 0x02C8
struct clkops {
unsigned long (*getrate)(struct clk *);
};
struct clk {
const struct clkops *ops;
int ctl;
int ctl1;
};
#define CLK(_name, _ctl, _ctl1) \
static unsigned long _name##_get_rate(struct clk *clk) \
{ \
unsigned long pll = get_pll(clk); \
u32 divider = _name##_get_divider(); \
return 1000000*pll/divider; \
} \
static struct clkops _name##_clk_ops = { \
.getrate = _name##_get_rate, \
}; \
static struct clk _name##_clk = { \
.ctl = _ctl, \
.ctl1 = _ctl1, \
.ops = &_name##_clk_ops, \
}
#define CLK_LOOKUP(d, n, c) \
{ \
.clk = &c, \
.con_id = n, \
.dev_id = d, \
}
void __init berlin_clk_init(void);