xref: /linux/drivers/clk/versatile/clk-icst.h (revision ead5d1f4d877e92c051e1a1ade623d0d30e71619)
1 /* SPDX-License-Identifier: GPL-2.0 */
2 struct regmap;
3 
4 /**
5  * enum icst_control_type - the type of ICST control register
6  */
7 enum icst_control_type {
8 	ICST_VERSATILE, /* The standard type, all control bits available */
9 	ICST_INTEGRATOR_AP_CM, /* Only 8 bits of VDW available */
10 	ICST_INTEGRATOR_AP_SYS, /* Only 8 bits of VDW available */
11 	ICST_INTEGRATOR_AP_PCI, /* Odd bit pattern storage */
12 	ICST_INTEGRATOR_CP_CM_CORE, /* Only 8 bits of VDW and 3 bits of OD */
13 	ICST_INTEGRATOR_CP_CM_MEM, /* Only 8 bits of VDW and 3 bits of OD */
14 	ICST_INTEGRATOR_IM_PD1, /* Like the Versatile, all control bits */
15 };
16 
17 /**
18  * struct clk_icst_desc - descriptor for the ICST VCO
19  * @params: ICST parameters
20  * @vco_offset: offset to the ICST VCO from the provided memory base
21  * @lock_offset: offset to the ICST VCO locking register from the provided
22  *	memory base
23  */
24 struct clk_icst_desc {
25 	const struct icst_params *params;
26 	u32 vco_offset;
27 	u32 lock_offset;
28 };
29 
30 struct clk *icst_clk_register(struct device *dev,
31 			      const struct clk_icst_desc *desc,
32 			      const char *name,
33 			      const char *parent_name,
34 			      void __iomem *base);
35 
36 struct clk *icst_clk_setup(struct device *dev,
37 			   const struct clk_icst_desc *desc,
38 			   const char *name,
39 			   const char *parent_name,
40 			   struct regmap *map,
41 			   enum icst_control_type ctype);
42