2012-03-08 00:01:28 +04:00
# ifndef __MACH_IMX_CLK_H
# define __MACH_IMX_CLK_H
# include <linux/spinlock.h>
# include <linux/clk-provider.h>
# include <mach/clock.h>
2012-03-09 12:11:55 +04:00
struct clk * imx_clk_pllv1 ( const char * name , const char * parent ,
2012-03-08 00:01:28 +04:00
void __iomem * base ) ;
2012-03-19 15:36:10 +04:00
struct clk * imx_clk_pllv2 ( const char * name , const char * parent ,
void __iomem * base ) ;
2012-04-04 12:02:28 +04:00
enum imx_pllv3_type {
IMX_PLLV3_GENERIC ,
IMX_PLLV3_SYS ,
IMX_PLLV3_USB ,
IMX_PLLV3_AV ,
IMX_PLLV3_ENET ,
IMX_PLLV3_MLB ,
} ;
struct clk * imx_clk_pllv3 ( enum imx_pllv3_type type , const char * name ,
const char * parent_name , void __iomem * base , u32 gate_mask ,
u32 div_mask ) ;
2011-04-19 10:33:45 +04:00
struct clk * clk_register_gate2 ( struct device * dev , const char * name ,
const char * parent_name , unsigned long flags ,
void __iomem * reg , u8 bit_idx ,
u8 clk_gate_flags , spinlock_t * lock ) ;
static inline struct clk * imx_clk_gate2 ( const char * name , const char * parent ,
void __iomem * reg , u8 shift )
{
return clk_register_gate2 ( NULL , name , parent , CLK_SET_RATE_PARENT , reg ,
shift , 0 , & imx_ccm_lock ) ;
}
2012-04-04 12:07:53 +04:00
struct clk * imx_clk_pfd ( const char * name , const char * parent_name ,
void __iomem * reg , u8 idx ) ;
2012-04-04 12:20:56 +04:00
struct clk * imx_clk_busy_divider ( const char * name , const char * parent_name ,
void __iomem * reg , u8 shift , u8 width ,
void __iomem * busy_reg , u8 busy_shift ) ;
struct clk * imx_clk_busy_mux ( const char * name , void __iomem * reg , u8 shift ,
u8 width , void __iomem * busy_reg , u8 busy_shift ,
const char * * parent_names , int num_parents ) ;
2012-03-08 00:01:28 +04:00
static inline struct clk * imx_clk_fixed ( const char * name , int rate )
{
return clk_register_fixed_rate ( NULL , name , NULL , CLK_IS_ROOT , rate ) ;
}
static inline struct clk * imx_clk_divider ( const char * name , const char * parent ,
void __iomem * reg , u8 shift , u8 width )
{
return clk_register_divider ( NULL , name , parent , CLK_SET_RATE_PARENT ,
reg , shift , width , 0 , & imx_ccm_lock ) ;
}
static inline struct clk * imx_clk_gate ( const char * name , const char * parent ,
void __iomem * reg , u8 shift )
{
return clk_register_gate ( NULL , name , parent , CLK_SET_RATE_PARENT , reg ,
shift , 0 , & imx_ccm_lock ) ;
}
static inline struct clk * imx_clk_mux ( const char * name , void __iomem * reg ,
u8 shift , u8 width , const char * * parents , int num_parents )
{
return clk_register_mux ( NULL , name , parents , num_parents , 0 , reg , shift ,
width , 0 , & imx_ccm_lock ) ;
}
static inline struct clk * imx_clk_fixed_factor ( const char * name ,
const char * parent , unsigned int mult , unsigned int div )
{
return clk_register_fixed_factor ( NULL , name , parent ,
CLK_SET_RATE_PARENT , mult , div ) ;
}
# endif