162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
262306a36Sopenharmony_cistruct regmap;
362306a36Sopenharmony_ci
462306a36Sopenharmony_ci/**
562306a36Sopenharmony_ci * enum icst_control_type - the type of ICST control register
662306a36Sopenharmony_ci */
762306a36Sopenharmony_cienum icst_control_type {
862306a36Sopenharmony_ci	ICST_VERSATILE, /* The standard type, all control bits available */
962306a36Sopenharmony_ci	ICST_INTEGRATOR_AP_CM, /* Only 8 bits of VDW available */
1062306a36Sopenharmony_ci	ICST_INTEGRATOR_AP_SYS, /* Only 8 bits of VDW available */
1162306a36Sopenharmony_ci	ICST_INTEGRATOR_AP_PCI, /* Odd bit pattern storage */
1262306a36Sopenharmony_ci	ICST_INTEGRATOR_CP_CM_CORE, /* Only 8 bits of VDW and 3 bits of OD */
1362306a36Sopenharmony_ci	ICST_INTEGRATOR_CP_CM_MEM, /* Only 8 bits of VDW and 3 bits of OD */
1462306a36Sopenharmony_ci	ICST_INTEGRATOR_IM_PD1, /* Like the Versatile, all control bits */
1562306a36Sopenharmony_ci};
1662306a36Sopenharmony_ci
1762306a36Sopenharmony_ci/**
1862306a36Sopenharmony_ci * struct clk_icst_desc - descriptor for the ICST VCO
1962306a36Sopenharmony_ci * @params: ICST parameters
2062306a36Sopenharmony_ci * @vco_offset: offset to the ICST VCO from the provided memory base
2162306a36Sopenharmony_ci * @lock_offset: offset to the ICST VCO locking register from the provided
2262306a36Sopenharmony_ci *	memory base
2362306a36Sopenharmony_ci */
2462306a36Sopenharmony_cistruct clk_icst_desc {
2562306a36Sopenharmony_ci	const struct icst_params *params;
2662306a36Sopenharmony_ci	u32 vco_offset;
2762306a36Sopenharmony_ci	u32 lock_offset;
2862306a36Sopenharmony_ci};
2962306a36Sopenharmony_ci
3062306a36Sopenharmony_cistruct clk *icst_clk_register(struct device *dev,
3162306a36Sopenharmony_ci			      const struct clk_icst_desc *desc,
3262306a36Sopenharmony_ci			      const char *name,
3362306a36Sopenharmony_ci			      const char *parent_name,
3462306a36Sopenharmony_ci			      void __iomem *base);
3562306a36Sopenharmony_ci
3662306a36Sopenharmony_cistruct clk *icst_clk_setup(struct device *dev,
3762306a36Sopenharmony_ci			   const struct clk_icst_desc *desc,
3862306a36Sopenharmony_ci			   const char *name,
3962306a36Sopenharmony_ci			   const char *parent_name,
4062306a36Sopenharmony_ci			   struct regmap *map,
4162306a36Sopenharmony_ci			   enum icst_control_type ctype);
42