/* * Low level clock header file for Telechips TCC architecture * (C) 2010 Hans J. Koch * * Licensed under the GPL v2. */ #ifndef __ASM_ARCH_TCC_CLOCK_H__ #define __ASM_ARCH_TCC_CLOCK_H__ #ifndef __ASSEMBLY__ struct clk { struct clk *parent; /* id number of a root clock, 0 for normal clocks */ int root_id; /* Reference count of clock enable/disable */ int refcount; /* Address of associated BCLKCTRx register. Must be set. */ void __iomem *bclkctr; /* Bit position for BCLKCTRx. Must be set. */ int bclk_shift; /* Address of ACLKxxx register, if any. */ void __iomem *aclkreg; /* get the current clock rate (always a fresh value) */ unsigned long (*get_rate) (struct clk *); /* Function ptr to set the clock to a new rate. The rate must match a supported rate returned from round_rate. Leave blank if clock is not programmable */ int (*set_rate) (struct clk *, unsigned long); /* Function ptr to round the requested clock rate to the nearest supported rate that is less than or equal to the requested rate. */ unsigned long (*round_rate) (struct clk *, unsigned long); /* Function ptr to enable the clock. Leave blank if clock can not be gated. */ int (*enable) (struct clk *); /* Function ptr to disable the clock. Leave blank if clock can not be gated. */ void (*disable) (struct clk *); /* Function ptr to set the parent clock of the clock. */ int (*set_parent) (struct clk *, struct clk *); }; int clk_register(struct clk *clk); void clk_unregister(struct clk *clk); #endif /* __ASSEMBLY__ */ #endif /* __ASM_ARCH_MXC_CLOCK_H__ */