#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);
