xref: /OK3568_Linux_fs/kernel/drivers/clk/sunxi-ng/ccu_frac.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0-only */
2*4882a593Smuzhiyun /*
3*4882a593Smuzhiyun  * Copyright (c) 2016 Maxime Ripard. All rights reserved.
4*4882a593Smuzhiyun  */
5*4882a593Smuzhiyun 
6*4882a593Smuzhiyun #ifndef _CCU_FRAC_H_
7*4882a593Smuzhiyun #define _CCU_FRAC_H_
8*4882a593Smuzhiyun 
9*4882a593Smuzhiyun #include <linux/clk-provider.h>
10*4882a593Smuzhiyun 
11*4882a593Smuzhiyun #include "ccu_common.h"
12*4882a593Smuzhiyun 
13*4882a593Smuzhiyun struct ccu_frac_internal {
14*4882a593Smuzhiyun 	u32		enable;
15*4882a593Smuzhiyun 	u32		select;
16*4882a593Smuzhiyun 
17*4882a593Smuzhiyun 	unsigned long	rates[2];
18*4882a593Smuzhiyun };
19*4882a593Smuzhiyun 
20*4882a593Smuzhiyun #define _SUNXI_CCU_FRAC(_enable, _select, _rate1, _rate2)		\
21*4882a593Smuzhiyun 	{								\
22*4882a593Smuzhiyun 		.enable	= _enable,					\
23*4882a593Smuzhiyun 		.select	= _select,					\
24*4882a593Smuzhiyun 		.rates = { _rate1, _rate2 },				\
25*4882a593Smuzhiyun 	}
26*4882a593Smuzhiyun 
27*4882a593Smuzhiyun bool ccu_frac_helper_is_enabled(struct ccu_common *common,
28*4882a593Smuzhiyun 				struct ccu_frac_internal *cf);
29*4882a593Smuzhiyun void ccu_frac_helper_enable(struct ccu_common *common,
30*4882a593Smuzhiyun 			    struct ccu_frac_internal *cf);
31*4882a593Smuzhiyun void ccu_frac_helper_disable(struct ccu_common *common,
32*4882a593Smuzhiyun 			     struct ccu_frac_internal *cf);
33*4882a593Smuzhiyun 
34*4882a593Smuzhiyun bool ccu_frac_helper_has_rate(struct ccu_common *common,
35*4882a593Smuzhiyun 			      struct ccu_frac_internal *cf,
36*4882a593Smuzhiyun 			      unsigned long rate);
37*4882a593Smuzhiyun 
38*4882a593Smuzhiyun unsigned long ccu_frac_helper_read_rate(struct ccu_common *common,
39*4882a593Smuzhiyun 					struct ccu_frac_internal *cf);
40*4882a593Smuzhiyun 
41*4882a593Smuzhiyun int ccu_frac_helper_set_rate(struct ccu_common *common,
42*4882a593Smuzhiyun 			     struct ccu_frac_internal *cf,
43*4882a593Smuzhiyun 			     unsigned long rate, u32 lock);
44*4882a593Smuzhiyun 
45*4882a593Smuzhiyun #endif /* _CCU_FRAC_H_ */
46