2019-05-27 09:55:08 +03:00
/* SPDX-License-Identifier: GPL-2.0-or-later */
2012-04-28 20:02:34 +04:00
/*
* Copyright 2012 Freescale Semiconductor , Inc .
*/
# ifndef __MXS_CLK_H
# define __MXS_CLK_H
2015-06-20 01:00:46 +03:00
struct clk ;
2012-04-28 20:02:34 +04:00
# include <linux/clk-provider.h>
# include <linux/spinlock.h>
# define SET 0x4
# define CLR 0x8
extern spinlock_t mxs_lock ;
int mxs_clk_wait ( void __iomem * reg , u8 shift ) ;
struct clk * mxs_clk_pll ( const char * name , const char * parent_name ,
void __iomem * base , u8 power , unsigned long rate ) ;
struct clk * mxs_clk_ref ( const char * name , const char * parent_name ,
void __iomem * reg , u8 idx ) ;
struct clk * mxs_clk_div ( const char * name , const char * parent_name ,
void __iomem * reg , u8 shift , u8 width , u8 busy ) ;
struct clk * mxs_clk_frac ( const char * name , const char * parent_name ,
void __iomem * reg , u8 shift , u8 width , u8 busy ) ;
static inline struct clk * mxs_clk_fixed ( const char * name , int rate )
{
2016-03-01 21:59:54 +03:00
return clk_register_fixed_rate ( NULL , name , NULL , 0 , rate ) ;
2012-04-28 20:02:34 +04:00
}
static inline struct clk * mxs_clk_gate ( const char * name ,
const char * parent_name , void __iomem * reg , u8 shift )
{
return clk_register_gate ( NULL , name , parent_name , CLK_SET_RATE_PARENT ,
reg , shift , CLK_GATE_SET_TO_DISABLE ,
& mxs_lock ) ;
}
static inline struct clk * mxs_clk_mux ( const char * name , void __iomem * reg ,
2015-05-28 11:45:51 +03:00
u8 shift , u8 width , const char * const * parent_names , int num_parents )
2012-04-28 20:02:34 +04:00
{
return clk_register_mux ( NULL , name , parent_names , num_parents ,
2013-07-29 15:25:01 +04:00
CLK_SET_RATE_PARENT | CLK_SET_RATE_NO_REPARENT ,
reg , shift , width , 0 , & mxs_lock ) ;
2012-04-28 20:02:34 +04:00
}
static inline struct clk * mxs_clk_fixed_factor ( const char * name ,
const char * parent_name , unsigned int mult , unsigned int div )
{
return clk_register_fixed_factor ( NULL , name , parent_name ,
CLK_SET_RATE_PARENT , mult , div ) ;
}
# endif /* __MXS_CLK_H */