xref: /openbmc/linux/drivers/clk/sunxi-ng/ccu_frac.h (revision 75bf465f0bc33e9b776a46d6a1b9b990f5fb7c37)
1*9c92ab61SThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-only */
289a3dfb7SMaxime Ripard /*
389a3dfb7SMaxime Ripard  * Copyright (c) 2016 Maxime Ripard. All rights reserved.
489a3dfb7SMaxime Ripard  */
589a3dfb7SMaxime Ripard 
689a3dfb7SMaxime Ripard #ifndef _CCU_FRAC_H_
789a3dfb7SMaxime Ripard #define _CCU_FRAC_H_
889a3dfb7SMaxime Ripard 
989a3dfb7SMaxime Ripard #include <linux/clk-provider.h>
1089a3dfb7SMaxime Ripard 
1189a3dfb7SMaxime Ripard #include "ccu_common.h"
1289a3dfb7SMaxime Ripard 
13a501a14eSMaxime Ripard struct ccu_frac_internal {
1489a3dfb7SMaxime Ripard 	u32		enable;
1589a3dfb7SMaxime Ripard 	u32		select;
1689a3dfb7SMaxime Ripard 
1789a3dfb7SMaxime Ripard 	unsigned long	rates[2];
1889a3dfb7SMaxime Ripard };
1989a3dfb7SMaxime Ripard 
2089a3dfb7SMaxime Ripard #define _SUNXI_CCU_FRAC(_enable, _select, _rate1, _rate2)		\
2189a3dfb7SMaxime Ripard 	{								\
2289a3dfb7SMaxime Ripard 		.enable	= _enable,					\
2389a3dfb7SMaxime Ripard 		.select	= _select,					\
2489a3dfb7SMaxime Ripard 		.rates = { _rate1, _rate2 },				\
2589a3dfb7SMaxime Ripard 	}
2689a3dfb7SMaxime Ripard 
2789a3dfb7SMaxime Ripard bool ccu_frac_helper_is_enabled(struct ccu_common *common,
28a501a14eSMaxime Ripard 				struct ccu_frac_internal *cf);
2989a3dfb7SMaxime Ripard void ccu_frac_helper_enable(struct ccu_common *common,
30a501a14eSMaxime Ripard 			    struct ccu_frac_internal *cf);
3189a3dfb7SMaxime Ripard void ccu_frac_helper_disable(struct ccu_common *common,
32a501a14eSMaxime Ripard 			     struct ccu_frac_internal *cf);
3389a3dfb7SMaxime Ripard 
3489a3dfb7SMaxime Ripard bool ccu_frac_helper_has_rate(struct ccu_common *common,
35a501a14eSMaxime Ripard 			      struct ccu_frac_internal *cf,
3689a3dfb7SMaxime Ripard 			      unsigned long rate);
3789a3dfb7SMaxime Ripard 
3889a3dfb7SMaxime Ripard unsigned long ccu_frac_helper_read_rate(struct ccu_common *common,
39a501a14eSMaxime Ripard 					struct ccu_frac_internal *cf);
4089a3dfb7SMaxime Ripard 
4189a3dfb7SMaxime Ripard int ccu_frac_helper_set_rate(struct ccu_common *common,
42a501a14eSMaxime Ripard 			     struct ccu_frac_internal *cf,
431d42460aSJernej Škrabec 			     unsigned long rate, u32 lock);
4489a3dfb7SMaxime Ripard 
4589a3dfb7SMaxime Ripard #endif /* _CCU_FRAC_H_ */
46